Java 使用pdfstamper修改现有文档

Java 使用pdfstamper修改现有文档,java,itext,pdfstamper,Java,Itext,Pdfstamper,我有一个pdf,它是半静态半动态的,可以增长多个页面。我在AdobeLiveCycle中创建了静态部分,并使用itext创建了动态部分。表单的动态部分是一个表,它必须根据跨多个页面的输入进行扩展。表单在这两部分中都有字段 我已经使用columntext和pdfstamper将内容添加到现有的pdf中,表会动态增长,这很好。问题是 在每个表单元格中,需要添加一个acrofield。我使用pdfcell事件创建它,但在谷歌搜索之后,我只能使用pdfwriter找到代码,而不能使用pdf stampe

我有一个pdf,它是半静态半动态的,可以增长多个页面。我在AdobeLiveCycle中创建了静态部分,并使用itext创建了动态部分。表单的动态部分是一个表,它必须根据跨多个页面的输入进行扩展。表单在这两部分中都有字段

我已经使用columntext和pdfstamper将内容添加到现有的pdf中,表会动态增长,这很好。问题是

  • 在每个表单元格中,需要添加一个acrofield。我使用pdfcell事件创建它,但在谷歌搜索之后,我只能使用pdfwriter找到代码,而不能使用pdf stamper

  • 在第一页,如何限制表内容,使其不会一直到页面末尾,并且我可以在底部插入页码

  • 我需要在表的末尾添加一个签名字段。如何知道动态表末端的坐标

  • 动态表部件的我的代码段:

    ColumnText column = new ColumnText(stamper.getOverContent(1));
    Rectangle rectPage1 = new Rectangle(792, 270);
    column.setSimpleColumn(rectPage1);
    column.addElement(table);
    int pagecount = 1;
    Rectangle rectPage2 = new Rectangle(792, 540);
    int status = column.go();
    while (ColumnText.hasMoreText(status) ) {
    status = triggerNewPage(stamper, pagesize, column, rectPage2,   ++pagecount);
    }
    
    public int triggerNewPage(PdfStamper stamper, Rectangle pagesize, ColumnText column, Rectangle rect, int pagecount) throws DocumentException {
    stamper.insertPage(pagecount, pagesize);
    PdfContentByte canvas = stamper.getOverContent(pagecount);
    column.setCanvas(canvas);
    column.setSimpleColumn(rect);
    return column.go();
    }
    

    表格是否从单独的一页开始?在这种情况下,您可能想考虑使用<代码> > PdfWriter <代码>技术创建新文档中的表,然后使用<代码> PDFIXP> <代码>将静态部分与该表部分结合。问题是混淆的,因为您似乎需要动态表(这使我假设您需要XFA表单)。您使用的是AdobeLiveCycle(这让我假设您正在创建XFA表单),但是您说您正在创建静态部分(这让我假设您没有创建XFA表单),然后您谈到AcroForm字段(这不是动态的)。事实上,你把这些东西混在一起就不可能回答你的问题。表格从同一页开始@BrunoLowagie我不想使用XFA表单。我之所以使用LiveCycle,是因为我是一名LiveCycle开发人员,不熟悉itext:)。我将静态部分称为I,即位置恒定且不动态扩展的部分。静态部分和我使用itext插入的表中都有Acro字段。我希望我明白了。此外,您提到的Acrofields不是动态的,这是否意味着如果我使用itext插入Acrofields,它们就不能根据单元格的大小进行扩展?AcroForm字段不是动态的,因为它们是使用小部件注释定义的。小部件注释的注释字典包含一个定义矩形精确坐标的
    /Rect
    条目。该矩形是固定的,不能根据要添加的内容展开。阅读ISO-32000-1(又名PDF规范)了解更多信息。谢谢。有道理。我将只将文本添加到pdf单元格,而不创建Acrofield。现在是我问题的第二和第三部分。我想在每一页的底部插入带有页码的页边距,但我不确定如何控制动态表。另外,需要知道表结束的坐标,以便创建签名字段。我正在编辑问题以添加代码段表是否从单独的页面开始?在这种情况下,您可能想考虑使用<代码> > PdfWriter <代码>技术创建新文档中的表,然后使用<代码> PDFIXP> <代码>将静态部分与该表部分结合。问题是混淆的,因为您似乎需要动态表(这使我假设您需要XFA表单)。您使用的是AdobeLiveCycle(这让我假设您正在创建XFA表单),但是您说您正在创建静态部分(这让我假设您没有创建XFA表单),然后您谈到AcroForm字段(这不是动态的)。事实上,你把这些东西混在一起就不可能回答你的问题。表格从同一页开始@BrunoLowagie我不想使用XFA表单。我之所以使用LiveCycle,是因为我是一名LiveCycle开发人员,不熟悉itext:)。我将静态部分称为I,即位置恒定且不动态扩展的部分。静态部分和我使用itext插入的表中都有Acro字段。我希望我明白了。此外,您提到的Acrofields不是动态的,这是否意味着如果我使用itext插入Acrofields,它们就不能根据单元格的大小进行扩展?AcroForm字段不是动态的,因为它们是使用小部件注释定义的。小部件注释的注释字典包含一个定义矩形精确坐标的
    /Rect
    条目。该矩形是固定的,不能根据要添加的内容展开。阅读ISO-32000-1(又名PDF规范)了解更多信息。谢谢。有道理。我将只将文本添加到pdf单元格,而不创建Acrofield。现在是我问题的第二和第三部分。我想在每一页的底部插入带有页码的页边距,但我不确定如何控制动态表。另外,需要知道表结束的坐标,以便创建签名字段。我正在编辑问题以添加我的代码段