首页 文章

如何将PdfPTable插入现有的PDF模板?

提问于
浏览
3

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 回答

  • 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();
    

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

    当然:如果你改编自己的形式,你的设计会好得多,而不是发明一些“混合”的方法 .

相关问题