简体   繁体   English

尝试使用iText为Google AppEngine上的Java应用程序填写PDF表单

[英]Trying to use iText to fill a PDF Form for my java application on Google AppEngine

I am trying to fill a PDF form using iText Api (5). 我正在尝试使用iText Api(5)填写PDF表单。

OutputStream out = resp.getOutputStream();
PdfReader reader = new PdfReader(IOUtils.toByteArray(new FileInputStream(filePath)));
reader.unethicalreading=true;
PdfStamper stamper;

      try
      {
        stamper = new PdfStamper(reader, out);
        AcroFields form = stamper.getAcroFields();

        form.setField("form1[0].#subform[0].Line3_StreetNumberName[0]", employee.getAddress());
        form.setField("form1[0].#subform[0].Line3_CityOrTown[0]", employee.getCity());
        form.setField("form1[0].#subform[0].Line3_State[0]", employee.getState());
        form.setField("form1[0].#subform[0].Line3_ZipCode[0]", employee.getZip());
        stamper.flush();
        stamper.close();
      } catch(DocumentException e) {
        e.printStackTrace();
      }
    reader.close();
    out.flush();
    out.close();

All is successful when I run the application on local Dev Server and I get a perfect PDF displayed on browser with all relevant fields filled with correct values as supplied. 当我在本地Dev Server上运行该应用程序时,一切都成功了,并且在浏览器上显示了一个完美的PDF,所有相关字段均填充了所提供的正确值。

Problem: On the other hand when I deploy the app on app engine and test the same, I get a page full of junk bytes like this 问题:另一方面,当我在应用程序引擎上部署应用程序并进行测试时,我得到的页面充满了这样的垃圾字节

