如何使 Reportlab PDF 具有交互性?
How to make Reportlab PDF interactive?
我已经为这个问题苦苦挣扎了一段时间。文档很差,似乎没有任何示例。
这里的代码工作得很好。
path = "C:/Users/YourName/Desktop/"
from reportlab.pdfgen.canvas import Canvas as can
def greet(c):
c.drawString(220, 700, "Reporting")
c = can(path + "first.pdf")
greet(c)
c.showPage()
c.save()
我想生成一个 PDF,其中包含您可以勾选的交互式复选框或单选按钮等。
我尝试使用以下代码,但一直收到 AttributeError
.
from reportlab.pdfgen.canvas import Canvas as can
def welcome(c):
import reportlab as rep
rep.pdfbase.acroform.AcroForm.checkbox(rep.pdfbase.acroform.AcroForm,
name='CB0',tooltip='Field CB0',
checked=True,
x=72,y=72+4*36,
buttonStyle='diamond',
borderStyle='bevelled',
borderWidth=2,
borderColor="red",
fillColor="green",
textColor="blue",
forceBorder=False)
c3 = can(path + "story.pdf")
welcome(c3)
c3.showPage()
c3.save()
我一直收到 AttributeError: property object has no attribute _doc
如果我从 checkbox
方法中删除 rep.pdfbase.acroform.AcroForm
,我将收到一条错误消息,指出缺少 1 个必需的位置参数。它用于 "self" 参数。
如有任何帮助,我们将不胜感激。
在 ReportLab 中,acroForm
是 canvas
实例的 属性(文档或代码中的大写错误)。所以你需要像这样调用相关的方法:
c = canvas.Canvas("example.pdf")
c.acroForm.checkbox()
您可能 运行 遇到与 PDF 阅读器的一些兼容性问题。它在 Adobe Acrobat Reader 中运行良好,但在其他一些阅读器中无法正常运行或呈现不正确。
这是您给出的示例的完整工作版本:
from reportlab.pdfgen import canvas
from reportlab.lib.colors import blue, green, white
def welcome(c):
c.acroForm.checkbox(
checked=True,
buttonStyle='check',
shape='square',
fillColor=white,
borderColor=green,
textColor=blue,
borderWidth=1,
borderStyle='solid',
size=20,
x=100,
y=100,
tooltip="example tooltip",
name="example_checkbox",
annotationFlags='print',
fieldFlags='required',
forceBorder=True,
relative=False,
dashLen=3)
c3 = canvas.Canvas("story.pdf")
welcome(c3)
c3.showPage()
c3.save()
我已经为这个问题苦苦挣扎了一段时间。文档很差,似乎没有任何示例。
这里的代码工作得很好。
path = "C:/Users/YourName/Desktop/"
from reportlab.pdfgen.canvas import Canvas as can
def greet(c):
c.drawString(220, 700, "Reporting")
c = can(path + "first.pdf")
greet(c)
c.showPage()
c.save()
我想生成一个 PDF,其中包含您可以勾选的交互式复选框或单选按钮等。
我尝试使用以下代码,但一直收到 AttributeError
.
from reportlab.pdfgen.canvas import Canvas as can
def welcome(c):
import reportlab as rep
rep.pdfbase.acroform.AcroForm.checkbox(rep.pdfbase.acroform.AcroForm,
name='CB0',tooltip='Field CB0',
checked=True,
x=72,y=72+4*36,
buttonStyle='diamond',
borderStyle='bevelled',
borderWidth=2,
borderColor="red",
fillColor="green",
textColor="blue",
forceBorder=False)
c3 = can(path + "story.pdf")
welcome(c3)
c3.showPage()
c3.save()
我一直收到 AttributeError: property object has no attribute _doc
如果我从 checkbox
方法中删除 rep.pdfbase.acroform.AcroForm
,我将收到一条错误消息,指出缺少 1 个必需的位置参数。它用于 "self" 参数。
如有任何帮助,我们将不胜感激。
在 ReportLab 中,acroForm
是 canvas
实例的 属性(文档或代码中的大写错误)。所以你需要像这样调用相关的方法:
c = canvas.Canvas("example.pdf")
c.acroForm.checkbox()
您可能 运行 遇到与 PDF 阅读器的一些兼容性问题。它在 Adobe Acrobat Reader 中运行良好,但在其他一些阅读器中无法正常运行或呈现不正确。
这是您给出的示例的完整工作版本:
from reportlab.pdfgen import canvas
from reportlab.lib.colors import blue, green, white
def welcome(c):
c.acroForm.checkbox(
checked=True,
buttonStyle='check',
shape='square',
fillColor=white,
borderColor=green,
textColor=blue,
borderWidth=1,
borderStyle='solid',
size=20,
x=100,
y=100,
tooltip="example tooltip",
name="example_checkbox",
annotationFlags='print',
fieldFlags='required',
forceBorder=True,
relative=False,
dashLen=3)
c3 = canvas.Canvas("story.pdf")
welcome(c3)
c3.showPage()
c3.save()