PDF Generation
October 15, 2025 •
I've added a PDF generation feature to the blog that allows readers to download
any post as a formatted PDF document. The system uses AWS Lambda with a Python
function that converts markdown content to PDF using the ReportLab library. When
someone clicks the Download PDF
button on a post, their browser sends the post
content to an API Gateway endpoint, which triggers the Lambda function to
generate and return a properly formatted PDF file. I chose this serverless
approach because it keeps costs minimal (typically under $0.02 per month for a
personal blog) while providing real-time generation without pre-building PDFs
for every post during the blog build process.
The implementation took some iteration to get right. I initially tried using
WeasyPrint for PDF generation, but quickly discovered it requires system
libraries that aren't available in the Lambda environment, so I switched to
ReportLab which is pure Python. The design of the button also evolved through
user feedback — starting with a prominent button with an emoji icon, then refining
it down to a subtle text link Download PDF
that appears inline with the post
date, using a minimalist gray color that turns blue on hover. I also had to work
through some technical challenges with CORS configuration and binary media type
handling in API Gateway to ensure the PDFs download correctly as binary files
rather than corrupted base64 text. The end result is a system that generates
2-10 KB PDFs in about 200-500 milliseconds, with proper formatting for headers,
lists, code blocks, and other markdown elements.
Recent Entries
- Agentic Context Engineering October 11, 2025
- Guardrail October 04, 2025
- Search is here September 29, 2025