python - 如何使 Reportlab PDF 具有交互性?

标签 python pdf button reportlab

我已经被这个问题困扰了一段时间了。文档非常差,而且似乎没有任何示例。

这里的代码运行得很好。

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:属性对象没有属性_doc

如果我从 checkbox 方法中删除 rep.pdfbase.acroform.AcroForm,我会收到一条错误消息,指出缺少 1 个所需的位置参数。它用于“self”参数。

任何帮助将不胜感激。

最佳答案

在 ReportLab 中,acroFormcanvas 实例的一个属性(文档或代码中的大写是错误的)。因此,您需要像这样调用关联的方法:

c = canvas.Canvas("example.pdf")
c.acroForm.checkbox()

您可能会遇到 PDF 阅读器的一些兼容性问题。它在 Adob​​e 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()

关于python - 如何使 Reportlab PDF 具有交互性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49225189/

相关文章:

html - HTTPS 破坏嵌入式 PDF

java - 水平分割 PDF 的一部分

java - 如何随机设置按钮的位置?

python - pop()函数没有完全弹出列表中位数

php - DomPDF 错误未捕获异常 'Dompdf\Exception'

python - 二分查找递归错误: maximum recursion depth exceeded in comparison

javascript - CK编辑器 : How to enable custom plugin button when in "Source" mode

java - 如何在 Java 中编写 DropDownButton

python - 将数据保存为矢量的 XML 文件转换为 Pandas 数据框

python - python3中从文件导入函数的正确方法