更新:
经过一番讨论,我们决定使用 TeX,特别是与 windows 兼容的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");
这是直截了当和清楚的。
然后我尝试添加一个表格,该表格将从多个页面的设定位置开始。这里有一个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:在一个页面上调整 2 个元素, 仅限于单个页表。它可以是可扩展的,但您似乎还必须在后续页面上计算页眉/页脚。
以及同一个大方向上的各种悬而未决的问题:
所以我的问题是,目前使用所见即所得编辑器静态创建 pdf 并对其进行修改以添加动态大小的内容(例如表格或任意长度的文本)的最佳方法是什么?如果我们可以使用 WYSIWYG LiveCycle 来使模板正常工作,我不想从头开始生成一个,但是如果为 pdf 模板格式化表格比动态生成整个表格需要更多的努力,那么我宁愿使用 itextsharp 即时生成整个 pdf。