use*_*390 5 python text reportlab
对于我的项目,我从另一个程序中获取纯文本文件(report.txt).它全部以纯文本格式化.如果你在记事本中打开它,它看起来不错(就像纯文本文件一样).当我在Word中打开文件并显示段落时,我看到...用于空格,向后看P用于pararaph.
我需要将此文件转换为PDF并添加一些其他PDF页面以制作一个最终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)
Run Code Online (Sandbox Code Playgroud)
m13*_*13r 10
我创建了一个小辅助函数,使用等宽字体将多行文本转换为“报告外观”的 PDF 文件。太长的行会以空格换行,以便适合页面宽度:
import textwrap
from fpdf import FPDF
def text_to_pdf(text, filename):
a4_width_mm = 210
pt_to_mm = 0.35
fontsize_pt = 10
fontsize_mm = fontsize_pt * pt_to_mm
margin_bottom_mm = 10
character_width_mm = 7 * pt_to_mm
width_text = a4_width_mm / character_width_mm
pdf = FPDF(orientation='P', unit='mm', format='A4')
pdf.set_auto_page_break(True, margin=margin_bottom_mm)
pdf.add_page()
pdf.set_font(family='Courier', size=fontsize_pt)
splitted = text.split('\n')
for line in splitted:
lines = textwrap.wrap(line, width_text)
if len(lines) == 0:
pdf.ln()
for wrap in lines:
pdf.cell(0, fontsize_mm, wrap, ln=1)
pdf.output(filename, 'F')
Run Code Online (Sandbox Code Playgroud)
您可以这样使用此函数将文本文件转换为 PDF 文件:
input_filename = 'test.txt'
output_filename = 'output.pdf'
file = open(input_filename)
text = file.read()
file.close()
text_to_pdf(text, output_filename)
Run Code Online (Sandbox Code Playgroud)
ReportLab 是通常的推荐——正如您可以从本页右侧的“相关”问题中看到的那样。
您是否尝试过使用 just 创建文本StyleSheet['Normal']?也就是说,如果您通过以下内容获得了看起来正确的输出,那么问题出在您的风格上。
Paragraph(para1, style=StyleSheet['Normal'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15855 次 |
| 最近记录: |