当前位置: 首页 > 知识库问答 >
问题:

iText-填写包含JavaScript操作的XFA表单

沙星波
2023-03-14

我的目标是用iText填写交互式PDF xfa表单。一切正常,但不幸的是,某些字段有JavaScript操作,我无法通过fillXfaForm()方法填充它们。我的问题是:如何以编程方式(在Java中)实现它?有可能吗?

我可以通过启用JS的Adobe Reader导入工具手动完成。

请参阅PDF表格:http://www.finanse.mf.gov.pl/documents/766655/1481810/PIT-40(20)_v1-0E_2014.pdf

我的代码:

public class Pit40DocumentMerger {

    public static final String PDF_FORM         = "resources/pit40.pdf";
    public static final String XML_SOURCE       = "resources/xml_file.xml";
    public static final String PDF_RESULT       = "resources/result.pdf";

    public static void main(String[] args) throws IOException, DocumentException, ParserConfigurationException, SAXException, TransformerFactoryConfigurationError, TransformerException {

        Pit40DocumentMerger pit40 = new Pit40DocumentMerger();
        pit40.fillPdfWithXmlData(PDF_FORM, XML_SOURCE, PDF_RESULT);
    }

    public void fillPdfWithXmlData(String src, String xml, String dest)
            throws IOException, DocumentException {

            PdfReader.unethicalreading = true;
            PdfReader reader = new PdfReader(src);
            PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
            AcroFields form = stamper.getAcroFields();
            XfaForm xfa = form.getXfa();
            xfa.fillXfaForm(new FileInputStream(xml));
            stamper.close();
            reader.close();
        }


}

资源/xml_file.xml:

<?xml version="1.0" encoding="UTF-8"?>
<xfa:data xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
    <Deklaracja xmlns="http://crd.gov.pl/wzor/2014/12/12/1921/" xmlns:etd="http://crd.gov.pl/xml/schematy/dziedzinowe/mf/2011/06/21/eD/DefinicjeTypy/">
        <Naglowek>
            <KodFormularza kodPodatku="PIT" kodSystemowy="PIT-40 (20)" rodzajZobowiazania="Z" wersjaSchemy="1-0E">PIT-40</KodFormularza>
            <WariantFormularza>20</WariantFormularza>
            <CelZlozenia poz="P_6">1</CelZlozenia>
            <Rok>2014</Rok>
            <KodUrzedu>0402</KodUrzedu>
        </Naglowek>
        <Podmiot1 rola="Płatnik">
            <etd:OsobaNiefizyczna>
                <etd:NIP>9999999999</etd:NIP>
                <etd:PelnaNazwa>MyCompanyName</etd:PelnaNazwa>
                <etd:REGON>23123123112312</etd:REGON>
            </etd:OsobaNiefizyczna>
        </Podmiot1>
        <Podmiot2 rola="Podatnik">
            <etd:OsobaFizyczna>
                <etd:PESEL>99121308372</etd:PESEL>
                <etd:ImiePierwsze>NAME</etd:ImiePierwsze>
                <etd:Nazwisko>SURNAME</etd:Nazwisko>
                <etd:DataUrodzenia>2015-03-12</etd:DataUrodzenia>
            </etd:OsobaFizyczna>
            <etd:AdresZamieszkania rodzajAdresu="RAD">
                <etd:AdresPol>
                    <etd:KodKraju>PL</etd:KodKraju>
                    <etd:Wojewodztwo>WOJEWODZTWO</etd:Wojewodztwo>
                    <etd:Powiat>POWIAT</etd:Powiat>
                    <etd:Gmina>GMINA</etd:Gmina>
                    <etd:Ulica>ULICA</etd:Ulica>
                    <etd:NrDomu>3</etd:NrDomu>
                    <etd:NrLokalu>24</etd:NrLokalu>
                    <etd:Miejscowosc>MIEJSCOWOSC</etd:Miejscowosc>
                    <etd:KodPocztowy>55-555</etd:KodPocztowy>
                    <etd:Poczta>POCZTA</etd:Poczta>
                </etd:AdresPol>
            </etd:AdresZamieszkania>
        </Podmiot2>
        <PozycjeSzczegolowe>
            <P_24>3</P_24>
            <P_25>50000.00</P_25>
            <P_27>50000.00</P_27>
            <P_28>2000</P_28>
            <P_31/>
            <P_32/>
            <P_33/>
            <P_34/>
            <P_35/>
            <P_36/>
            <P_37/>
            <P_38/>
            <P_39/>
            <P_40/>
            <P_42/>
            <P_43/>
            <P_44/>
            <P_45/>
            <P_46/>
            <P_49/>
            <P_51/>
            <P_52/>
            <P_53>50000.00</P_53>
            <P_54>0.00</P_54>
            <P_55>50000.00</P_55>
            <P_56>2000</P_56>
            <P_57/>
            <P_60/>
            <P_61/>
            <P_62>50000</P_62>
            <P_63>8443.98</P_63>
            <P_65>8443.98</P_65>
            <P_71>8444</P_71>
            <P_72>6444</P_72>
        </PozycjeSzczegolowe>
        <Pouczenie>Za uchybienie obowiązkom płatnika grozi odpowiedzialność przewidziana w Kodeksie karnym skarbowym.</Pouczenie>
        <Zalaczniki/>
    </Deklaracja>
