如何插入PdfPTable到现有的PDF模板?(How to insert a PdfPTable

2019-09-22 07:40发布

更新:

经过一番讨论后,我们决定去与TeX的,特别是Windows兼容的MIKTEX 。 我们意识到,即使我们能得到的微观布局(这似乎不可能或不作为计算每一行的行高度繁琐)格式的动态lengthed表,有喜欢大的文本框等动态控制,我们也将需要微操,所以我们决定在运行中生成整个文档。 考虑到这一点,将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模板

iTextSharp的放置在Pdfptable期望的位置

所以我的问题是,什么是使用所见即所得的编辑器静态创建一个PDF并将其修改为动态尺寸的内容添加,如表或任意lengthed文本目前最好的方法是什么? 我不想从头开始生成一个,如果我们可以使用一个所见即所得的LiveCycle得到模板的工作,但如果得到格式化为一个PDF模板表需要更多的努力不是生成整个事情上的苍蝇,那么我宁愿使用iTextSharp的动态生成整个PDF。

Answer 1:

首先这样的:你的代码不会离开你们,如果你不扁平化的形式工作。 在与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(); 

您应该使用的状态值,以找出是否符合表列或不。 只要表没有完全呈现,你应该插入页面,并添加表的部分对这些新的页面。

当然:你的设计会更好,如果你适应你的形式,而不是发明了一些“混合”的方法。



文章来源: How to insert a PdfPTable into an existing PDF template?