diff --git a/src/calibre/ebooks/pdf/html_writer.py b/src/calibre/ebooks/pdf/html_writer.py index 6da4ef1d29..4dce448c65 100644 --- a/src/calibre/ebooks/pdf/html_writer.py +++ b/src/calibre/ebooks/pdf/html_writer.py @@ -10,7 +10,6 @@ import sys from collections import namedtuple from functools import lru_cache from html5_parser import parse -from io import BytesIO from itertools import count, repeat from qt.core import ( QApplication, QByteArray, QMarginsF, QObject, QPageLayout, Qt, QTimer, QUrl, @@ -29,10 +28,7 @@ from calibre.ebooks.oeb.base import XHTML, XPath from calibre.ebooks.oeb.polish.container import Container as ContainerBase from calibre.ebooks.oeb.polish.toc import get_toc from calibre.ebooks.oeb.polish.utils import guess_type -from calibre.ebooks.pdf.image_writer import ( - Image, PDFMetadata, draw_image_page, get_page_layout, -) -from calibre.ebooks.pdf.render.serialize import PDFStream +from calibre.ebooks.pdf.image_writer import PDFMetadata, get_page_layout from calibre.gui2 import setup_unix_signals from calibre.srv.render_book import check_for_maths from calibre.utils.fonts.sfnt.container import Sfnt, UnsupportedFont @@ -42,9 +38,9 @@ from calibre.utils.fonts.sfnt.subset import pdf_subset from calibre.utils.logging import default_log from calibre.utils.monotonic import monotonic from calibre.utils.podofo import ( - dedup_type3_fonts, get_podofo, remove_unused_fonts, set_metadata_implementation, + add_image_page, dedup_type3_fonts, get_podofo, remove_unused_fonts, + set_metadata_implementation, ) - from calibre.utils.resources import get_path as P from calibre.utils.short_uuid import uuid4 from calibre.utils.webengine import secure_webengine, send_reply, setup_profile @@ -481,15 +477,8 @@ def update_metadata(pdf_doc, pdf_metadata): def add_cover(pdf_doc, cover_data, page_layout, opts): - buf = BytesIO() - page_size = page_layout.fullRectPoints().size() - img = Image(cover_data) - writer = PDFStream(buf, (page_size.width(), page_size.height()), compress=True) - writer.apply_fill(color=(1, 1, 1)) - draw_image_page(writer, img, preserve_aspect_ratio=opts.preserve_cover_aspect_ratio) - writer.end() - cover_pdf_doc = data_as_pdf_doc(buf.getvalue()) - pdf_doc.insert_existing_page(cover_pdf_doc) + r = page_layout.fullRect(QPageLayout.Unit.Point) + add_image_page(pdf_doc, cover_data, page_size=(r.left(), r.top(), r.width(), r.height()), preserve_aspect_ratio=opts.preserve_cover_aspect_ratio) # }}} diff --git a/src/calibre/utils/podofo/__init__.py b/src/calibre/utils/podofo/__init__.py index 95f7fbc3a6..7356874e6b 100644 --- a/src/calibre/utils/podofo/__init__.py +++ b/src/calibre/utils/podofo/__init__.py @@ -169,10 +169,10 @@ def test_dedup_type3_fonts(src): def add_image_page(pdf_doc, image_data, page_size=None, page_num=1, preserve_aspect_ratio=True): if page_size is None: from qt.core import QPageSize - page_size = QPageSize(QPageSize.PageSizeId.A4) - page = page_size.rect(QPageSize.Unit.Point) + p = QPageSize(QPageSize.PageSizeId.A4).rect(QPageSize.Unit.Point) + page_size = p.left(), p.top(), p.width(), p.height() pdf_doc.add_image_page( - image_data, page.left(), page.top(), page.width(), page.height(), page.left(), page.top(), page.width(), page.height(), page_num, preserve_aspect_ratio) + image_data, *page_size, *page_size, page_num, preserve_aspect_ratio) def test_add_image_page(image='/t/t.jpg', dest='/t/t.pdf', **kw): diff --git a/src/calibre/utils/podofo/doc.cpp b/src/calibre/utils/podofo/doc.cpp index 4b6a880225..adf8899e02 100644 --- a/src/calibre/utils/podofo/doc.cpp +++ b/src/calibre/utils/podofo/doc.cpp @@ -432,6 +432,7 @@ PDFDoc_add_image_page(PDFDoc *self, PyObject *args) { } } painter.DrawImage(*img, image_x, image_y, scaling_x / img->GetRect().Width, scaling_y / img->GetRect().Height); + painter.FinishDrawing(); return Py_BuildValue("dd", img->GetRect().Width, img->GetRect().Height); } // }}}