2016-11-25 57 views
1

我想在這裏創建一段代碼,它將用空控件打開一個現有的PDF表單(以前用Open Office創建)並使用iTextSharp()設置值。我仍然在測試iTextSharp,看看它是否做了我需要做的事情,到目前爲止答案是否定的。用動態控件修改PDF表格模板

請看看我根據我在網上找到如下進行:

string fileNameExisting = @"PdfTemplate.pdf"; 
string fileNameNew = @"new.pdf"; 

using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open)) 
using (var newFileStream = new FileStream(fileNameNew, FileMode.Create)) 
{ 
    // Open existing PDF 
    var pdfReader = new PdfReader(existingFileStream); 

    // PdfStamper, which will create 
    var stamper = new PdfStamper(pdfReader, newFileStream); 

    var form = stamper.AcroFields; 
    var fieldKeys = form.Fields.Keys; 

    foreach (string fieldKey in fieldKeys) 
    { 
     bool result = form.SetField(fieldKey, "A lot of text here."); 
    } 

    stamper.Close(); 
    pdfReader.Close(); 
} 

1期

iTextSharp的唯一識別來自開放式辦公「控制」元素(文本框例如)。我試圖添加一個表格到PDF模板,但它沒有出現在字段中。這意味着我在使用什麼方面真的很有限。

第2期

當我設置字段中的文本,沒有文字的包木窗,和控件的大小不是動態的,這意味着如果文本太長,這不是」都出現了。我無法使用滾動條作爲PDF打印。

我試圖

對於第一個問題,我創建了一個PDF表格與Word,而不是開放式辦公作家。但是,iTextSharp不能識別Word中的任何控件,我的字段集合是空的。

對於第二個問題,我嘗試修改Open Office中控件的每個屬性,查看互聯網上是否有人有一個解決方案。但根據我的理解,尺寸是固定的,因爲它是AcroFields,所以我無法使控件動態化,並且不能隨後使用iTextSharp更改尺寸。

我希望有人經歷過相同的情況,並能夠用iTextSharp或其他庫免費或不用指導我。雖然我經營自己的公司,但我無法承受2000英鎊的許可證,但我願意提供建議,因爲我需要提供。 最後一個選擇是使用iTextSharp從頭開始創建PDF,但它不像修改那樣快速且簡單,而且這意味着對於PDF的每次更新,公司都需要我更改代碼。我對這個解決方案並不滿意。

回答

0

問題1:

的表不是一個形式字段。請閱讀PDF規範,更具體的ISO-32000-1:

enter image description here

有以PDF一個動態表沒有這樣的事情。這隻有在XFA(這是XML包裝在PDF文件中)的情況下才可能實現,但XFA已被棄用。在iText,我們將於2017年2月發佈一個(封閉源代碼)產品,用於動態文檔。

問題2:

如果該字段被定義爲多行文本字段中的文本換行只。例如,見http://developers.itextpdf.com/question/how-get-row-count-multiline-field

如果設置字體大小爲0的字體大小僅適應於字段的大小:在

動態表單和PDF或者需要XFA:Set AcroField Text Size to Auto

總結如果您需要購買的Adobe的LiveCycle ES(這是你的預算的方式),或者你需要等到iText的工作組發佈了動態形式的項目(但也將超過£2000更貴)。

+0

嗯,我想我將不得不從頭開始創建PDF即可。謝謝你的回答布魯諾。 – nanonymous

+0

是的,有些人使用HTML/CSS和iText的XML Worker的組合來避免編碼PDF。 –

+0

如果我買LiveCycle Designer中的許可證(不太貴)生產我的模板,將我能夠做什麼,我需要與iTextSharp的?我使用的版本5.5.9 – nanonymous