2015-04-03 84 views
0

我的目標是用iText填充交互式PDF xfa表單。一切正常,但不幸的是某些字段有JavaScript操作,我無法通過fillXfaForm()方法填充它們。 我的問題是:如何以編程方式(Java)?它甚至有可能嗎?iText - 填充包含JavaScript操作的XFA表單

我能夠通過啓用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

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

應更改爲

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

this info表示。