2012-09-11 58 views
3

更新:如何將PdfPTable插入到現有PDF模板中?

經過一番討論後,我們決定去與TeX的,特別是兼容MiKTeX的窗口。我們意識到,即使我們可以通過對佈局進行微操作來獲得動態的長表格(這似乎不可行,或者像計算每行的行高一樣繁瑣),但還有其他動態控件,比如大型文本框,我們也會需要微觀管理,因此我們決定即時生成整個文檔。考慮到這一點,去TeX是明智的選擇,因爲它的強大功能和我們以前的經驗,現在一週後,我很高興我們這樣做了,因爲我們所有的報告都是動態生成的,並且背後的代碼是乾淨的,最小的。

原文:

我有使用的LiveCycle生成PDF表單模板,我想填補它(pdfstamper),並添加一些表(pdfptable),但它被證明是比我更困難最初認爲。

我打開一個PDF格式,並使用pdfstamper編輯靜態字段:

using (var outputPDF1 = new MemoryStream()) 
{ 
    var pdfReader = new PdfReader(pdf); 
    var pdfStamper = new PdfStamper(pdfReader, outputPDF1); 
    var pdfFields = pdfStamper.AcroFields; 

    pdfFields.SetField("Field1", "Value1"); 

這是直接的,明確的。

然後我嘗試添加一個表格,它將從一個設置的位置移動到多個頁面上。有一個這樣的here,這是一個3年前的舊版本的itextsharp,它非常手動。

該代碼的關鍵是使用GetOverContent插入ColumnText與所生成的表但是這需要知道工作臺高度和手動切割表格大小

var cb = pdfStamper.GetOverContent(1); 
    var ct = new ColumnText(cb); 
    ct.Alignment = Element.ALIGN_CENTER; 
    ct.SetSimpleColumn(36, 36, PageSize.A4.Width-36, PageSize.A4.Height-300); 
    ct.AddElement(table); 
    ct.Go(); 

還有一種答案 Itextsharp: Adjust 2 elements on exactly one page ,其僅限於單頁表格。它可以是可擴展的,但好像你不得不在後面的頁面上計算頁眉/頁腳。

以及各種在大致相同的方向沒有答案的問題:

adding a dynamic Table to an pdf template

itextsharp place Pdfptable at desired position

所以我的問題是,什麼是使用所見即所得的編輯器靜態創建一個PDF和修改當前的最佳途徑它添加動態大小的內容,如表格或任意長文本?如果我們可以使用WYSIWYG LiveCycle來獲取模板,我不想從頭開始創建一個,但是如果獲得一個用於pdf模板的表格需要花費更多的精力而不是動態生成整個事件,那麼我寧願使用itextsharp即時生成整個pdf。

回答

0

首先這個問題:如果你沒有把表單弄平,你的代碼就不會工作。在使用LiveCycle Designer創建的文檔中,PDF充當XML的容器。 PdfPTable可用於創建PDF語法,這與XML非常不同。其次:在您的代碼示例中,您將在第一頁的現有內容上添加一個表。這是你的意圖嗎?爲什麼不用表格創建單獨的文檔,然後將從頭開始創建的文檔與填充和拼合的表單合併? 您是否假設現有內容將會重新流動?在這種情況下,你不瞭解PDF,請多做一些閱讀。

假設你正在使用此代碼:

var cb = pdfStamper.GetOverContent(1); 
var ct = new ColumnText(cb); 
ct.Alignment = Element.ALIGN_CENTER; 
ct.SetSimpleColumn(36, 36, PageSize.A4.Width-36, PageSize.A4.Height-300); 
ct.AddElement(table); 
ct.Go(); 

如果這個工作對你罰款,除非該表不適合在一個頁面,你爲什麼不插入第二頁?您指的是有一條線的示例:

int status = ct.go(); 

您應該使用狀態值來確定該表是否適合該列。只要表格未完全呈現,您應該插入頁面,並將表格的一部分添加到這些新頁面。

當然:如果您改編自己的表格,而不是發明一些「混合」方法,那麼您的設計會更好。

+0

首先這個:我弄平了表格。在LiveCycle中,可以選擇創建一個靜態PDF或一個XFA,我選擇前者,你正在談論後者。其次:我可以輕鬆地在一個頁面上打印並將其與生成的表格合併,這不是問題所在。有很多信息存在,這就是你所指的。 GetOverContent對我無法正常工作,如果您不明白這一點,請再次閱讀我的問題。爲什麼我不插入第二頁?請向我展示如何使用跨頁數超過2頁的現有PDF進行此操作。 – Joe

+0

當然,如果我「改編」了我的表格,我的設計會更好嗎?所以,請先生,在你最開明的狀態下,教導我們昏昏欲睡的人如何做到這一點。 – Joe

+0

因爲一個人,你沒有看清問題,你沒有回答這個問題,那麼你提供了所有的絨毛,沒有解決方案,並且爲了解決問題,你的態度需要修復。 – Joe

相關問題