經過一番討論後,我們決定去與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。
首先這個:我弄平了表格。在LiveCycle中,可以選擇創建一個靜態PDF或一個XFA,我選擇前者,你正在談論後者。其次:我可以輕鬆地在一個頁面上打印並將其與生成的表格合併,這不是問題所在。有很多信息存在,這就是你所指的。 GetOverContent對我無法正常工作,如果您不明白這一點,請再次閱讀我的問題。爲什麼我不插入第二頁?請向我展示如何使用跨頁數超過2頁的現有PDF進行此操作。 – Joe
當然,如果我「改編」了我的表格,我的設計會更好嗎?所以,請先生,在你最開明的狀態下,教導我們昏昏欲睡的人如何做到這一點。 – Joe
因爲一個人,你沒有看清問題,你沒有回答這個問題,那麼你提供了所有的絨毛,沒有解決方案,並且爲了解決問題,你的態度需要修復。 – Joe