经过一番讨论后,我们决定去与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