2012-04-11 43 views
5

Đối với dự án của tôi, tôi nhận được một tệp văn bản thuần túy (report.txt) từ một chương trình khác. Tất cả được định dạng ở dạng văn bản thuần túy. Nếu bạn mở nó trong Notepad, nó trông đẹp (nhiều như một tập tin văn bản thuần túy có thể). Khi tôi mở tập tin trong Word và hiển thị các đoạn văn, tôi thấy ... cho các khoảng trắng và chữ P ngược cho pararaph.Chuyển văn bản thuần sang PDF bằng Python

Tôi cần chuyển đổi tệp này sang PDF và thêm một số trang PDF khác để tạo một tệp PDF cuối cùng. Tất cả điều này xảy ra trong Python.

Tôi gặp sự cố khi chuyển đổi report.txt sang pdf. Tôi có ReportLab và có thể đọc tệp và thực hiện một vài thay đổi (như thay đổi văn bản thành Chuyển phát nhanh), nhưng khoảng cách bị mất. Khi tập tin được đọc, nó xuất hiện để loại bỏ bất kỳ không gian thêm.

Câu hỏi: a) có cách nào dễ dàng hơn để chuyển đổi report.txt sang pdf không? b) Nếu không, có cách nào giữ không gian của tôi khi tôi đọc tệp không? c) Hoặc có một tham số nào tôi thiếu trong kiểu đoạn văn bản của tôi sẽ giữ nguyên giao diện gốc?

Dưới đây là mã của tôi:

# ------------------------------------ 
# 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) 

Trả lời

2

ReportLab là Khuyến nghị thường như bạn có thể nhìn thấy từ những câu hỏi "có liên quan" ở phía bên phải của trang này.

Bạn đã thử tạo văn bản chỉ với StyleSheet['Normal']? Tức là, nếu bạn có được kết quả phù hợp với những điều sau đây, vấn đề là bằng cách nào đó với phong cách của bạn.

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

bình thường không hoạt động, vì vậy tại sao tôi đã cố gắng để tạo của riêng tôi. – user1327390

+1

Vì Bình thường * nên * hoạt động, tôi khuyên bạn nên tìm hiểu lý do tại sao nó không hoạt động. Sao chép-dán một ví dụ từ tài liệu, và nếu nó vẫn không hoạt động, có gì đó sai với cài đặt ReportLab của bạn. Sau đó, thêm 'report.txt' vào danh sách kết hợp và nếu nó phá vỡ nó, hãy kiểm tra mã hóa tệp của bạn-- bạn có thể có UTF16 thay vì ascii không? Chúc may mắn. – alexis

0

Tôi gặp sự cố tương tự. Tôi giải quyết với mã này:

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 trông giống hệt như tập tin văn bản gốc

+0

Bạn có thể chỉnh sửa để hiển thị cách bạn tạo canvas và tệp pdf không? – pekasus

Các vấn đề liên quan