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

时间:2015-04-03 07:34:40

标签: java pdf itext pdf-form xfa

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

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

以下是PDF表格的参考: http://www.finanse.mf.gov.pl/documents/766655/1481810/PIT-40%2820%29_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 个答案:

答案 0 :(得分:1)

该行

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));

应该改为

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

this info表示。