2015-05-15 11 views
6

मैं पीडीएफ से फॉर्म फ़ील्ड निकालने के लिए pdftk लाइब्रेरी का उपयोग कर रहा हूं। प्रत्येक समस्या सिर्फ एक समस्या को छोड़कर ठीक चल रही है जिसे मुझे पीडीएफ फ़ाइल pdf file link मिली है। जिसकी वजह से त्रुटि इस के लिए bellowपीडीएफटीके त्रुटि: पीडीएफ फ़ाइल खोलने में असफ़ल:

Error: Failed to open PDF file: 
    http://www.uscis.gov/sites/default/files/files/form/i-9.pdf 
Done. Input errors, so no output created. 

आदेश दिया जाता है

[email protected]:/home/ri-8# pdftk http://192.168.1.43/form/i-9.pdf dump_data_fields 

समान आदेश अन्य सभी रूपों के लिए काम कर रहा है।

Attempt1

मैं असुरक्षित संस्करण के लिए पीडीएफ एन्क्रिप्ट करने के लिए कोशिश की है, लेकिन यह एक ही त्रुटि पैदा करते हैं। यहाँ आदेश है

pdftk http://192.168.1.43/forms/i-9.pdf input_pw foopass output /var/www/forms/un-i-9.pdf 

अद्यतन

इस इस

public function Formanalysis($pdfname) 
    { 
     $pdffile=Yii::app()->getBaseUrl(true).'/uploads/forms/'.$pdfname; 
     exec("pdftk ".$pdffile." dump_data_fields 2>&1", $output,$retval); 
     //got an error for some pdf if these are secure 
     if(strpos($output[0],'Error') !== false) 
     { 
      $unsafepdf=Yii::getPathOfAlias('webroot').'/uploads/forms/un-'.$pdfname; 
      //echo "pdftk ".$pdffile." input_pw foopass output ".$unsafepdf; 
      exec("pdftk ".$pdffile." input_pw foopass output ".$unsafepdf); 
      exec("pdftk ".$unsafepdf." dump_data_fields 2>&1", $outputunsafe,$retval); 
      return $outputunsafe ; 
      //$response=array('0'=>'error','error'=>$output[0]); 
      //return $response; 

     } 

     //if (strpos($output[0],'Error') !== false){ echo "error to run" ; } // this is the option to handle error 
     return $output; 

    } 
+0

आप पीडीएफटीके का उपयोग कर सकते हैं, केवल इन विवरणों पर ध्यान दें: 1 = डाउनलोड करें और पीडीएफएलएब्स.com/docs/pdftk-version- इतिहास से नवीनतम निर्माण या संकलन का उपयोग करें; 2 = इस पीडीएफ पर प्रतिबंध (मालिक पासवर्ड) लागू है; आपको pdftk का उपयोग करने से पहले प्रतिबंधों को हटाने की आवश्यकता है। आप इसे qpdf qpdf.sourceforge.net qpdf --decrypt * .pdf output.pdf के साथ कर सकते हैं, तो आप पीडीएफटीके का उपयोग बिना दर्द के – Dingo

+0

के बिना कर सकते हैं, केवल बहुत पुराने बिल्ड (पीडीएफटीके 1.41) के पास पीडीएफ संस्करण> 1.4/1.5, नए संस्करणों का पूरी तरह से समर्थन करते हैं और – Dingo

उत्तर

6

यह एक छोटा सा चाल समाधान हो सकता है लेकिन आपके लिए काम करना चाहिए। जैसा कि @bruno ने कहा कि यह एन्क्रिप्टेड फ़ाइल है। pdftk के लिए उपयोग करने से पहले आपको इसे डिक्रिप्ट करना चाहिए। इसके लिए मुझे qpdf पीडीएफ को डिक्रिप्ट करने, मालिक और उपयोगकर्ता पासवर्ड आदि को हटाने के लिए एक मुक्त ओपेम स्रोत लाइब्रेरी को डिक्रिप्ट करने का एक तरीका मिला। आप इसे यहां Qpdf पा सकते हैं। इसे अपने सिस्टम पर स्थापित करें। और यह आदेश

qpdf --decrypt input.pdf output.pdf 

तब pdftk कमांड में आउटपुट फ़ाइल का उपयोग करें। यह काम करना चाहिए ।

+0

ब्रूनो कहां दस्तावेज़ को एन्क्रिप्ट किया गया था? –

+0

धन्यवाद यह काम करता है ... लेकिन एक प्रश्न। क्या यह पीडीएफ को प्रभावित करेगा ?? – MKD

7

pdftk को संभालने के लिए अपना पूरा समारोह है एक उपकरण है कि एक निष्पादन GNU संकलन का उपयोग करने के an obsolete version of iText संकलन के द्वारा बनाया गया था जावा (जीसीजे) के लिए (पीडीएफटीके iText समूह एनवी द्वारा अनुमोदित नहीं है)।

मैंने आपके पीडीएफ की जांच की है और यह दो तकनीकों का उपयोग करता है जो पीडीएफटीके के समय आईटीक्स्ट द्वारा समर्थित नहीं थे: एक्सएफए और संपीड़ित क्रॉस-रेफरेंस टेबल।

उत्तरार्द्ध आपकी समस्या का कारण बनता है। Pdftk अपनी फ़ाइल इस तरह खत्म हो जाने की उम्मीद:

