2016-09-26 117 views
1

我需要生成模板文檔的自定義PDF副本。 最簡單的方法 - 我認爲 - 是創建一個源文件,其中包含一些需要進行自定義的佔位符文本,即<first_name><last_name>,然後用正確的值替換這些文本。使用Python搜索並替換PDF中的佔位符文本

我搜索了高和低,但真的沒有辦法基本上採取源模板PDF,用實際值替換佔位符,並寫入一個新的PDF?

我看了一下PyPDF2和ReportLab,但似乎都無法做到這一點。 有什麼建議嗎?我的大多數搜索都會導致使用Perl應用程序CAM :: PDF,但我更願意將它們全部保存在Python中。

+0

PDF可以採取多種形式,並使用壓縮,所以不那麼容易。如果你想使用其他豐富的格式,你可以使用'.docx'或'.rtf'。 docx是壓縮xml =>文本,.rtf是帶有標記的文本。 html也是模板的不錯選擇。 –

+0

我仍然建議看看reportlab。只要你已經想出了你想要生成的pdf文件的源代碼,使這種靈活性非常簡單。看看這裏的examplese:http://www.blog.pythonlibrary.org/2010/03/08/a-simple-step-by-step-reportlab-tutorial/ – tfv

+0

您可以使用ReportLab RML生成您的模板(只是一個文本文件),然後動態添加您的內容。看看這裏的「與流動同行」部分http://www.blog.pythonlibrary.org/2010/03/08/a-simple-step-by-step-reportlab-tutorial/ – lsxliron

回答

3

沒有直接的方法可以做到這一點,可以可靠地工作。 PDF不像HTML:它們逐個字符地指定文本的位置。他們甚至可能不包括用於呈現文本的整個字體,只包括在文檔中呈現特定文本所需的字符。沒有我找到的庫會做更好的事情,如更新文本後重新換行段落。 PDF大部分是純顯示格式,所以使用將標記轉換爲PDF的工具比在原地更新PDF要好得多。

如果這不是一個選項,你可以在類似的Acrobat創建PDF form,然後使用PDF操作庫像iText (AGPL)pdfbox,其中有一個名爲pdfboxing一個很好的Clojure包裝,可以處理一些這一點。

根據我的經驗,Python對寫入PDF的支持是相當有限的。 Java迄今爲止是最好的語言支持。此外,你得到了你所支付的,所以如果你將它用於商業用途,它可能值得爲iText許可證付費。我已經用PDF-manipulation CLI工具(如pdfboxing和ghostscript)編寫了python包裝的相當不錯的結果。這可能是很多更容易爲您的使用情況,而不是試圖將其放入Python的PDF生態系統。