form feeds ,并在 Python 中用子字符串 \x0c
表示。我能够读取文本并通过这些换页符拆分文档。然后,我使用包
reportlab
创建具有正确分页的 PDF。这是我的代码的精简版本:
import glob
from reportlab.lib,enums import TA_JUSTIFY
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak, Spacer
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.units import inch
file = glob.glob(wdir + text_folder + "/**/*.txt", recursive=True)
for i in file:
doc = SimpleDocTemplate(i[:-4] + ".pdf", pagesize=letter, rightmMargin=72, leftMargin=72, topMargin=72, bottomMargin=18)
f = open(i, encoding='utf-8')
k = f.read()
k_breaks = k.split("\x0c")
Story = []
styles=getSampleStyleSheet()
styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY))
for j in range(len(k_breaks)):
ptext='<font size="12">' + k_breaks[j] + '</font>'
Story.append(Paragraph(ptext, styles["Justify"]))
Story.append(Spacer(1,12))
if j != len(k_breaks)-1:
Story.append(PageBreak())
doc.build(Story)
通过跟踪,我发现我的代码似乎达到了线路瓶颈
Story.append(Paragraph(ptext, styles["Justify"]))
Story.append(Spacer(1,12))
尽管如此,这实际上只是大型文本文件(1 或 2 MB 以上)的问题。 100kb 范围内的较小文本文件并不算“太慢”,但这些较大的文件需要花费数小时。完成后,生成的 PDF 长达数百或数千页。我想减少处理时间。 reportlab
中是否有更好的方法来做到这一点,或者建议改变方法 - 也许通过不同的包?
您可以查看
我不知道处理这些大文件是否会更快,但你可以尝试一下并检查以下代码:
import glob
from pdfme import build_pdf
file = glob.glob(wdir + text_folder + "/**/*.txt", recursive=True)
for i in file:
f = open(i, encoding='utf-8')
k = f.read()
k_breaks = k.split("\x0c")
sections = [{"content": [k_break]} for k_break in k_breaks]
with open(i[:-4] + ".pdf", 'wb') as f:
build_pdf({
"style": {"s": 12, "text_aling": "j"},
"page_style": {"page_size": "letter", "margin": [72,72,18,72]},
"sections": sections
}, f)
查看文档
此处。