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 DynamicContent:

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}”

def pdf_add_table(provider, 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)

def pdf_add_picture(provider, 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”])

file = PdfFileProvider(Faker()).pdf_file(

pdf_generator_cls=pdfkit_generator.PdfkitPdfGenerator, content=DynamicTemplate(

[

(pdf_add_table, {}), (pdf_add_picture, {}),

]

)

)

encoding: str = 'utf-8'
generate(content: Union[str, DynamicTemplate], data: Dict[str, Any], provider: Union[Faker, Generator, Provider], **kwargs) bytes[source]

Generate PDF.

handle_kwargs(**kwargs) None[source]

Handle kwargs.

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 DynamicContent:

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 import colors from reportlab.platypus import Image, Table, TableStyle, PageBreak

FAKER = Faker()

def pdf_add_table(provider, 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)

def pdf_add_picture(provider, 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)

file = PdfFileProvider(Faker()).pdf_file(
pdf_generator_cls=(

reportlab_generator.ReportlabPdfGenerator

), content=DynamicTemplate(

[

(pdf_add_table, {}), (pdf_add_picture, {}),

]

)

)

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.

handle_kwargs(**kwargs) None[source]

Handle kwargs.

Module contents