2013-10-10 45 views
0

我想創建一個PDF複選框,可以檢查(使用Python)。我一直在嘗試使用比薩來生成pdf,並瀏覽了互聯網並嘗試了不同的示例,但我無法找到如何製作可編輯的PDF。試圖創建一個可編輯的PDF與Python

這是我最近一次嘗試:

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) 

的形式給我一個錯誤:

 
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' 

的複選框讀者來決定,如果用戶需要刪除或沒有。

我想知道是否有辦法用Python創建可編輯的PDF文檔。作爲一個例子,這只是我迄今爲止的嘗試之一。

+0

對於現在,我只想做一個PDF只有一個用戶和一個複選框 – user

+0

它正試圖在您沒有寫入權限的位置創建PDF ...多數民衆贊成我的猜測從您的錯誤消息 –

+0

我有權寫信給它。但我想弄清楚的是,如果有一種方法可以在Python中創建可編輯的PDF。 – user

回答

1

可能的原因。您沒有對該目錄的寫入權限。該文件已存在,但您沒有對其的寫入權限。

+0

無關我確實有寫權限,我嘗試了上面的代碼,但它裏面有一些不同的HTML。我的目標是找到一種使用Python製作可編輯PDF的方法。我認爲這種方式會起作用,我一直在嘗試一堆不同的東西,但他們都沒有工作。我也試過reportlab – user

+0

你沒有寫權限......是否因爲它試圖在不同的目錄中打開它而不是你認爲的,或者PDF是在一個應用程序中打開的,該程序不允許修改文件打開。這與你正在編寫的內容無關 –

+0

我剛剛複製並粘貼了你的代碼,它創建了pdf罰款......這說...它沒有添加複選框 –

0
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>