Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试使用Python创建可编辑的pdf_Python_Pdf_Pdf Generation_Pisa - Fatal编程技术网

尝试使用Python创建可编辑的pdf

尝试使用Python创建可编辑的pdf,python,pdf,pdf-generation,pisa,Python,Pdf,Pdf Generation,Pisa,我正在尝试创建一个带有复选框的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)

我正在尝试创建一个带有复选框的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)
导入cStringIO
将ho.pisa作为pisa导入
导入操作系统
#在屏幕上转储所有日志的快捷方式
pisa.showLogging()
def HTML2PDF(数据,文件名,打开=False):
"""
显示如何从中创建PDF文件的简单测试
PML源字符串。还显示错误并尝试启动
生成的PDF
"""
pdf=pisa.CreatePDF(cStringIO.StringIO(数据),文件名为“wb”))
如果打开且未打开(pdf.err):
os.startfile(str(文件名))
返回非pdf.err
如果名称=“\uuuuu main\uuuuuuuu”:
HTMLTEST=“”
用户1
"""
HTML2PDF(HTMLTEST,“test.pdf”,open=True)
表单给了我一个错误:

Traceback (most recent call last): File "C:/Users/horeth/PycharmProjects/Reportlab/HTMLtoPF/Main.py", line 32, in HTML2PDF(HTMLTEST, "test.pdf", open=True) File "C:/Users/horeth/PycharmProjects/Reportlab/HTMLtoPF/Main.py", line 14, in HTML2PDF pdf = pisa.CreatePDF(cStringIO.StringIO(data), file(filename, "wb")) IOError: [Errno 13] Permission denied: 'test.pdf' 回溯(最近一次呼叫最后一次): 文件“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文档。举例来说,这只是我迄今为止所做的尝试之一。

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

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))
创建一个单独的html文件 HTMLTEST.html


用户1

现在,我只想用一个用户和一个复选框创建一个PDF。它正在尝试在您没有写入权限的位置创建PDF。。。这是我从你的错误信息中猜到的我确实有权写信给它。但我想弄清楚的是,是否有一种方法可以在Python中创建可编辑的PDF。。。可能pdf是在一个锁定更改的程序中打开的(我认为acrobat不允许更改它打开的文件)。它与pdf内容无关。我确实有写权限,我尝试了上面的代码,但里面有稍微不同的HTML。我的目标是找到一种使用Python制作可编辑PDF的方法。我认为这种方法会奏效,我已经尝试了很多不同的方法,但没有一种有效。我也试过reportlab你没有权限写。。。无论是因为它试图在与您想象的不同的目录中打开它,还是因为pdf是在一个应用程序中打开的,该应用程序在打开文件时不允许更改文件。这与您正在编写的内容无关,我只是复制并粘贴了您的代码,它创建了pdf格式。。。也就是说。。。它没有添加复选框
def myview(request):
    return render_to_pdf('HTMLTEST.html', { 'pagesize':'A4',})
    <html>
        <body>
            <form name="deleteForm" method="get" action="">
                 User 1 <input type="checkbox" name="user" value="delete" />
            </form>
        </body>
    </html>