diff --git a/src/calibre/ebooks/pdf/html_writer.py b/src/calibre/ebooks/pdf/html_writer.py
index ef163d4b96..f723642894 100644
--- a/src/calibre/ebooks/pdf/html_writer.py
+++ b/src/calibre/ebooks/pdf/html_writer.py
@@ -11,16 +11,17 @@ from PyQt5.Qt import QApplication, QTimer, QUrl
from PyQt5.QtWebEngineWidgets import QWebEnginePage
from calibre.constants import iswindows
+from calibre.ebooks.metadata.xmp import metadata_to_xmp_packet
from calibre.ebooks.oeb.polish.container import Container as ContainerBase
from calibre.ebooks.oeb.polish.split import merge_html
from calibre.ebooks.pdf.image_writer import (
- Image, PDFMetadata, draw_image_page, get_page_layout, update_metadata
+ Image, PDFMetadata, draw_image_page, get_page_layout
)
from calibre.ebooks.pdf.render.serialize import PDFStream
from calibre.gui2 import setup_unix_signals
from calibre.gui2.webengine import secure_webengine
from calibre.utils.logging import default_log
-from calibre.utils.podofo import get_podofo
+from calibre.utils.podofo import get_podofo, set_metadata_implementation
from polyglot.builtins import range
OK, LOAD_FAILED, KILL_SIGNAL = range(0, 3)
@@ -100,6 +101,14 @@ class Renderer(QWebEnginePage):
return self.pdf_data
+def update_metadata(pdf_doc, pdf_metadata):
+ if pdf_metadata.mi:
+ xmp_packet = metadata_to_xmp_packet(pdf_metadata.mi)
+ set_metadata_implementation(
+ pdf_doc, pdf_metadata.title, pdf_metadata.mi.authors,
+ pdf_metadata.mi.book_producer, pdf_metadata.mi.tags, xmp_packet)
+
+
def add_cover(pdf_doc, cover_data, page_layout, opts):
buf = BytesIO()
page_size = page_layout.fullRectPoints().size()
diff --git a/src/calibre/ebooks/pdf/image_writer.py b/src/calibre/ebooks/pdf/image_writer.py
index de2a21d3cb..41bf746b2b 100644
--- a/src/calibre/ebooks/pdf/image_writer.py
+++ b/src/calibre/ebooks/pdf/image_writer.py
@@ -9,12 +9,10 @@ from io import BytesIO
from PyQt5.Qt import QMarginsF, QPageLayout, QPageSize, QSize
from calibre.constants import filesystem_encoding
-from calibre.ebooks.metadata.xmp import metadata_to_xmp_packet
from calibre.ebooks.pdf.render.common import cicero, cm, didot, inch, mm, pica
from calibre.ebooks.pdf.render.serialize import PDFStream
from calibre.utils.img import image_and_format_from_data
from calibre.utils.imghdr import identify
-from calibre.utils.podofo import get_podofo, set_metadata_implementation
from polyglot.builtins import as_unicode
@@ -131,14 +129,6 @@ def draw_image_page(writer, img, preserve_aspect_ratio=True):
writer.draw_image_with_transform(ref, translation=translation, scaling=scaling)
-def update_metadata(pdf_doc, pdf_metadata):
- if pdf_metadata.mi:
- xmp_packet = metadata_to_xmp_packet(pdf_metadata.mi)
- set_metadata_implementation(
- pdf_doc, pdf_metadata.title, pdf_metadata.mi.authors,
- pdf_metadata.mi.book_producer, pdf_metadata.mi.tags, xmp_packet)
-
-
def convert(images, output_path, opts, metadata, report_progress):
buf = BytesIO()
page_layout = get_page_layout(opts, for_comic=True)
@@ -146,16 +136,13 @@ def convert(images, output_path, opts, metadata, report_progress):
writer = PDFStream(buf, (page_size.width(), page_size.height()), compress=True)
writer.apply_fill(color=(1, 1, 1))
pdf_metadata = PDFMetadata(metadata)
+ writer.set_metadata(pdf_metadata.title, pdf_metadata.author, pdf_metadata.tags, pdf_metadata.mi)
for i, path in enumerate(images):
img = Image(as_unicode(path, filesystem_encoding))
draw_image_page(writer, img)
writer.end_page()
+ # report progress
writer.end()
- podofo = get_podofo()
- pdf_doc = podofo.PDFDoc()
- pdf_doc.load(buf.getvalue())
- update_metadata(pdf_doc, pdf_metadata)
- raw = pdf_doc.write()
with open(output_path, 'wb') as f:
- f.write(raw)
+ f.write(buf.getvalue())