You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ScrolledText获取文本生成PDF?代码生成空白PDF求助

解决ScrolledText内容生成PDF空白的问题

你的代码核心问题是Paragraph绘制的坐标超出了PDF页面的可视范围,另外还有文本处理的小细节问题,导致生成的PDF显示空白。以下是修改后的完整代码,以及关键修改点说明:

修改后的代码

from tkinter import *
import tkinter as tk
from tkinter.filedialog import asksaveasfilename
from reportlab.pdfgen import canvas
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import Paragraph
from reportlab.lib.pagesizes import A4
from tkinter import scrolledtext

my_w = tk.Tk()
my_w.geometry("400x300")
my_w.title("PDF GENERATOR")
b1 = tk.Button(text='Generate PDF', command=lambda: gen_pdf())
b1.grid(row=2, column=0, padx=20, pady=10)
infodescr = tk.scrolledtext.ScrolledText(my_w, width=70, height=12, wrap=WORD, font=('calibre', 12))
infodescr.grid(row=1, column=0, sticky=E+W+N+S, padx=5, pady=5)
infodescr.insert(INSERT, "Hello this is the sample pdf \n you are welcome!")

my_Style = ParagraphStyle('My Para style', fontName="Times-Roman", fontSize=16,
                          alignment=0, borderWidth=2, borderColor='#FFFF00', backColor='#F1F1F1',
                          borderPadding=(20, 20, 20), leading=20)
width, height = A4

def gen_pdf():
    my_path = asksaveasfilename(filetypes=[('PDF files', '*.pdf')], defaultextension=".pdf")
    if my_path:
        # 去掉末尾多余的换行符
        text = infodescr.get("1.0", END-1c)
        # 替换换行为reportlab识别的换行标签
        text = text.replace('\n', '<BR/>')
        p1 = Paragraph(text, my_Style)
        c = canvas.Canvas(my_path, pagesize=A4)
        # 设置Paragraph的可用宽度(页面宽度减100,左右留边)
        p1.wrapOn(c, width - 100, height)
        # 调整绘制坐标到页面可视区域内(x=50, y=height-100,从上方往下100单位开始绘制)
        p1.drawOn(c, 50, height - 100)
        c.save()

my_w.mainloop()

关键修改点

  • 坐标修正:A4页面实际尺寸为(595.276, 841.89),你原来的width - 800和height - 1000都是负数,导致内容绘制到了页面之外,改成50和height - 100后,内容会显示在页面可视区域内。
  • 文本处理优化:用END-1c获取文本,去掉ScrolledText默认添加的末尾换行符,避免PDF中多出空行;同时把换行符替换为reportlab能识别的<BR/>标签(你原来写的&lt;BR/&gt;是HTML转义后的字符,reportlab无法识别)。
  • wrapOn参数调整:把wrapOn的高度设为页面高度,确保Paragraph能正确计算换行逻辑。

内容的提问来源于stack exchange,提问作者Prashant Priyadarshi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:05:26