Claude Code Plugins

Community-maintained marketplace

Feedback

Instructions and code examples for creating, editing, and designing PDFs programmatically. Use this skill to generate reports, fill forms, or design custom layouts.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name pdf-design
description Instructions and code examples for creating, editing, and designing PDFs programmatically. Use this skill to generate reports, fill forms, or design custom layouts.
license MIT
metadata [object Object]

PDF Creation and Design Manual

Overview

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.

Creating PDFs with ReportLab

Basic Example

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

Multipage Report

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)

Filling PDF Forms with PyPDF

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)

Merging and Splitting PDFs

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)

Design Tips

  • Use consistent margins and spacing.
  • Choose a readable font (e.g., Helvetica or Times New Roman).
  • Use headers and footers for pagination and context.
  • Incorporate your brand colors and logo.
  • For long documents, include a table of contents with hyperlinks.

Command-Line Tools

  • pdftotext – Extract text: pdftotext -layout input.pdf output.txt.
  • qpdf – Merge/split: qpdf input.pdf --pages . 1-5 -- output.pdf.
  • pdfinfo – View metadata.

Additional Resources

  • ReportLab User Guide.
  • PyPDF documentation.
  • Poppler utils man pages.