【问题标题】:Trying to create an editable pdf with Python尝试使用 Python 创建可编辑的 pdf
【发布时间】:2013-10-10 19:14:17
【问题描述】:

我正在尝试创建一个带有可以检查的复选框的 PDF(使用 python)。我一直在尝试使用 pisa 生成 pdf 并查看了互联网并尝试了不同的示例,但我不知道如何制作可编辑的 PDF。

这是我最近的尝试:

import cStringIO
import ho.pisa as pisa
import os

# shortcut for dumping all logs on screen
pisa.showLogging()

def HTML2PDF(data, filename, open=False):
    """
        Simple test showing how to create a PDF file from
        PML Source String. Also shows errors and tries to start
        the resulting PDF
    """
    pdf = pisa.CreatePDF(cStringIO.StringIO(data), file(filename, "wb"))

    if open and not(pdf.err):
        os.startfile(str(filename))

    return not pdf.err

if __name__=="__main__":
    HTMLTEST = """
        <html>
            <body>
                <form name="deleteForm" method="get" action="">
                     User 1 <input type="checkbox" name="user" value="delete" />
                </form>
            </body>
        </html>
   """

   HTML2PDF(HTMLTEST, "test.pdf", open=True)

表格给我一个错误:

回溯(最近一次通话最后): 文件“C:/Users/horeth/PycharmProjects/Reportlab/HTMLtoPF/Main.py”,第 32 行,在 HTML2PDF(HTMLTEST, "test.pdf", open=True) 文件“C:/Users/horeth/PycharmProjects/Reportlab/HTMLtoPF/Main.py”,第 14 行,HTML2PDF pdf = pisa.CreatePDF(cStringIO.StringIO(数据),文件(文件名,“wb”)) IOError:[Errno 13] 权限被拒绝:'test.pdf'

这些复选框供读者决定是否需要删除用户。

我想知道是否有一种方法可以使用 Python 创建可编辑的 PDF 文档。作为示例,这只是我迄今为止所做的尝试之一。

【问题讨论】:

  • 现在,我只想制作一个只有一个用户和一个复选框的 PDF
  • 它正在尝试在您无权写入的位置创建 pdf...这是我从您的错误消息中猜测的
  • 我确实有权写它。但我想弄清楚是否有办法在 Python 中创建可编辑的 PDF。
  • 您得到的错误是权限错误...也许 pdf 在锁定更改的程序中打开(我认为 acrobat 不允许更改已打开的文件)它什么都没有与pdf内容有关

标签: python pdf pdf-generation pisa


【解决方案1】:

可能的原因。您没有对该目录的写入权限。该文件已存在,但您没有对其的写入权限。

【讨论】:

  • 我确实有写权限,我尝试了上面的代码,但里面的 HTML 略有不同。我的目标是找到一种使用 Python 制作可编辑 PDF 的方法。我认为这种方式会奏效,我一直在尝试很多不同的东西,但都没有奏效。我也试过reportlab
  • 您没有写入权限...无论是因为它试图在与您想象的不同的目录中打开它,还是 pdf 在不允许更改文件的应用程序中打开让他们打开。这和你写的内容无关
  • 我刚刚复制并粘贴了您的代码,它创建的 pdf 文件很好……也就是说……它没有添加复选框
【解决方案2】:
import cStringIO as StringIO
from xhtml2pdf import pisa
from django.template.loader import get_template
from django.template import Context
from cgi import escape

def render_to_pdf(template_path, context_dict): 
    template = get_template(template_path)
    html  = template.render(context_dict)
    result = StringIO.StringIO()
    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-
1")), dest=result)
    if not pdf.err: 
        return HttpResponse(result.getvalue(), 
content_type='application/pdf')
    return HttpResponse('We had some errors<pre>%s</pre>' % 
escape(html))

调用这个函数

def myview(request):
    return render_to_pdf('HTMLTEST.html', { 'pagesize':'A4',})

创建一个单独的 html 文件

HTMLTEST.html

    <html>
        <body>
            <form name="deleteForm" method="get" action="">
                 User 1 <input type="checkbox" name="user" value="delete" />
            </form>
        </body>
    </html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多