</xfa:data>

共有1个答案

纪正德
2023-03-14
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));

应更改为

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest), '\0', true);

如此信息所示。

 类似资料:
  • 代码: 这段代码没有异常,一切似乎都很好,但是如果我打开填充的pdf,Adobe Reader会说这样的话: 此文档启用了扩展功能。此文档自创建以来已更改,无法再使用扩展功能。 有些字段填写正确,但我无法编辑。某些字段为空。若我通过单击Adobe Reader中的“导入数据”手动选择xml,则表单填写正确,所以我猜xml中并没有错误。

  • 我有一个基于XFA的pdf表单,我们需要使用java来填充它。你能建议最好的方法吗。我能够使用iText为pdf生成xfa xml。 我有从上面的代码生成的Pdf和Xfa XML。你能不能建议我如何继续下去,因为我似乎没有主意了。我试图检查XFA文档,但似乎不对。我没有xml,pdf非常复杂,因为它有许多字段,是一个动态XFA pdf表单。 您的帮助和建议将受到衷心的感谢。

  • 考虑到字段名称结构可能发生了变化,我尝试像第一次那样阅读format/fields。(代码如下)。但是,现在它告诉我没有要读取的字段()。 所以,我开始做一些搜索,并找到了参考另一种类型的PDF结构,他们可以切换到;XFA.老实说,我还没有找到任何令人满意的文档/示例,但我确实找到了一些代码,看起来应该可以在XFA PDF的结构中阅读。(代码如下)。我尝试了两种不同的方法。第一个基本说明XfaFi

  • 问题内容: 我有以下代码,出现错误“ PHP致命错误:常量表达式包含无效操作”。当我在构造函数中定义变量时,它可以正常工作。我正在使用Laravel框架。 我已经看到了这个问题:PHP错误:致命错误:常量表达式包含无效的操作,但是我的代码未将任何内容声明为静态,因此无法回答我的问题。 问题答案: 如上所述这里 类成员变量称为“属性”。您可能还会看到使用其他术语(例如“属性”或“字段”)来引用它们,

  • 我需要将预填充的PDF/XFA表单设置为只读(因为在没有输入的情况下,例如文本、复选框、单选按钮等可以更改其值)。 对于常规AcroForms PDF和静态XFA表单,我可以通过在PdfStamper实例上调用setFormFlatting(true)来实现这一点。对于动态XFA表单,我必须将XDP的“字段”节点的“访问”属性设置为“只读”。 问题是,如何检测表单是否是动态XFA?不区分静态或动态

  • 我在android和iText上遇到了一些问题,如果有人能帮忙的话。 android应用程序编写多个页面,每个页面包含不同的表。我没有允许一个表跨越一个页面,而是为每个页面添加一个表,并为下一个页面创建一个新表。这样我就可以控制页面总数、页眉和页脚。 我的问题是Android adobe pdf阅读器显示文档很好,正是我正在寻找的。但是,当我在PC上打开一个窗口以访问平板电脑上的 /mnt/sdc