from fpdf import FPDF from fpdf.html import HTMLMixin from bs4 import BeautifulSoup from io import BytesIO class MyFPDF(FPDF, HTMLMixin): def header(self): # Add a border around the page self.rect(5.0, 5.0, self.w - 10.0, self.h - 10.0) class Pdf: def __init__(self): self.pdf = MyFPDF() def replace_special_characters(self, text): replacements = { '’': "'", '“': '"', '”': '"', '–': '-', '—': '-', '…': '...', } for original, replacement in replacements.items(): text = text.replace(original, replacement) return text def pdf_creator(self, html_text): self.pdf.add_page() # Use the built-in Arial font self.pdf.set_font("Times", size=12) soup = BeautifulSoup(html_text, 'html.parser') # Replace special characters in the text for element in soup.find_all(text=True): element.replace_with(self.replace_special_characters(element)) # Convert entire HTML content to PDF self.pdf.write_html(str(soup)) # Save PDF to bytes object output = BytesIO() self.pdf.output(output) pdf_bytes = output.getvalue() output.close() return pdf_bytes