छोटे अद्यतन क्योंकि टिप्पणी पढ़ने के लिए मुश्किल होगा UTF-8 रूपरेखा है, जो मैं जवाब के रूप में पोस्ट पार्स करने के लिए सक्षम होने के लिए।
समस्या pyPdf.pdf.Destination.title
में है जो दो रूपों में लौटाया जा सकता है:
pyPdf.generic.TextStringObject
pyPdf.generic.ByteStringObject
तो _setup_outline_page_ids()
समारोह से कि उत्पादन भी दो अलग अलग प्रकार title
वस्तु है, जो विफल रहता है के लिए रिटर्न UnicodeDecodeError
के साथ यदि रूपरेखा शीर्षक में कुछ भी है तो ASCII।
if isinstance(title, pyPdf.generic.TextStringObject):
title = title.encode('utf-8')
पूरी कक्षा की
:
class PdfOutline(pyPdf.PdfFileReader):
def getDestinationPageNumbers(self):
def _setup_outline_page_ids(outline, _result=None):
if _result is None:
_result = {}
for obj in outline:
if isinstance(obj, pyPdf.pdf.Destination):
_result[(id(obj), obj.title)] = obj.page.idnum
elif isinstance(obj, list):
_setup_outline_page_ids(obj, _result)
return _result
def _setup_page_id_to_num(pages=None, _result=None, _num_pages=None):
if _result is None:
_result = {}
if pages is None:
_num_pages = []
pages = self.trailer["/Root"].getObject()["/Pages"].getObject()
t = pages["/Type"]
if t == "/Pages":
for page in pages["/Kids"]:
_result[page.idnum] = len(_num_pages)
_setup_page_id_to_num(page.getObject(), _result, _num_pages)
elif t == "/Page":
_num_pages.append(1)
return _result
outline_page_ids = _setup_outline_page_ids(self.getOutlines())
page_id_to_page_numbers = _setup_page_id_to_num()
result = {}
for (_, title), page_idnum in outline_page_ids.iteritems():
if isinstance(title, pyPdf.generic.TextStringObject):
title = title.encode('utf-8')
result[title] = page_id_to_page_numbers.get(page_idnum, '???')
return result
मैं समस्या को हल करने के लिए इस कोड जोड़ा