2014-10-22 7 views
8

मुझे एक पीडीएफ मिला है जिससे मैं पाइथन का उपयोग करके कुछ छवियां निकालना चाहता हूं। मैं आसानी से poppler-utils पुस्तकालय like this से pdfimages का उपयोग कर लिनक्स कमांड लाइन से छवियों को निकालने कर सकते हैं:पायथन में पॉपप्लर लाइब्रेरी का उपयोग कर पीडीएफ से छवियों को निकालने के लिए कैसे?

pdfimages my_file.pdf /tmp/image 

अगला मैंने पाया एक अजगर यह here के लिए बाध्यकारी है, और हमेशा की तरह sudo apt-get install python-poppler का उपयोग कर इसे स्थापित। पायथन दुभाषिया में अब मैं यह कर सकता हूं:

>>> import poppler 
>>> dir(poppler) 
['ACTION_GOTO_DEST', 'ACTION_GOTO_REMOTE', 'ACTION_JAVASCRIPT', 'ACTION_LAUNCH', 'ACTION_MOVIE', 'ACTION_NAMED', 'ACTION_NONE', 'ACTION_OCG_STATE', 'ACTION_RENDITION', 'ACTION_UNKNOWN', 'ACTION_URI', 'ANNOT_3D', 'ANNOT_CARET', 'ANNOT_CIRCLE', 'ANNOT_EXTERNAL_DATA_MARKUP_3D', 'ANNOT_EXTERNAL_DATA_MARKUP_UNKNOWN', 'ANNOT_FILE_ATTACHMENT', 'ANNOT_FLAG_HIDDEN', 'ANNOT_FLAG_INVISIBLE', 'ANNOT_FLAG_LOCKED', 'ANNOT_FLAG_LOCKED_CONTENTS', 'ANNOT_FLAG_NO_ROTATE', 'ANNOT_FLAG_NO_VIEW', 'ANNOT_FLAG_NO_ZOOM', 'ANNOT_FLAG_PRINT', 'ANNOT_FLAG_READ_ONLY', 'ANNOT_FLAG_TOGGLE_NO_VIEW', 'ANNOT_FLAG_UNKNOWN', 'ANNOT_FREE_TEXT', 'ANNOT_FREE_TEXT_QUADDING_CENTERED', 'ANNOT_FREE_TEXT_QUADDING_LEFT_JUSTIFIED', 'ANNOT_FREE_TEXT_QUADDING_RIGHT_JUSTIFIED', 'ANNOT_HIGHLIGHT', 'ANNOT_INK', 'ANNOT_LINE', 'ANNOT_LINK', 'ANNOT_MARKUP_REPLY_TYPE_GROUP', 'ANNOT_MARKUP_REPLY_TYPE_R', 'ANNOT_MOVIE', 'ANNOT_POLYGON', 'ANNOT_POLY_LINE', 'ANNOT_POPUP', 'ANNOT_PRINTER_MARK', 'ANNOT_SCREEN', 'ANNOT_SOUND', 'ANNOT_SQUARE', 'ANNOT_SQUIGGLY', 'ANNOT_STAMP', 'ANNOT_STRIKE_OUT', 'ANNOT_TEXT', 'ANNOT_TEXT_STATE_ACCEPTED', 'ANNOT_TEXT_STATE_CANCELLED', 'ANNOT_TEXT_STATE_COMPLETED', 'ANNOT_TEXT_STATE_MARKED', 'ANNOT_TEXT_STATE_NONE', 'ANNOT_TEXT_STATE_REJECTED', 'ANNOT_TEXT_STATE_UNKNOWN', 'ANNOT_TEXT_STATE_UNMARKED', 'ANNOT_TRAP_NET', 'ANNOT_UNDERLINE', 'ANNOT_UNKNOWN', 'ANNOT_WATERMARK', 'ANNOT_WIDGET', 'Action', 'ActionAny', 'ActionGotoDest', 'ActionGotoRemote', 'ActionLaunch', 'ActionMovie', 'ActionNamed', 'ActionType', 'ActionUri', 'Annot', 'AnnotCalloutLine', 'AnnotExternalDataType', 'AnnotFlag', 'AnnotFreeText', 'AnnotFreeTextQuadding', 'AnnotMapping', 'AnnotMarkup', 'AnnotMarkupReplyType', 'AnnotText', 'AnnotTextState', 'AnnotType', 'Attachment', 'BACKEND_CAIRO', 'BACKEND_SPLASH', 'BACKEND_UNKNOWN', 'Backend', 'Color', 'DEST_FIT', 'DEST_FITB', 'DEST_FITBH', 'DEST_FITBV', 'DEST_FITH', 'DEST_FITR', 'DEST_FITV', 'DEST_NAMED', 'DEST_UNKNOWN', 'DEST_XYZ', 'Dest', 'DestType', 'Document', 'ERROR_BAD_CATALOG', 'ERROR_DAMAGED', 'ERROR_ENCRYPTED', 'ERROR_INVALID', 'ERROR_OPEN_FILE', 'Error', 'FONT_TYPE_CID_TYPE0', 'FONT_TYPE_CID_TYPE0C', 'FONT_TYPE_CID_TYPE0COT', 'FONT_TYPE_CID_TYPE2', 'FONT_TYPE_CID_TYPE2OT', 'FONT_TYPE_TRUETYPE', 'FONT_TYPE_TRUETYPEOT', 'FONT_TYPE_TYPE1', 'FONT_TYPE_TYPE1C', 'FONT_TYPE_TYPE1COT', 'FONT_TYPE_TYPE3', 'FONT_TYPE_UNKNOWN', 'FORM_BUTTON_CHECK', 'FORM_BUTTON_PUSH', 'FORM_BUTTON_RADIO', 'FORM_CHOICE_COMBO', 'FORM_CHOICE_LIST', 'FORM_FIELD_BUTTON', 'FORM_FIELD_CHOICE', 'FORM_FIELD_SIGNATURE', 'FORM_FIELD_TEXT', 'FORM_FIELD_UNKNOWN', 'FORM_TEXT_FILE_SELECT', 'FORM_TEXT_MULTILINE', 'FORM_TEXT_NORMAL', 'FontInfo', 'FontType', 'FontsIter', 'FormButtonType', 'FormChoiceType', 'FormField', 'FormFieldMapping', 'FormFieldType', 'FormTextType', 'ImageMapping', 'IndexIter', 'Layer', 'LayersIter', 'LinkMapping', 'ORIENTATION_LANDSCAPE', 'ORIENTATION_PORTRAIT', 'ORIENTATION_SEASCAPE', 'ORIENTATION_UPSIDEDOWN', 'Orientation', 'PAGE_LAYOUT_ONE_COLUMN', 'PAGE_LAYOUT_SINGLE_PAGE', 'PAGE_LAYOUT_TWO_COLUMN_LEFT', 'PAGE_LAYOUT_TWO_COLUMN_RIGHT', 'PAGE_LAYOUT_TWO_PAGE_LEFT', 'PAGE_LAYOUT_TWO_PAGE_RIGHT', 'PAGE_LAYOUT_UNSET', 'PAGE_MODE_FULL_SCREEN', 'PAGE_MODE_NONE', 'PAGE_MODE_UNSET', 'PAGE_MODE_USE_ATTACHMENTS', 'PAGE_MODE_USE_OC', 'PAGE_MODE_USE_OUTLINES', 'PAGE_MODE_USE_THUMBS', 'PAGE_TRANSITION_BLINDS', 'PAGE_TRANSITION_BOX', 'PAGE_TRANSITION_COVER', 'PAGE_TRANSITION_DISSOLVE', 'PAGE_TRANSITION_FADE', 'PAGE_TRANSITION_FLY', 'PAGE_TRANSITION_GLITTER', 'PAGE_TRANSITION_HORIZONTAL', 'PAGE_TRANSITION_INWARD', 'PAGE_TRANSITION_OUTWARD', 'PAGE_TRANSITION_PUSH', 'PAGE_TRANSITION_REPLACE', 'PAGE_TRANSITION_SPLIT', 'PAGE_TRANSITION_UNCOVER', 'PAGE_TRANSITION_VERTICAL', 'PAGE_TRANSITION_WIPE', 'PERMISSIONS_FULL', 'PERMISSIONS_OK_TO_ADD_NOTES', 'PERMISSIONS_OK_TO_ASSEMBLE', 'PERMISSIONS_OK_TO_COPY', 'PERMISSIONS_OK_TO_EXTRACT_CONTENTS', 'PERMISSIONS_OK_TO_FILL_FORM', 'PERMISSIONS_OK_TO_MODIFY', 'PERMISSIONS_OK_TO_PRINT', 'PERMISSIONS_OK_TO_PRINT_HIGH_RESOLUTION', 'PSFile', 'Page', 'PageLayout', 'PageMode', 'PageTransition', 'PageTransitionAlignment', 'PageTransitionDirection', 'PageTransitionType', 'Permissions', 'Rectangle', 'SELECTION_GLYPH', 'SELECTION_LINE', 'SELECTION_WORD', 'SelectionStyle', 'VIEWER_PREFERENCES_CENTER_WINDOW', 'VIEWER_PREFERENCES_DIRECTION_RTL', 'VIEWER_PREFERENCES_DISPLAY_DOC_TITLE', 'VIEWER_PREFERENCES_FIT_WINDOW', 'VIEWER_PREFERENCES_HIDE_MENUBAR', 'VIEWER_PREFERENCES_HIDE_TOOLBAR', 'VIEWER_PREFERENCES_HIDE_WINDOWUI', 'VIEWER_PREFERENCES_UNSET', 'ViewerPreferences', '__doc__', '__file__', '__name__', '__package__', '__version__', 'document_new_from_data', 'document_new_from_file', 'get_backend', 'get_version', 'pypoppler_version'] 
>>> 

