feat(api): Custom PDF Metadata

This commit is contained in:
TheOnlyWayUp
2025-10-29 03:06:53 +05:30
parent d7fbadb2aa
commit b99465037c
2 changed files with 21 additions and 14 deletions
+12 -2
View File
@@ -3,9 +3,10 @@ from io import BytesIO
from pathlib import Path
from tempfile import NamedTemporaryFile, _TemporaryFileWrapper
import pydyf
from bs4 import BeautifulSoup
from jinja2 import Template
from weasyprint import CSS, HTML
from weasyprint import CSS, HTML, Document
from weasyprint.text.fonts import FontConfiguration
from ..models import Story
@@ -154,6 +155,11 @@ class PDFGenerator(AbstractGenerator):
self.content: str = Template(self.content).render(data)
def write_custom_metadata(self, document: Document, pdf: pydyf.PDF):
"""Write non-standard metadata fields to the PDF."""
pdf.info["completed"] = pydyf.String(str(self.story["completed"]))
pdf.info["mature"] = pydyf.String(str(self.story["mature"]))
def generate_pdf(self):
"""Generate and write the PDF to a temporary file (self.book)."""
font_config = FontConfiguration()
@@ -162,7 +168,11 @@ class PDFGenerator(AbstractGenerator):
html_obj = HTML(string=self.content)
html_obj.write_pdf(
self.book.name, stylesheets=[stylesheet_obj], font_config=font_config
self.book.name,
stylesheets=[stylesheet_obj],
font_config=font_config,
finisher=self.write_custom_metadata,
options={"custom_metadata": True},
)
def compile(self):
@@ -3,22 +3,19 @@
<head>
<meta name=keywords content="{{clean_tags}}">
<title>{{ book_title }}</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name=Subject content="{{description}}">
<meta name=Author content="{{author}}">
<meta name=Keywords content="{{tags}}">
<meta name=Language content="{{langcode}}">
<meta name=CreationDate content="{{created}}">
<meta name=ModDate content="{{modified}}">
<meta name=Generator content="Dhanush Rambhatla (TheOnlyWayUp - https://rambhat.la) and WattpadDownloader">
<meta name=completed content="{{is_completed}}">
<meta name=maturecontent content="{{is_mature}}">
<!-- https://doc.courtbouillon.org/weasyprint/stable/api_reference.html#weasyprint.document.DocumentMetadata -->
<title>{{ book_title }}</title>
<meta name=description content="{{description}}">
<meta name=author content="{{author}}">
<meta name=keywords content="{{clean_tags}}">
<meta name=language content="{{langcode}}">
<meta name=dcterms.created content="{{created}}">
<meta name=dcterms.modified content="{{modified}}">
<meta name=generator content="Dhanush Rambhatla (TheOnlyWayUp - https://rambhat.la) and WattpadDownloader">
</head>