我的目标是用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>
答案 0 :(得分:1)
该行
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
应该改为
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest), '\0', true);
,this info表示。