यहां से मैं थोड़ी देर खो गया हूं। इस सूची में मुझे पीडीएफमेज नाम, या संबंधित कुछ भी जैसा नहीं मिल रहा है। the source files of python-poppler में मुझे एक .py फ़ाइल भी नहीं मिल सकती है।

क्या कोई जानता है कि मैं पाइथन के भीतर से poppler pdfimages टूल का उपयोग कैसे कर सकता हूं? सभी सुझावों का स्वागत है!

+0

क्या तुमने कभी यह पता लगा था? सही दिशा में कोई भी सूचक बहुत उपयोगी होगा। – user1717828

+1

user1717828 @ - अंत में मैं बस 'subprocess.Popen() का इस्तेमाल किया' लिनक्स 'pdfimages', एक अस्थायी फ़ोल्डर के लिए छवियों को निकालने के लिए आदेश कॉल करने के लिए जो छवियों पर मैं पाश और अजगर में उन्हें बाहर पढ़ने के बाद। शायद यह आपके लिए भी एक समाधान हो सकता है। सौभाग्य! – kramer65

उत्तर

0

मैं poppler के बारे में आपको बता नहीं सकता, लेकिन pyPDF में आप (लगभग)

  • ओपन द्विआधारी मोड में फ़ाइल और pyPdf.PdfFileReader()
  • को fileobj से होकर गुजरेगा getPage() का उपयोग कर प्रत्येक पृष्ठ के लिए एक वस्तु प्राप्त करें ; पहले पृष्ठों की कुल संख्या प्राप्त करने के लिए getNumPages() का उपयोग करें।
  • पृष्ठ वस्तु dict-like है और /Resources -key है, परिणामी ऑब्जेक्ट में /XObject -key है। page['/Resources']['/XObject'] में ऐसी वस्तुएं हो सकती हैं जहां ['SubType'] == '/Image' हो। वे वस्तुएं हैं जिन्हें आप चाहते हैं।
  • छवि के एन्कोडिंग के आधार पर, ['/Filter']'/FlateDecode', '/DCTDecode' या अन्य हो सकता है। आपको दिए गए फ़िल्टर के अनुसार दिए गए फ़िल्टर के अनुसार ऑब्जेक्ट की डेटा-स्ट्रीम को प्रीप्रोसेस करने की आवश्यकता हो सकती है।
  • कच्चे बाइट प्राप्त करने के लिए _data विशेषता का उपयोग करें। उन्हें डिस्क पर लिखें या उन्हें एक छवि लाइब्रेरी पर पास करें।

मैंने पीडीएफ के लिए एक हैकी विज्ञापन-फ़िल्टर लिखा था, एक बार, अन्य चीजों के साथ, संकल्प को कम करने के लिए बहुत बड़ी छवियों को फिर से एन्कोड करता है। code आपको ऊपर बुलेट बिंदुओं की तुलना में कुछ और मार्गदर्शन देना चाहिए।

सूचना है कि पीडीएफ एक फ़ाइल स्वरूप की एक नरक है, इसलिए अपने कोड में कई अजीब बातें देखेंगे। काली मिर्च के दावे के साथ अपने कोड और हमेशा एक अंतिम else: raise ValueError हर if :-)

पर भी ध्यान दें कि मार्गदर्शन के ऊपर तैनात सख्ती से सही नहीं है। आप क्या करना चाहते हैं पीडीएफ की सूची प्राप्त करना और /Resources ऑब्जेक्ट को अपना रास्ता बनाना; हालांकि मैं स्मृति से ऑब्जेक्ट-पेड़ को याद नहीं कर सकता। reference तैयार है।

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

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