Jim*_*Jim 3 python pdf reportlab text-formatting
我的问题是,使用reportlab生成简单的文本文档时,它会丢失所有格式。我已经运行了几次尝试和调试它,问题似乎是当传递msgStr给Paragraph它时,它会丢失与它一起发送的所有格式。
有谁知道如何在保持当前文本格式的同时生成简单的pdf
码:
# PDF GENERATION LIBRARIES
# import the report lab PDF generation tools
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
Parts = []
def sumFile(msgStr = None, COMPLETE = 0):
pdfmetrics.registerFont(TTFont('Inconsolata', 'Inconsolata-Regular.ttf'))
summaryName = SimpleDocTemplate(vehID+".pdf")
style = ParagraphStyle(
name='Normal',
fontName='Inconsolata',
fontSize=8,
)
msgStr.replace('\n','<br />')
if msgStr == "PageBreak":
parts.append(PageBreak())
else:
parts.append(msgStr)
if COMPLETE == 1:
genStr = "Generated using " + progName + " " + str(progVers)
parts.append(genStr)
print parts
summaryName.build(Paragraph(parts, style))
if __name__ == "__main__":
sumFile("%9s %s\n" % ("Bobby", "Sue"))
sumFile("{0:12}{1:7}{2:5}deg_C\tsmp {3}\n".format("20", "1000", "3.0", "535"))
sumFile("{0} {1}\n\n".format("09/06/2016", "11:51:39"))
Run Code Online (Sandbox Code Playgroud)
我希望这是您正在寻找的:)
# PDF GENERATION LIBRARIES
# import the report lab PDF generation tools
from reportlab.lib.pagesizes import letter
from reportlab.lib.styles import ParagraphStyle
from reportlab.lib.units import inch
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
parts = []
msg = ''
progName = "PDF"
progVers = "1.0"
vehID = "vehID"
def sumFile(msgStr = None, COMPLETE = 0):
global parts, msg, progName, progVers, vehID
pdfmetrics.registerFont(TTFont('Inconsolata', 'Inconsolata-Regular.ttf'))
style = ParagraphStyle(
name='Normal',
fontName='Inconsolata',
fontSize=8,
)
msgStr = msgStr.replace(' ',' ')
msgStr = msgStr.replace('\n','<br />')
msgStr = msgStr.replace('\t',' ')
if msgStr == "PageBreak":
if msg != '':
parts.append(Paragraph(msg, style = style))
msg = ''
parts.append(PageBreak())
else:
msg += msgStr
if COMPLETE == 1:
if msg != '':
parts.append(Paragraph(msg, style = style))
msg = ''
genStr = "Generated using " + progName + " " + str(progVers)
parts.append(Paragraph(genStr, style = style))
summaryName = SimpleDocTemplate(vehID+".pdf")
summaryName.build(parts)
if __name__ == "__main__":
sumFile("%9s %s\n" % ("Bobby", "Sue"))
sumFile("{0:12}{1:7}{2:5}deg_C\tsmp {3}\n".format("20", "1000", "3.0", "535"))
sumFile("{0} {1}\n\n".format("09/06/2016", "11:51:39"))
# sumFile("{0} {1}\n\n".format("09/06/2016", "11:51:39"), COMPLETE=1)
Run Code Online (Sandbox Code Playgroud)
需要注意的几件事:
1. summaryName.build()的参数应该是一个列表。
2. Paragraph()的第一个参数是字符串而不是列表。
3.简单地编写msgStr.replace('\ n','<br />')不会修改msgStr。因此,您需要分配它。
您可以参考这些鼠标VS Python中,文件以了解更多有关ReportLab的。
| 归档时间: |
|
| 查看次数: |
12065 次 |
| 最近记录: |