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);
}
// }}}