> 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):

Reply via email to