8

私のプロジェクトでは、別のプログラムからプレーン テキスト ファイル (report.txt) を取得します。すべてプレーンテキストでフォーマットされています。メモ帳で開くと、きれいに見えます (プレーン テキスト ファイルと同じくらい)。Word でファイルを開いて段落を表示すると、スペースの ... と段落の後ろ向きの P が表示されます。

このファイルを PDF に変換し、他の PDF ページを追加して 1 つの最終的な PDF を作成する必要があります。これはすべて Python で行われます。

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

5 に答える 5

2

このページの右側にある「関連」の質問からわかるように、ReportLabが通常の推奨事項です。

だけでテキストを作成してみましたStyleSheet['Normal']か?つまり、次のように適切に見える出力が得られた場合、問題はどういうわけかあなたのスタイルにあります。

Paragraph(para1, style=StyleSheet['Normal'])
于 2012-04-12T16:47:03.240 に答える
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は元のテキストファイルとまったく同じように見えます

于 2016-07-21T20:33:20.043 に答える