如题:创建到第二页的时候出现
代码如下:
directory, filter_str = QFileDialog.getOpenFileName(self, "选取文件", "./", "Text Files (*.doc);;Text Files (*.docx);;All Files (*)")
doc = Document(directory)
path=os.getcwd()+"/pdfFile"
if not os.path.exists(path):
os.makedirs(path)
text=''
self.btn2.setEnabled(False)
font_path ='WenQuanYiMicroHei.ttf'
font_name='WenQuanYiMicroHei'
pdfmetrics.registerFont(TTFont(font_name, font_path))
pdf=canvas.Canvas(path+'/example.pdf',pagesize=letter)
font_size=12
y=750
pdf.setFont(font_name, size=font_size)
for paragraph in doc.paragraphs:
text=paragraph.text
lines = text.split('\n')
for line in lines:
pdf.saveState()
pdf.drawString(10,y,line)
pdf.restoreState()
y-=20
if y<=0:
y=750
pdf.showPage()
pdf.save()
QMessageBox.information(self, "文件转换完成!", f"写入DOC文件结束,共计{len(text.encode())}个字")
self.btn2.setEnabled(True)
问题出现在哪里?
补充问题:现在发现不是打印Y轴问题,问题是只要是中文就会出现黑块,不知道什么原因?
问题解决!
分析原因,可能原因是for循环下每更换一个页面,同时清除内存,也因此导致里面字体设置没有了,就出现中文黑块
因此修改如下代码:
pdf.setFont(font_name, size=font_size)
for paragraph in doc.paragraphs:
text=paragraph.text
lines = text.split('\n')
for line in lines:
if y<=20:
pdf.showPage()
pdf.setFont(font_name, size=font_size)
y = 750
pdf.drawString(10, y, line)
y -= 20
重点是需要更换新页面之后,重新设置字体
问题出现在翻页逻辑处理部分。在你的代码中,翻页的条件 if y <= 0:
只在处理完整个段落的所有行之后才检查一次。这意味着,如果某个段落的内容不足以填满一页(即 y
的值没有递减到小于或等于0),那么即使页面空间已经不足以容纳更多内容,程序也不会立即翻页。这可能导致第二页(或后续页)的内容从错误的位置开始,或者内容重叠。
你需要调整翻页逻辑,确保在每次尝试写入新行之前检查当前页面是否有足够的空间。这里有一个改进后的代码片段:
# ...(之前的代码保持不变)
for paragraph in doc.paragraphs:
text = paragraph.text
lines = text.split('\n')
for line in lines:
# 检查是否有足够的空间写入当前行
if y <= 40: # 预留一些边距,避免内容太靠近页面底部
y = 750 # 重置y坐标到页面顶部
pdf.showPage() # 翻页
pdf.drawString(10, y, line)
y -= 20 # 移动y坐标到下一行的位置
# ...(之后的代码保持不变)
在这个修改中,我设置了一个条件 if y <= 40:
来检查是否有足够的空间写入新行。这个值(40)可以根据你的字体大小和所需的底部边距进行调整。如果空间不足,代码会重置 y
到页面顶部并调用 pdf.showPage()
来翻页。这样可以确保内容不会重叠,并且每页的内容都是从页面的顶部开始。
此外,你的消息框中显示的字符数计算方式 len(text.encode())
可能不是你想要的,因为它计算的是字节数而不是字符数。如果你想要显示字符数,应该使用 len(text)
。
这段代码第一次可以运行得很好,但是当我第二次运行app时,它不会立即生成PDF文件。
问题内容: 我想使用python创建一个带有路径的文件。我一直在使用where 。我一直在寻找的非目录版本,但是却找不到任何东西。是否有类似这样的工具可以创建文件而无需打开文件,也无需使用系统或popen /subprocess? 问题答案: 有没有方法来创建,而无需打开文件时,它 有( 但它需要在OSX root权限 )。创建文件的系统调用实际上带有该标志。因此,无论如何,您将始终打开文件。 因
问题内容: 我想要一个多页的pdf文件,并每页创建单独的pdf文件。 我已经下载了reportlab并浏览了文档,但它似乎是针对pdf生成的。我还没有看到有关处理PDF文件本身的任何信息。 有没有一种简单的方法可以在python中做到这一点? 问题答案: 等等
问题内容: 为什么不行: 该代码可以正常工作,但无法打开.pdf文件。普通文本文件和pdf有什么区别?如果我想在python中创建并写入pdf文件怎么办? 问题答案: 您可以安装fpdf库,然后:
问题内容: 此功能无效,并引发错误。我是否需要更改任何参数或参数? 问题答案: 如果文件不存在,将失败。 您可以使用,如果该文件不存在,则会创建该文件,但是它将截断现有文件。 另外,您可以使用; 如果该文件不存在,则会创建该文件,但不会截断现有文件。
问题内容: 在熊猫中为数据框生成PDF的有效方法是什么? 问题答案: 一种方法是使用markdown。您可以使用。这会将数据框转换为html表。从那里,您可以将生成的html放入markdown文件(.md)(请参阅http://daringfireball.net/projects/markdown/basics)。从那里开始,有一些实用程序可以将markdown转换为pdf(https://w
几天前不小心删了chrome浏览器,重装后出现问题,今天运行python代码时出现 init() got an unexpected keyword argument 'executable_path’ 错误,以前没有出现过的,于是我执行 后,出现更严重的问题 这个问题困扰我几天了,昨天重装浏览器后好了一阵,跑我的python代码没问题,今天又出现了前面提到的问题