mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Use PoDoFo to insert the cover page, bypassing https://github.com/podofo/podofo/issues/76
This commit is contained in:
parent
cb1c6efd61
commit
59fab1d482
@ -10,7 +10,6 @@ import sys
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
from html5_parser import parse
|
from html5_parser import parse
|
||||||
from io import BytesIO
|
|
||||||
from itertools import count, repeat
|
from itertools import count, repeat
|
||||||
from qt.core import (
|
from qt.core import (
|
||||||
QApplication, QByteArray, QMarginsF, QObject, QPageLayout, Qt, QTimer, QUrl,
|
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.container import Container as ContainerBase
|
||||||
from calibre.ebooks.oeb.polish.toc import get_toc
|
from calibre.ebooks.oeb.polish.toc import get_toc
|
||||||
from calibre.ebooks.oeb.polish.utils import guess_type
|
from calibre.ebooks.oeb.polish.utils import guess_type
|
||||||
from calibre.ebooks.pdf.image_writer import (
|
from calibre.ebooks.pdf.image_writer import PDFMetadata, get_page_layout
|
||||||
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 import setup_unix_signals
|
||||||
from calibre.srv.render_book import check_for_maths
|
from calibre.srv.render_book import check_for_maths
|
||||||
from calibre.utils.fonts.sfnt.container import Sfnt, UnsupportedFont
|
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.logging import default_log
|
||||||
from calibre.utils.monotonic import monotonic
|
from calibre.utils.monotonic import monotonic
|
||||||
from calibre.utils.podofo import (
|
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.resources import get_path as P
|
||||||
from calibre.utils.short_uuid import uuid4
|
from calibre.utils.short_uuid import uuid4
|
||||||
from calibre.utils.webengine import secure_webengine, send_reply, setup_profile
|
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):
|
def add_cover(pdf_doc, cover_data, page_layout, opts):
|
||||||
buf = BytesIO()
|
r = page_layout.fullRect(QPageLayout.Unit.Point)
|
||||||
page_size = page_layout.fullRectPoints().size()
|
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)
|
||||||
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)
|
|
||||||
# }}}
|
# }}}
|
||||||
|
|
||||||
|
|
||||||
|
@ -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):
|
def add_image_page(pdf_doc, image_data, page_size=None, page_num=1, preserve_aspect_ratio=True):
|
||||||
if page_size is None:
|
if page_size is None:
|
||||||
from qt.core import QPageSize
|
from qt.core import QPageSize
|
||||||
page_size = QPageSize(QPageSize.PageSizeId.A4)
|
p = QPageSize(QPageSize.PageSizeId.A4).rect(QPageSize.Unit.Point)
|
||||||
page = page_size.rect(QPageSize.Unit.Point)
|
page_size = p.left(), p.top(), p.width(), p.height()
|
||||||
pdf_doc.add_image_page(
|
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):
|
def test_add_image_page(image='/t/t.jpg', dest='/t/t.pdf', **kw):
|
||||||
|
@ -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.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);
|
return Py_BuildValue("dd", img->GetRect().Width, img->GetRect().Height);
|
||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user