2012-04-11 3 views
5

내 프로젝트의 경우 다른 프로그램에서 일반 텍스트 파일 (report.txt)을 얻습니다. 모두 일반 텍스트 형식입니다. 메모장에서 열면 일반 텍스트 파일만큼 멋지게 보입니다. Word에서 파일을 열고 단락을 볼 때 공백은 paranph, 공백은 pararaph를 나타냅니다.파이썬에서 일반 텍스트를 PDF로 변환

이 파일을 PDF로 변환하고 다른 PDF 페이지를 추가하여 하나의 최종 PDF를 만들어야합니다. 이 모든 일은 파이썬에서 일어납니다.

report.txt를 pdf로 변환하는 데 문제가 있습니다. ReportLab을 가지고 있으며 파일을 읽고 Courier로 텍스트를 변경하는 등 몇 가지 사항을 변경할 수 있지만 공백은 없어집니다. 파일을 읽을 때 여분의 공백이 없어집니다.

질문 : a) report.txt를 pdf로 변환하는 더 쉬운 방법은 무엇입니까? b) 그렇지 않으면 파일을 읽을 때 공백을 유지할 수있는 방법이 있습니까? c) 원래 모양을 유지할 단락 스타일에서 빠진 매개 변수가 있습니까?

# ------------------------------------ 
# Styles 
# ------------------------------------ 

styleSheet = getSampleStyleSheet() 
mystyle = ParagraphStyle(name='normal',fontName='Courier', 
         fontSize=10, 
         alignment=TA_JUSTIFY, 
         leading=1.2*12, 
         parent=styleSheet['Normal'])  

#=====================================================================================  
model_report = 'report.txt' 

# Create document for writing to pdf 
doc = SimpleDocTemplate(str(pdfPath), \ 
         rightMargin=40, leftMargin=40, \ 
         topMargin=40, bottomMargin=25, \ 
         pageSize=A4) 
doc.pagesize = portrait(A4) 

# Container for 'Flowable' objects 
elements = []  

# Open the model report 
infile = file(model_report).read() 
report_paragraphs = infile.split("\n") 

for para in report_paragraphs: 
    para1 = '<font face="Courier" >%s</font>' % para 
    elements.append(Paragraph(para1, style=mystyle)) 
doc.build(elements) 

답변

2

ReportLab는이 페이지의 오른쪽에있는 "관련"질문에서 볼 수있는 일반적인 recommendation--입니다 :

여기 내 코드입니다.

StyleSheet['Normal']으로 텍스트를 만들려고 했습니까? 즉, 다음과 같이 적절하게 보이는 결과물을 얻는다면 문제는 어떻게 든 당신의 스타일에 있습니다.

Paragraph(para1, style=StyleSheet['Normal']) 
+0

정상 작동하지 않는 원래의 텍스트 파일로 정확히 같은 보인다. – user1327390

+1

정상 *이 작동해야하므로, 왜 그렇지 않은지 알아내는 것이 좋습니다. 설명서의 예제를 복사하여 붙여 넣기해도 문제가 해결되지 않으면 ReportLab 설치에 문제가 있습니다. 그런 다음'report.txt'를 믹스에 추가합니다. 파일 인코딩을 확인하면 아스키 대신 UTF16을 사용할 수 있습니까? 행운을 빕니다. – alexis

0

비슷한 문제가 있습니다. 나는이 코드를 해결 : 나는 내 자신을 만들려고 한 이유

from reportlab.lib.pagesizes import letter 
from reportlab.pdfgen import canvas 
from reportlab.lib.utils import ImageReader 
from PIL import Image 

# ..... 
# ..... some exta code unimportant for this issue.... 
# .... 


# here it is 
ptr = open("tafAlternos.txt", "r") # text file I need to convert 
lineas = ptr.readlines() 
ptr.close() 
i = 750 
numeroLinea = 0 

while numeroLinea < len(lineas): 
    if numeroLinea - len(lineas) < 60: # I'm gonna write every 60 lines because I need it like that 
     i=750 
     for linea in lineas[numeroLinea:numeroLinea+60]:  
      canvas.drawString(15, i, linea.strip()) 
      numeroLinea += 1 
      i -= 12 
     canvas.showPage() 
    else: 
     i = 750 
     for linea in lineas[numeroLinea:]: 
      canvas.drawString(15, i, linea.strip()) 
      numeroLinea += 1 
      i -= 12 
     canvas.showPage() 

PDF 파일은 따라서,

+0

캔버스와 PDF 파일을 어떻게 작성했는지 보여주기 위해 편집 할 수 있습니까? – pekasus