PDF form filling: poor quality and excessive iterations needed
Resolved 💬 4 comments Opened Mar 25, 2026 by yonghwan1106 Closed Apr 23, 2026
Summary
When asked to fill in Korean government PDF forms (공모전 접수 서류), Claude Code required 10+ iterations to produce acceptable results, and the final output still had issues.
Task Description
Fill in 4 PDF application forms for a Korean government contest (제5회 AI·공공데이터 활용 및 창업 경진대회) with personal information, checkboxes, stamps, and dates.
Problems Encountered
1. Initial approach (fpdf2) - Recreating forms from scratch
- Table column alignment was consistently broken across rows
- Required 5+ rounds of fixing right-edge alignment, address overflow, column width mismatches
- Final result still didn't match the original form layout
2. Second approach (PyMuPDF overlay) - Better but still problematic
- White rectangle overlay didn't actually remove underlying text (placeholder text remained)
- Had to switch to redaction-based approach
- Font registration was lost after applying redactions (required debugging)
- Overlaid text ("선정기관") overlapped with existing form text due to incorrect coordinate positioning
- Output files were 14MB each due to full font embedding
Expected Behavior
Claude Code should be able to:
- Recognize that overlaying text on an existing PDF template is the correct approach from the start (not recreating forms)
- Accurately position text without overlapping existing content
- Handle Korean PDF forms (common in Korean government/contest workflows) more reliably
- Produce reasonable file sizes
Environment
- Windows 10, Python 3.11
- Libraries available: PyMuPDF 1.26.7, fpdf2 2.8.5, reportlab 4.4.5
- Model: Claude Opus 4.6
Suggestion
PDF form filling is a common real-world task. Consider:
- A built-in skill or workflow for PDF form filling that defaults to overlay/redaction approach
- Better coordinate estimation when placing text on existing PDFs
- Awareness of text overlap detection before finalizing output
---
Submitted on behalf of user by Claude Code.
This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