From 27a4657b2c051be67f0479765be27dd228eb1ed2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 29 Dec 2012 11:02:38 +0530 Subject: [PATCH] ... --- src/calibre/ebooks/pdf/render/engine.py | 7 +++++-- src/calibre/ebooks/pdf/render/links.py | 5 ++++- src/calibre/ebooks/pdf/render/serialize.py | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/pdf/render/engine.py b/src/calibre/ebooks/pdf/render/engine.py index 8ccb4a6c96..9210d1e805 100644 --- a/src/calibre/ebooks/pdf/render/engine.py +++ b/src/calibre/ebooks/pdf/render/engine.py @@ -251,9 +251,11 @@ class PdfEngine(QPaintEngine): try: self.pdf = PDFStream(self.file_object, (self.page_width, self.page_height), compress=self.compress, - mark_links=self.mark_links) + mark_links=self.mark_links, + debug=self.debug) except: self.errors(traceback.format_exc()) + self.errors_occurred = True return False return True @@ -270,6 +272,7 @@ class PdfEngine(QPaintEngine): self.pdf.end() except: self.errors(traceback.format_exc()) + self.errors_occurred = True return False finally: self.pdf = self.file_object = None @@ -581,7 +584,7 @@ if __name__ == '__main__': QBrush, QColor, QPoint, QPixmap app = QApplication([]) p = QPainter() - with open('/tmp/painter.pdf', 'wb') as f: + with open('/t/painter.pdf', 'wb') as f: dev = PdfDevice(f, compress=False) p.begin(dev) dev.init_page() diff --git a/src/calibre/ebooks/pdf/render/links.py b/src/calibre/ebooks/pdf/render/links.py index 203074f6c0..b25736fde7 100644 --- a/src/calibre/ebooks/pdf/render/links.py +++ b/src/calibre/ebooks/pdf/render/links.py @@ -47,7 +47,7 @@ class Links(object): for link in self.links: path, href, frag = link[0] page, rect = link[1:] - combined_path = os.path.abspath(os.path.join(path, *href.split('/'))) + combined_path = os.path.abspath(os.path.join(os.path.dirname(path), *href.split('/'))) is_local = not href or combined_path in self.anchors annot = Dictionary({ 'Type':Name('Annot'), 'Subtype':Name('Link'), @@ -76,6 +76,9 @@ class Links(object): if 'Annots' not in page: page['Annots'] = Array() page['Annots'].append(self.pdf.objects.add(annot)) + else: + self.pdf.debug('Could not find destination for link: %s in file %s'% + (href, path)) def add_outline(self, toc): parent = Dictionary({'Type':Name('Outlines')}) diff --git a/src/calibre/ebooks/pdf/render/serialize.py b/src/calibre/ebooks/pdf/render/serialize.py index b2a9f38bc0..c60a70ba41 100644 --- a/src/calibre/ebooks/pdf/render/serialize.py +++ b/src/calibre/ebooks/pdf/render/serialize.py @@ -281,7 +281,8 @@ class PDFStream(object): ( True, True, 'evenodd') : 'B*', } - def __init__(self, stream, page_size, compress=False, mark_links=False): + def __init__(self, stream, page_size, compress=False, mark_links=False, + debug=print): self.stream = HashingStream(stream) self.compress = compress self.write_line(PDFVER) @@ -298,6 +299,7 @@ class PDFStream(object): self.stroke_opacities, self.fill_opacities = {}, {} self.font_manager = FontManager(self.objects, self.compress) self.image_cache = {} + self.debug = debug self.links = Links(self, mark_links) @property