Update:
经过一番讨论,我们决定选择TeX,特别是windows兼容MiKTeX . 我们意识到,即使我们可以通过微观管理布局来获得动态扩展表格(这不会影响我们以前的经验,而且现在经过一周后,我很高兴我们这样做,因为我们所有的报告都是动态生成的并且背后的代码干净而且极简 .
Original:
我有一个使用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");
这是直截了当的 .
然后我尝试添加一个表,该表将从几个页面的设置位置开始 . 这个_1798933的尝试是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
所以我的问题是,目前使用WYSIWYG编辑器静态创建pdf的最佳方法是什么,并修改它以添加动态大小的内容,如表格或任意加长的文本?如果我们可以使用WYSIWYG LiveCycle来使模板正常工作,我不想从头开始生成一个,但是如果获得一个格式化为pdf模板的表需要花费更多精力而不是生成整个事物,那么我宁愿使用itextsharp动态生成整个pdf .
1 回答
首先,如果你没有压扁表单,你的代码就不会起作用了 . 在使用LiveCycle Designer创建的文档中,PDF充当XML的容器 . PdfPTable可用于创建PDF语法,这与XML非常不同 .
其次:在您的代码示例中,您将在第一页的现有内容上添加一个表 . 这是你的意图吗?为什么不用表创建单独的文档,然后将从头创建的文档与填充和展平的表单合并?您是否假设现有内容将重排?在这种情况下,你不懂PDF,请多读一些 .
假设您正在使用此代码:
如果这对您有效,除非表格不适合一页,为什么不插入第二页?你指的是有一条线的例子:
您应该使用status的值来确定表是否适合列 . 只要表没有完全呈现,您应该插入页面,并将表的一部分添加到这些新页面 .
当然:如果你改编自己的形式,你的设计会好得多,而不是发明一些“混合”的方法 .