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:

  1. Recognize that overlaying text on an existing PDF template is the correct approach from the start (not recreating forms)
  2. Accurately position text without overlapping existing content
  3. Handle Korean PDF forms (common in Korean government/contest workflows) more reliably
  4. 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.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