> Can reproduce it with first example url: at that point
>
> node.get('Annots', [])
>
> returns
>
> PDFref(50)
Thanks for pointing it out. I fixed the parser so that it understands
files with this, well, "interesting" document structure :) However, the
document in question seems to be problematic anyway -- Xpdf doesn't
display everything (OK, that might be because I'm missing some Asian fonts
here) and GhostScript even crashes completely :(
The patch will be included in the next upstream version, but if the
package maintainer is interested in fixing this with a new package
revision, there's also a patch against 0.10.2.
Martin J. Fiedler
--- _releases/Impressive-0.10.2/impressive.py 2008-09-18 22:53:10.000000000 +0200
+++ impressive.py 2008-12-05 18:51:03.000000000 +0100
@@ -1247,10 +1247,13 @@
if not offset:
raise PDFError, "referenced non-existing PDF object"
self.f.seek(offset)
- header = self.getline().split(None, 2)
- if (header[-1] != "obj") or (header[0] != str(obj)):
+ header = self.getline().split(None, 3)
+ if (len(header) < 3) or (header[2] != "obj") or (header[0] != str(obj)):
raise PDFError, "object does not start where it's supposed to"
- data = []
+ if len(header) == 4:
+ data = [header[3]]
+ else:
+ data = []
while True:
line = self.getline()
if line in ("endobj", "stream"): break
@@ -1310,10 +1313,13 @@
self.scan_page_tree(kid.ref, node.get('MediaBox', mbox), node.get('CropBox', cbox))
else:
page = self.page_count + 1
+ anode = node.get('Annots', [])
+ if anode.__class__ == PDFref:
+ anode = self.getobj(anode.ref)
self.page_count = page
self.obj2page[obj] = page
self.page2obj[page] = obj
- self.annots[page] = [a.ref for a in node.get('Annots', [])]
+ self.annots[page] = [a.ref for a in anode]
self.box[page] = node.get('CropBox', cbox) or node.get('MediaBox', mbox)
def dest2page(self, dest):