Another question:
I have working python code for inserting a cover page from an image to a pdf.
However it uses 3rd-party libraries, namely
pypdf and
reportlab.
I know I can add them to my plugin, but if Calibre's existing code could handle this already, I'd rather make my plugin leaner and use it instead.
So can someone here guide me on if and how to use Calibre's pdf modules?
Here's my existing code for reference:
Code:
import pypdf
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader
def generate_cover_pdf_stream(
cover_url: str,
main_pdf_reader: pypdf.PdfReader) -> io.BytesIO:
cover_pdf_stream = io.BytesIO()
sample_page = main_pdf_reader.pages[0]
cover_image = ImageReader(cover_url)
image_canvas = canvas.Canvas(cover_pdf_stream,
pagesize=(sample_page.mediabox.width, sample_page.mediabox.height),
cropBox=sample_page.cropbox,
artBox=sample_page.artbox,
trimBox=sample_page.trimbox)
image_canvas.drawImage(cover_image,
x=float(sample_page.trimbox.left),
y=float(sample_page.trimbox.bottom),
width=float(sample_page.trimbox.width),
height=float(sample_page.trimbox.height))
image_canvas.showPage()
image_canvas.save()
return cover_pdf_stream
def add_cover(filename_or_stream: str | IO | Path,
cover_url: str,
out_filename_or_stream: Path | str | IO):
reader = pypdf.PdfReader(filename_or_stream)
merger = pypdf.PdfMerger()
cover_pdf_stream = generate_cover_pdf_stream(cover_url, reader)
merger.append(cover_pdf_stream)
merger.append(reader.stream)
merger.write(out_filename_or_stream)
Thanks!