Registry

Form WH-347 — programmatic fill compatibility

Payroll (For Contractor's Optional Use) — certified payroll for federally financed construction · US Department of Labor, Wage and Hour Division · OMB expires 2028. Tested 2026-08-07 on the unmodified upstream blank — every number below comes from a recorded run, not from documentation.

Verdict at a glance

ToolVersionResultDetail
pdfops APIhosted, tested 2026-08-07no form fields (flat PDF)error:
pdf-lib1.17.1verified (0/0)0 fields filled in-process
@cantoo/pdf-lib (fork)2.6.5verified (0/0)0 fields filled in-process
pypdf6.15.0text fields verified (0/0)0 text fields written and re-read (text fields only)
pdftk-java3.3.3verified (0/0)0 fields filled via FDF and re-dumped
qpdf --check11.9.0structurally cleanerrors that qpdf cannot detect
poppler render check24.02.0values missing from render0/0 filled text values present in pdftotext output of the pdf-lib-filled file; page-1 raster sha256 29f509d5c983…

File facts

Quirks & limitations

Tested request

The unmodified blank is rejected at parse time, so there is no working direct request to show — see the quirks above for the verified decrypt-first workaround.

Frequently asked

Can I fill the Form WH-347 programmatically?

Not by writing field values — the unmodified blank carries zero AcroForm fields; every page is flat content. All seven tools in the matrix agree (0 fields enumerated everywhere). To produce a completed Form WH-347 you either generate the document, overlay text at coordinates, or add real fields to the blank first — drawing them in the browser at pdfops.dev/tools/make-fillable exports a standard AcroForm version that any filler (including the pdfops API) then handles.