faker_file.providers.pdf_file.generators package¶
Submodules¶
faker_file.providers.pdf_file.generators.pdfkit_generator module¶
- class faker_file.providers.pdf_file.generators.pdfkit_generator.PdfkitPdfGenerator(**kwargs)[source]¶
Bases:
BasePdfGenerator
Pdfkit PDF generator.
Usage example:
from faker import Faker from faker_file.providers.pdf_file import PdfFileProvider from faker_file.providers.pdf_file.generators import pdfkit_generator
FAKER = Faker()
- file = PdfFileProvider(FAKER).pdf_file(
pdf_generator_cls=pdfkit_generator.PdfkitPdfGenerator
)
Using DynamicTemplate:
import base64 from faker import Faker from faker_file.base import DynamicTemplate from faker_file.providers.jpeg_file import JpegFileProvider from faker_file.providers.pdf_file import PdfFileProvider from faker_file.providers.pdf_file.generators import pdfkit_generator
FAKER = Faker()
- def create_data_url(image_bytes, image_format):
encoded_image = base64.b64encode(image_bytes).decode(‘utf-8’) return f”data:image/{image_format};base64,{encoded_image}”
# Add table function def pdf_add_table(
provider, generator, document, data, counter, **kwargs
- ):
rows = kwargs.get(“rows”, 3) cols = kwargs.get(“cols”, 4)
# Begin the HTML table table_html = “<table>”
- for row_num in range(rows):
table_html += “<tr>”
- for col_num in range(cols):
text = provider.generator.paragraph() table_html += f”<td>{text}</td>”
data.setdefault(“content_modifiers”, {}) data[“content_modifiers”].setdefault(“add_table”, {}) data[“content_modifiers”][“add_table”].setdefault(
counter, []
) data[“content_modifiers”][“add_table”][counter].append(
text
)
table_html += “</tr>”
# End the HTML table table_html += “</table>”
document += (”
“ + table_html)
# Add picture function def pdf_add_picture(
provider, generator, document, data, counter, **kwargs
- ):
- jpeg_file = JpegFileProvider(provider.generator).jpeg_file(
raw=True
) data_url = create_data_url(jpeg_file, “jpg”) document += f”<img src=’{data_url}’ alt=’Inline Image’ />” data.setdefault(“content_modifiers”, {}) data[“content_modifiers”].setdefault(“add_picture”, {}) data[“content_modifiers”][“add_picture”].setdefault(counter, []) data[“content_modifiers”][“add_picture”][counter].append(
jpeg_file.data[“content”]
) data[“content”] += (”
“ + jpeg_file.data[“content”])
# Add page break def pdf_add_page_break(
provider, generator, document, data, counter, **kwargs
- ):
page_break_html = “<div style=’page-break-before: always;’></div>” document += “
“ + page_break_html
# Add a paragraph def pdf_add_paragraph(
provider, generator, document, data, counter, **kwargs
- ):
content = provider.generator.text(max_nb_chars=5_000) paragraph_html = f”<div><p>{content}</p></div>” document += “
“ + paragraph_html
# Create a file with table, page-break, picture, page-break, paragraph file = PdfFileProvider(Faker()).pdf_file(
pdf_generator_cls=pdfkit_generator.PdfkitPdfGenerator, content=DynamicTemplate(
- [
(pdf_add_table, {}), (pdf_add_page_break, {}), (pdf_add_picture, {}), (pdf_add_page_break, {}), (pdf_add_paragraph, {}),
]
)
)
# Create a file with text of 100 pages file = PdfFileProvider(Faker()).pdf_file(
pdf_generator_cls=pdfkit_generator.PdfkitPdfGenerator, content=DynamicTemplate(
- [
(pdf_add_paragraph, {}), (pdf_add_page_break, {}),
] * 100
)
)
- encoding: str = 'utf-8'¶
- generate(content: Union[str, DynamicTemplate], data: Dict[str, Any], provider: Union[Faker, Generator, Provider], **kwargs) bytes [source]¶
Generate PDF.
faker_file.providers.pdf_file.generators.reportlab_generator module¶
- class faker_file.providers.pdf_file.generators.reportlab_generator.ReportlabPdfGenerator(**kwargs)[source]¶
Bases:
BasePdfGenerator
Reportlab PDF generator.
Usage example:
from faker import Faker from faker_file.providers.pdf_file import PdfFileProvider from faker_file.providers.pdf_file.generators import reportlab_generator
FAKER = Faker()
- file = PdfFileProvider(FAKER).pdf_file(
pdf_generator_cls=reportlab_generator.ReportlabPdfGenerator
)
Using DynamicTemplate:
from io import BytesIO
from faker import Faker from faker_file.base import DynamicTemplate from faker_file.providers.jpeg_file import JpegFileProvider from faker_file.providers.pdf_file import PdfFileProvider from faker_file.providers.pdf_file.generators import (
reportlab_generator
) from PIL import Image as PilImage from reportlab.lib.pagesizes import letter, landscape from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib import colors from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.ttfonts import TTFont from reportlab.platypus import (
Image, Table, TableStyle, PageBreak, Paragraph,
)
FAKER = Faker()
# Add table function def pdf_add_table(
provider, generator, story, data, counter, **kwargs
- ):
rows = kwargs.get(“rows”, 3) cols = kwargs.get(“cols”, 4)
# Define your table headers headers = [f”Header {i+1}” for i in range(cols)]
# Generate the rest of the table data table_data = [
- [
provider.generator.word() for _ in range(cols)
] for _ in range(rows)
]
# Add the headers to the table data table_data.insert(0, headers)
# Create the table object table = Table(table_data)
# Apply table styles table.setStyle(
- TableStyle(
- [
(“BACKGROUND”, (0, 0), (-1, 0), colors.grey), (“TEXTCOLOR”, (0, 0), (-1, 0), colors.whitesmoke), (“ALIGN”, (0, 0), (-1, -1), “CENTER”), (“FONTNAME”, (0, 0), (-1, 0), “Helvetica-Bold”), (“FONTSIZE”, (0, 0), (-1, 0), 14), (“BOTTOMPADDING”, (0, 0), (-1, 0), 12), (“BACKGROUND”, (0, 1), (-1, -1), colors.beige), (“GRID”, (0, 0), (-1, -1), 1, colors.black), (“BOX”, (0, 0), (-1, -1), 1, colors.black),
]
)
)
# Add the table to the document and build it story.append(table)
# Add picture function def pdf_add_picture(
provider, generator, story, data, counter, **kwargs
- ):
- jpeg_file = JpegFileProvider(provider.generator).jpeg_file(
raw=True
)
# Create a BytesIO object and load the image data with BytesIO(jpeg_file) as input_stream:
pil_image = PilImage.open(input_stream)
# Resize the image new_width = 400 new_height = 400 pil_image = pil_image.resize((new_width, new_height))
# Create a BytesIO object outside the ‘with’ statement output_stream = BytesIO() pil_image.save(output_stream, format=’JPEG’) output_stream.seek(0) # Move to the start of the stream
# Now you can use output_stream as your image data img = Image(output_stream) img.width = new_width img.height = new_height story.append(img)
# Add page break function def pdf_add_page_break(
provider, generator, story, data, counter, **kwargs
- ):
# Insert a page break story.append(PageBreak())
# Add paragraph function def pdf_add_paragraph(
provider, generator, story, data, counter, **kwargs
- ):
# Insert a paragraph styles = getSampleStyleSheet() style_paragraph = styles[“Normal”] style_paragraph.fontName = generator.font_name pdfmetrics.registerFont(
TTFont(generator.font_name, generator.font_path)
) content = provider.generator.text(max_nb_chars=5_000) paragraph = Paragraph(content, style_paragraph) story.append(paragraph)
# Create a file with table, page-break, picture, page-break, paragraph file = PdfFileProvider(Faker()).pdf_file(
- pdf_generator_cls=(
reportlab_generator.ReportlabPdfGenerator
), content=DynamicTemplate(
- [
(pdf_add_table, {}), (pdf_add_page_break, {}), (pdf_add_picture, {}), (pdf_add_page_break, {}), (pdf_add_paragraph, {}),
]
)
)
# Create a file with text of 100 pages file = PdfFileProvider(Faker()).pdf_file(
- pdf_generator_cls=(
reportlab_generator.ReportlabPdfGenerator
), content=DynamicTemplate(
- [
(pdf_add_paragraph, {}), (pdf_add_page_break, {}),
] * 100
)
)
- font_name: str = 'Vera'¶
- font_path: str = 'Vera.ttf'¶
- generate(content: Union[str, DynamicTemplate], data: Dict[str, Any], provider: Union[Faker, Generator, Provider], **kwargs) bytes [source]¶
Generate PDF.
- Parameters:
content –
data –
provider – PdfFileProvider instance.