Instructions and code examples for creating, editing, and designing PDFs programmatically. Use this skill to generate reports, fill forms, or design custom layouts.
This skill helps you create and manipulate PDF documents using Python and command-line tools. Use it to generate reports, fill forms, or customize layouts.
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas
c = canvas.Canvas("hello.pdf", pagesize=A4)
width, height = A4
# Draw text
c.setFont("Helvetica-Bold", 16)
c.drawString(50, height - 50, "Hello, PDF!")
# Draw rectangle
c.rect(50, height - 100, 200, 50, stroke=1, fill=0)
# Save
c.save()
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak
from reportlab.lib.styles import getSampleStyleSheet
doc = SimpleDocTemplate("report.pdf")
styles = getSampleStyleSheet()
story = []
story.append(Paragraph("Report Title", styles['Title']))
story.append(Spacer(1, 12))
story.append(Paragraph("This is the report body.", styles['Normal']))
story.append(PageBreak())
story.append(Paragraph("Page 2", styles['Heading1']))
doc.build(story)
from pypdf import PdfReader, PdfWriter
reader = PdfReader("form.pdf")
writer = PdfWriter()
for page in reader.pages:
writer.add_page(page)
# Update form fields
writer.update_page_form_field_values(writer.pages[0], {
"name_field": "John Doe",
"date_field": "2025-10-18"
})
with open("filled_form.pdf", "wb") as f_out:
writer.write(f_out)
from pypdf import PdfMerger, PdfReader, PdfWriter
# Merge
merger = PdfMerger()
for pdf_file in ["file1.pdf", "file2.pdf"]:
merger.append(pdf_file)
merger.write("merged.pdf")
merger.close()
# Split first 5 pages
reader = PdfReader("big.pdf")
for i, page in enumerate(reader.pages[:5]):
writer = PdfWriter()
writer.add_page(page)
with open(f"page{i+1}.pdf", "wb") as out:
writer.write(out)
pdftotext – Extract text: pdftotext -layout input.pdf output.txt.qpdf – Merge/split: qpdf input.pdf --pages . 1-5 -- output.pdf.pdfinfo – View metadata.