对于我的项目,我从另一个程序中获取纯文本文件(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)
答案 0 :(得分:2)
ReportLab是通常的建议 - 正如您可以从&#34;相关&#34;本页右侧的问题。
您是否尝试使用StyleSheet['Normal']
创建文字?即,如果您使用以下内容获得适当的输出,问题就是您的风格。
Paragraph(para1, style=StyleSheet['Normal'])
答案 1 :(得分:2)
要将文本或文本文件转换为pdf,应使用命令行界面中的 pip install fpdf 安装fpdf模块。 运行以下代码,您将在文件夹中找到pdf文件-
from fpdf import FPDF
pdf = FPDF()
# Add a page
pdf.add_page()
# set style and size of font
# that you want in the pdf
pdf.set_font("Arial", size = 15)
# open the text file in read mode
f = open("path where text file is stored\\File_name.txt", "r")
# insert the texts in pdf
for x in f:
pdf.cell(50,5, txt = x, ln = 1, align = 'C')
# save the pdf with name .pdf
pdf.output("path where you want to store pdf file\\File_name.pdf")
参考:https://www.geeksforgeeks.org/convert-text-and-text-file-to-pdf-using-python/
答案 2 :(得分: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看起来与原始文本文件完全相同
答案 3 :(得分:0)
您可以使用pdf_canvas = canvas.Canvas('output_file.pdf')
创建画布,并使用pdf_canvas.save()
生成PDF。
答案 4 :(得分:0)
我创建了一个小的辅助函数,通过使用等宽字体将多行文本转换为“报告外观”中的PDF文件。太长的行在空格处缠绕,以致无法适合页面宽度:
let browser = navigator.userAgent.toLowerCase();
if (browser.indexOf('safari')){
document.getElementId('btn').style.display = 'none';
}