2012-09-11 56 views
3

更新:如何将PdfPTable插入到现有PDF模板中?

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

回答

0

首先这个问题:如果你没有把表单弄平,你的代码就不会工作。在使用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(); 

您应该使用状态值来确定该表是否适合该列。只要表格未完全呈现,您应该插入页面,并将表格的一部分添加到这些新页面。

当然:如果您改编自己的表格,而不是发明一些“混合”方法,那么您的设计会更好。

+0

首先这个:我弄平了表格。在LiveCycle中,可以选择创建一个静态PDF或一个XFA,我选择前者,你正在谈论后者。其次:我可以轻松地在一个页面上打印并将其与生成的表格合并,这不是问题所在。有很多信息存在,这就是你所指的。 GetOverContent对我无法正常工作,如果您不明白这一点,请再次阅读我的问题。为什么我不插入第二页?请向我展示如何使用跨页数超过2页的现有PDF进行此操作。 – Joe

+0

当然,如果我“改编”了我的表格,我的设计会更好吗?所以,请先生,在你最开明的状态下,教导我们昏昏欲睡的人如何做到这一点。 – Joe

+0

因为一个人,你没有看清问题,你没有回答这个问题,那么你提供了所有的绒毛,没有解决方案,并且为了解决问题,你的态度需要修复。 – Joe

相关问题