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.

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

  • providerPdfFileProvider instance.

handle_kwargs(**kwargs) None[source]

Handle kwargs.

Module contents