xref 
0 7 
0000000000 65535 f 
0000000258 00000 n 
0000000015 00000 n 
0000000346 00000 n 
0000000146 00000 n 
0000000397 00000 n 
0000000442 00000 n 
trailer 
<</ID [<c8bf0ac531b0fc7b5b9ec5daf0296834><ec4dde54d00305ebbec62f3f6bbca974>]/Root 5 0 R/Size 7/Info 6 0 R>> 
%iText-5.4.3 
startxref 
595 
%%EOF 

इस स्निपेट startxref में बाइट xref की भरपाई जो है, जहां परस्पर-संदर्भ तालिका शुरू होता है चिह्नित करता है। इस तालिका में पीडीएफ में सभी वस्तुओं के बाइट-ऑफसेट शामिल हैं।

आप पीडीएफ आप का उल्लेख को देखते हैं, आप देखते हैं कि यह इस तरह समाप्त होता है:

64 0 obj 
<</DecodeParms<</Columns 5/Predictor 12>>/Encrypt 972 0 R/Filter/FlateDecode/ID[<85C47EA3EFE49E4CB0F087350055FDDC><C3F1748360D0464FBA02D711DE864630>]/Info 970 0 R/Length 283/Root 973 0 R/Size 971/Type/XRef/W[1 3 1]>>stream 
hÞìÒ±JQЙ·»7J¢©ÕØ(Xþ„ù »h%¤É¤¶”€mZ+;ÁN,,ÁÆ6 XÁ&‚("î½YŒI‘Bî‡áμ]ö1Áð÷³cfþ‹ûÐÚLî`z„Ýôœùw÷N×X?ÙkNv`hÁÒj¦G[œiÀå»›œ?b½Än…ÉëàÍþ gY—i7WW‡òj®îÍ°u¸Ò‡Ñ:óÆÛ™ñÎë&'×݈§ü†ù!ÿñ€ù%,\ácçÙ9˜ì±Þ€S¼Ãd—‰Áy~×.ø¶Åìþßn_˜$9Ôüw£X9#åxzçgRüüóÙwÝ¡œÄNJ©½’Ú+©½’R{%µWR{%ÿ·á”;`_ z6Ø 
endstream 
endobj 
startxref 
116 
%%EOF 

इस मामले में, startxref अभी भी को संदर्भित करता है जहां पहले परस्पर-संदर्भ तालिका शुरू होता है (यह एक linearized पीडीएफ है), लेकिन क्रॉस संदर्भ तालिका किसी ऑब्जेक्ट के अंदर संग्रहीत होती है, और उस ऑब्जेक्ट को संपीड़ित किया जाता है (stream और endstream कीवर्ड के बीच गड़बड़ी देखें)।

संपीड़ित क्रॉस-रेफरेंस टेबल और संकुचित वस्तुओं को पीडीएफ 1.5 (2003) में पेश किया गया था, लेकिन वे पीडीएफटीके द्वारा समर्थित नहीं हैं। आपको एक ऐसा टूल ढूंढना होगा जो ऐसी धाराओं से निपट सके (उदाहरण के लिए आईटीएक्स्ट का एक हालिया संस्करण, जो पीडीएफटीके की तुलना में वास्तविक सामान है), या पीडीएफटीके के साथ इलाज करने से पहले आपको पीडीएफ 1.4 के रूप में अपने पीडीएफ को सहेजना होगा (लेकिन आप एक्सएफए खो देंगे, क्योंकि पीएफए ​​1.5 में एक्सएफए भी पेश किया गया था)।

अद्यतन:

जब से तुम प्रपत्र फ़ील्ड्स के बारे में पूछ रहे हैं, मैं निम्नलिखित लगाव जोड़ रहा:

enter image description here

यह स्क्रीनशॉट लिया गया था iText RUPS का उपयोग कर (जो साबित करता है कि iText खोल सकते हैं दस्तावेज़)। सही करने के लिए, आप देखते हैं कि एक ही रूप में दो बार परिभाषित किया गया है:

enter image description here

आप Fields के तहत पेड़ नीचे चलना चाहते हैं, तो आपको लगता है कि पीडीएफ AcroForm प्रौद्योगिकी का उपयोग कर में जमा हो जाती सभी क्षेत्रों पाते हैं।

enter image description here

आप XFA के तहत देखो, तो आप कि एक ही रूप भी एक्सएमएल फार्म वास्तुकला का उपयोग कर परिभाषित किया गया है नोटिस: बाईं ओर, आप इस तरह के एक फ़ील्ड के वर्णन देख सकते हैं।

enter image description here

ये सभी जानकारियां प्रोग्राम के रूप में iText (जावा) या iTextSharp (सी #) का उपयोग कर पहुँचा जा सकता है: क्या आप datasets पर क्लिक करते हैं, तो आप कम पैनल में डेटासेट के एक्सएमएल विवरण देखें। पीडीएफटीके केवल इस तकनीक के पुराने संस्करण के आधार पर एक उपकरण है।

+0

से आगे आप – MKD

+0

के लिए लाइब्रेरी का संदर्भ ले सकते हैं, मैंने उल्लेख किया है [iText] (http://itextpdf.com) जो जावा और सी # में उपलब्ध है। जैसा कि मैंने समझाया है: जब आप पीडीएफटीके का उपयोग कर रहे हैं तो आप iText के एक अप्रचलित संस्करण का उपयोग कर रहे हैं। संपीड़ित क्रॉस-रेफरेंस टेबल के साथ iText समर्थन फ़ाइलों के हाल के संस्करण। मैं अपने जवाब में एक [iText RUPS] (http://itextpdf.com/product/itext_rups) स्क्रीन शॉट जोड़ दूंगा। –

+0

क्या मैं php के साथ itext का उपयोग कर सकता हूँ ?? – MKD

संबंधित मुद्दे