%PDF-1.7 %âãÏÓ 1 0 obj <>>>/BBox[0 0 240 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 144/Filter/FlateDecode>>stream Œh˜k€Ö}ØlÄSÉ„p~0µ]«b,â›sv›«‚2`§S"«ÿpÆ,85¢­`¼€ä›ð—eŒٳh,Þ®Hé­ïþéñþì?îù§KÑ÷"÷+¶qÔk¹‡Ž=)i[q†dEa†¨h™ …¼«OêÓEÇèNÝÿ¡*Þãól†8*O endstream endobj 3 0 obj <>/BBox[0 0 186 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 48/Filter/FlateDecode>>stream ¨P=»û+º÷Õ€Ri¸BóÍo›èÀ‚¿yÒúñAtŠÔAj4Á‚ºu‡Ã}“ endstream endobj 4 0 obj <>/BBox[0 0 132 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 48/Filter/FlateDecode>>stream FÌz¶YŠY]™~zk3R<A›‰â(–¿T’zjv3›ÇÃrÅ]éTü¾…ÝuÁ5 endstream endobj 5 0 obj <>/BBox[0 0 36 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 48/Filter/FlateDecode>>stream i\Ž±Ê3Ny/iæú+1ö¬ó¶vöV(”k6ÜÔN‹wÀ9¡K»]Ñfs!Õ endstream endobj 6 0 obj <>>>/BBox[0 0 72 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 128/Filter/FlateDecode>>stream í5:NÙOúŒî/å÷ÈT?¤âúîè6ŽØq¶º' e„Xƒ?c€¦ƒß߯˜¤@\»FJà•o™˜¨užÞc´y•‰°ý¨X³¶U —Ì[Òƒê;yï:MÃÁsÏm»)zzó‘|QÔ ˜„þƆv5í±È±ya¬ endstream endobj 7 0 obj <>/BBox[0 0 84 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 48/Filter/FlateDecode>>stream +¥Žkô„Wêá¹+FÇA‘¶@7ä :|{éÆ­ì‡8§'0RðZ£kž¼ ç!IÓ endstream endobj 8 0 obj <>/BBox[0 0 240 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 48/Filter/FlateDecode>>stream YÚ‰¸SÎuOÏBì¶ß3§3 ¹ÿ=lN·sØÞhñ=HN•a‰À¦Øœ=ô endstream endobj 9 0 obj <>>>/BBox[0 0 258 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 144/Filter/FlateDecode>>stream h-õÇZ6ꢗ‹vf Áü+€ƒçsŸÜ#ºÿ…U4ðº&Þ̷ؔ•5ZJçØÞ¬Þ-¤ŠÜ• ͳU%‚p å¥ÍÙl°<,6‹Å¯ßÔ´Ïg‡ôªÿY£ú4+à—Ïz Cìa£òr^ƒ§ÈÔEÂBòB8¡ài¨ádÑäÞ1EV^…$7Ïu¾z… endstream endobj 10 0 obj <>>>/BBox[0 0 257.94 36]/FormType 1/Matrix [1 0 0 1 0 0]/Length 176/Filter/FlateDecode>>stream í§¿ TÏLX×ÙäPæPIbÉˉƨûìÅ¿fÑÉoÐmBä»Äÿ×2™*ðl·0Ñ3–9%àññ-ò¡pa98q ߆žóþòe=0q©¸Cê†bq¿`ô艅¶•Va~Îsf„͘– ]J  †ö ÝDÝ¿š:Óœ#]ÇÍæB9–o(•Åyc»¨¢™}ÉܸÐhµ•NìñÁ¿Eï¥)·tvÑÃcæ±rÅ>D endstream endobj 11 0 obj <>/BBox[0 0 240 18]/FormType 1/Matrix [1 0 0 1 0 0]/Length 48/Filter/FlateDecode>>stream $hÚ9CÀ¥Ÿ}`‘yšùÈfÞÊýlÙ u }ü4ßÊü6cïDÕeïŸ^ë¥ endstream endobj 12 0 obj <>stream ¸#6’Œ¸Áh¢«z!ª{*Ï݃Pÿ"®0H;wÙ0ÀæŽöG»ñ#† 8ÿDæˆÌñ^ñyNŠõS2j¨5ã"¶{#›À;‚ŠºLn÷„2BüÛ[¡1×VÈ–ª‹ò=GYL|D*>¬Ní´G<ò·åF\0ï Aé/m~£y„ð)PVØ’B'ø"y%ñ’µ|ÞŸîÇ”Ku„N/<´öõ@L–„ÖpPͪòãxù!d0ñNžì-iŽœvï½Êç5Ø÷¶hÇ*€¸'ÇóÁß0 í…ŒgTœ&w¢„uÔ^RjúCàcF&–¤ùjÊßgZ¤—J6|ˆ\ÈW3}À”-à¸{-ñ›Ñ†9O \™æ$}Í¡?«{ƒy2A]õúƒØ>£68‰¤|êÄ>Cc’e-K/ 9÷ìRëÛÒÄ›¢Ù‘@hc/Ž±AÂ×W^‘Š¸¥*RïkÁä¼å1QEáUÌ~»ß;4€¢æ6µÌ*]á9Ïà-™ Fù ýÒ©ì©›÷¾@µ"¢o1Ä|VnJÎPŒÿ§k‚ãã %ÕbOÊBÇ*î›Ýõóƒøüî  ¹Ë¿PŠB+ÖÁh…Žž%Uüõ3.ñ|Ó}|Š’=A\E…4·våñP}ZêcrsÌZ1eg{š ¹pÌÈ]ìoIaYñš‰.…¥äÂ8í„h(èiJ,SB úqöÁt;4†ËßB@%’æÊ%íg¡–²ã•ÛZ3ã[#Ä‹ñ…0ž¾Óo*9ÏÔÄVJ¹§)¬zeÒÅW·i}“@H¿B†¦L)®Ô²…Ç'ŸÈÄ#°‹£Ÿ‚)VˆÅcR»`ÆK¥º¾àêÇ~£‘õˆ‘v†¥ ÏCä›Iʽ¨_¼E5[bèø8Úä#Ǧöí™ùk@(õV–ðïîiG\„—ÔZgŽ“\U®­Yrï²Ô'[”½¿{a¬æw®!A –Œùå>‰F¦––岬;†åé(sÞ>^ªVCEmó¸À“‡ÊåíÞI(¹¹rR*ÄŸW›‡žDžøêŒxRè¡Šå\žã‡¢¤åJçi‡%‡œÎI@ùIOïV™þÛ;à¥ÌÞUóÂ(õD¶©j‹W››æŠlÜ›D'wˆîágäZ¼TvÑÆÂ2ÕrS;Bз“ÆÌåøDÃÁ}p”ZõJ¦NPyQ{]©û‹ñ›Àãp”0$n9µÆ.Ùžú€LAÀ|ЋÈIDx1ÇÉ& ](œÄ7€Ý§Ëw[—b·Iv    'íL×RmÏ‚‚¤xNu¶þœz³â:Wê´×[›Î—ɘMÆŸ^»ï<ŽaëCz:ölBçï…Ò¬G4¸÷ŽÃëi¥)áèW?UL@X’z59EâhÃd·©Î0ÍuTar÷Èà ¤«Á7º‘6O˜€ƒú$š¦ì²”P¹”54V.%ó"±‹g®[C éŠþ=WU€£0]ó|—/«òŽUŽ©Ët®ñMªì1ßG‹çߦÔe«º#HëÂw¯uœò    9   Ò¿9°~³£¦°‚ÅJ¨äw’ÿ³žÌåeëªÚd²÷üJ÷"î忼L»«¹Íüç_ÆmmF‹¬fZ­íâ!hã â¼½ñÁH³Nq^ΗÍoúgÈQ¯Ú01“&¼ƒ   ¢ïX†n·pùdPslPãk¯ý«ÇwÂðd;o¯%«¿˜5_Å´æ’¹Iå•}­‚z ò/n!eT)[«r¡o“…qŠî$9KcùšÍs‘§{3ü0SÛ$‘^µ¹€Ìàâ¬&Pi,(<$Æ£š³CK‚[„’ªOqÛÎ߇®jëL! `k•BL•'ÇýÅp\@“¶vü¸­JÈ£¬t7UgSkºÉYÞ¥ÙLÚÅ*G;¦„ãõŒ<žò«å½Ï‘O…ÜÌleñKÈ×XŒÞÍ÷éÒN;8œb(€Ì×­ëÿ–,^źµÖlx± %ÞS¨ÃÚw€ºòÜ'˜Z-NËåÔSžSW NJñ^Dö^£³U,—y¹cõ ¡UpÓîÚ"ø©™ÜƒÉ? ƒ Z ‡ÆŒ”Ö(fqﵫ%|[rüÌc¿/ßûWˆ¦,!©qSí²^éLñè²vVûB"½±ßp?âÝâáP2¡¾zŒ¦ž¸™[ÌWÌ6öI x¾ÕöÆڇĥ½á5e¿d…¼Ì¶˜·×ü‰;iß™¥;Z«rš&ß1+p‹C1ÔR±ƒå¬rIÃ}³LsÅùÉ{ù›†ˆ

Please help me find my mistake here. 请帮助我在这里找到我的错误。

Thanks so much.. 非常感谢..

I could solve this problem by adding this code to the servlet and thing has started to work on GAE as well. 我可以通过将此代码添加到servlet中来解决此问题,并且在GAE上也开始起作用。

resp.addHeader("Content-disposition", "attachment; filename=" + "xxx.pdf");

or 要么

resp.setContentType("application/pdf");

The first code shall download the PDF file and the second code shall open the PDF in the browser. 第一个代码应下载PDF文件,第二个代码应在浏览器中打开PDF。

I am not sure why it was working correctly on local dev environment without adding these headers and was failing on app engine? 我不确定为什么在不添加这些标头的情况下在本地开发环境下可以正常工作,并且在应用引擎上失败了吗?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM