mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use PDFStream to set metadata for image PDFs
No need to reparse via PoDoFo
This commit is contained in:
parent
22ba6c3ab7
commit
56a3427b99
@ -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()
|
||||
|
@ -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())
|
||||
|
Loading…
x
Reference in New Issue
Block a user