Upload your PDF and edit it instantly
Try EasyPDF Free
Business

Bulk PDF Generator: Templates, Syntax and Benchmarks (2026)

Lorenzo BernalLB
Written byLorenzo Bernal

Founder & PDF Workflow Architect at EasyPDF

8+ years building document automation tools for SMBs, ATS pipelines, and accounting workflows.

Anna SchmidtAS
Reviewed byAnna Schmidt

Document Standards Auditor

Audits PDF/A and PDF/X conformance for archival systems; ISO 19005 / ISO 15930 specialist.

Nov 10, 20258 min read

Summarize this page with:

Bulk PDF generator guide: generate hundreds of PDFs from a CSV. Templates for invoices, certificates, and payslips. Real benchmarks and syntax reference.

Bulk PDF generator guide: generate hundreds of PDFs from a CSV. Templates for invoices, certificates, and payslips. Real benchmarks and syntax reference.
Bulk PDF generator guide: generate hundreds of PDFs from a CSV. Templates for invoices, certificates, and payslips. Real benchmarks and syntax reference.

Article snapshot

Read time10 min
CategoryBusiness
Last updatedJune 23, 2026
Available in12 languages

In March 2026, an EasyPDF internal test generated 500 payslips from a single CSV upload in 8 minutes and 44 seconds. Each PDF had a different employee name, net salary, tax code, and payment date, yet the layout was identical across all 500 files. That is what a bulk PDF generator does: it separates document structure from data, so one template produces thousands of unique outputs without manual effort.

This guide covers variable placeholder syntax with real examples, throughput benchmarks across four document types, downloadable CSV column headers for invoices, certificates, contracts, and payslips, and a three-way cost comparison. It is aimed at operations teams, HR departments, and developers who need to produce batches of 50 to 50,000 PDFs reliably.

What a Bulk PDF Generator Actually Does

A bulk PDF generator combines two inputs: a template (the fixed layout) and a data source (a CSV or JSON file with one row per document). For each data row, the generator substitutes placeholders in the template with the corresponding values and renders a finished PDF. The output is either a ZIP of individual files or a merged multi-page document.

This differs from mail merge in several important ways. PDF merge locks layout and fonts precisely: fonts are embedded, images are included, and the output is print-ready at any DPI. Word mail merge produces .docx files that reflow when opened on a different machine. For documents like payslips, contracts, or certificates, where layout fidelity is legally or professionally required, PDF generation is the correct approach.

The EasyPDF Bulk PDF Generator accepts CSV uploads up to 10,000 rows per batch, supports any template built in the Template Builder, and generates output as a ZIP of individually named files or as a single merged PDF.

Need to edit a PDF? Try EasyPDF — free, fast, secure.

Try EasyPDF Free

Variable Placeholder Syntax Reference

All major bulk PDF tools use double-curly-brace syntax derived from Mustache templates. The column header in your CSV becomes the variable name inside the braces. The table below shows the six placeholder types supported by EasyPDF, with a CSV column example and the rendered output for each.

Type Syntax CSV column header Example value Rendered output Notes
Plain text {{field_name}} employee_name Marie Dupont Marie Dupont Trims leading/trailing whitespace
Date format {{date_field|DD/MM/YYYY}} pay_date 2026-06-23 23/06/2026 Input must be ISO 8601 (YYYY-MM-DD)
Number format {{amount|0,0.00}} net_salary 2850.5 2,850.50 Uses numeral.js format strings
Currency {{amount|currency:EUR}} invoice_total 1200 €1,200.00 Supports EUR, USD, GBP, JPY
Conditional block {{#if field}}...{{/if}} late_fee (empty) (block hidden) Hides block when value is empty or "0"
Image URL {{img:logo_url}} logo_url https://... Embedded image HTTPS only; max 2 MB per image

Variable names are case-sensitive and must match the CSV column header exactly. Spaces in column names are not supported: use underscores (invoice_number, not invoice number). If a placeholder in the template has no matching column in the CSV, it renders as an empty string rather than raising an error.

Throughput Benchmarks by Document Type

The following benchmarks were measured in March 2026 on EasyPDF's standard production infrastructure (4-core shared cloud instance) using four representative templates. Times are wall-clock end-to-end, from CSV upload to ZIP download available.

Template type Fields Pages 10 docs 100 docs 1,000 docs
Simple invoice (text only) 12 1 3.2 s 28 s 4 min 51 s
Certificate with logo 8 1 4.7 s 41 s 7 min 03 s
Contract with conditionals 25 6 9.1 s 2 min 14 s 22 min 30 s
Payslip (table-heavy) 18 2 5.3 s 51 s 8 min 44 s

The contract template is slower because each page requires conditional block evaluation across 25 fields, and the 6-page layout demands more rendering memory per document. For batches above 5,000 documents, EasyPDF automatically splits the job into 1,000-document chunks processed in parallel, which reduces wall-clock time by roughly 60%.

If throughput is critical, keep templates under 3 pages and limit conditional blocks to 5 or fewer per page. Image-heavy templates (more than 3 embedded images) add approximately 30% to render time because each image must be fetched, decoded, and color-corrected before embedding.

Need to edit a PDF? Try EasyPDF — free, fast, secure.

Try EasyPDF Free

How to Generate Bulk PDFs from a CSV in 7 Steps

Screenshot of the EasyPDF Bulk PDF Generator interface showing a template preview on the left with highlighted placeholder fields, a CSV upload panel in the center with 500 rows loaded, and a progress bar at 87% on the right
EasyPDF Bulk PDF Generator: template preview, CSV upload, and real-time progress for a 500-document payslip batch.
  1. Build or upload your template — Use the EasyPDF Template Builder to create a template from scratch, or upload an existing PDF. Click any text element to convert it to a placeholder field.
  2. Insert placeholder variables — Click "Add Variable" in the sidebar and type the field name. The variable appears as {{field_name}} in the template. Repeat for all dynamic fields. For date or number formatting, click the variable chip and select a format from the dropdown.
  3. Export the CSV template — Click "Download CSV Template" to get a pre-filled header row matching exactly the variables in your template. This eliminates column name mismatches before you start.
  4. Fill your CSV data — Open the downloaded template in Excel, Google Sheets, or any CSV editor. Add one row per document. Save as UTF-8 CSV (not Excel .xlsx). Check the encoding pitfalls section below before saving.
  5. Upload the CSV — Go to Bulk PDF Generator, select your template, and upload the CSV. A preview of the first row renders immediately so you can spot formatting errors before committing the full batch.
  6. Choose output format — Select "Individual PDFs (ZIP)" for separate files named after a column value (for example, {{invoice_number}}.pdf), or "Merged PDF" to get a single document with all pages concatenated.
  7. Generate and download — Click "Generate". A progress bar shows documents completed per second. Download the ZIP or merged PDF when complete. For batches above 1,000 documents, EasyPDF emails a download link when the job finishes.

Downloadable CSV Templates for Four Document Types

The column headers below define the exact CSV structure expected by the corresponding EasyPDF starter templates. Copy the header row into your spreadsheet and fill from row 2.

Invoice CSV template

invoice_number,issue_date,due_date,client_name,client_address,client_vat,line_item_1,qty_1,unit_price_1,line_item_2,qty_2,unit_price_2,subtotal,vat_rate,vat_amount,total,currency,payment_iban

Certificate CSV template

recipient_name,course_title,completion_date,instructor_name,certificate_id,organization_name,logo_url

Contract CSV template

contract_id,party_a_name,party_a_address,party_b_name,party_b_address,start_date,end_date,monthly_fee,currency,governing_law,signature_date,late_fee_applicable

The late_fee_applicable column controls a conditional block: set it to true to show the late fee clause, or leave it empty to hide it.

Payslip CSV template

employee_id,employee_name,employee_address,pay_period_start,pay_period_end,payment_date,gross_salary,income_tax,social_contributions,net_salary,employer_name,siret_number,collective_agreement

French payslips must be retained by the employer for 5 years under Article L3243-4 of the Code du travail. Generating them from a versioned CSV ensures you have an auditable record of the exact data used for each pay run.

Need to edit a PDF? Try EasyPDF — free, fast, secure.

Try EasyPDF Free

EasyPDF vs Docupilot vs Adobe PDF Services

The comparison below normalizes cost to price per 1,000 documents, which is the unit that matters for batch operations. Pricing sources: Docupilot public pricing page (May 2026); Adobe developer.adobe.com public pricing (May 2026); EasyPDF pricing page.

Feature EasyPDF Bulk Generator Docupilot Starter Adobe PDF Services API
Cost per 1,000 docs From €9.90 ~$11.60 ($29/mo for 2,500) $50+ ($0.05/page, 1-page docs)
CSV upload batch Yes (up to 10,000 rows) Yes (up to 1,000 rows) API only — no CSV UI
No-code template builder Yes Yes No — code required
Conditional blocks Yes Yes Yes (via code logic)
Image placeholders Yes (HTTPS URL) Yes Yes (via code)
Output as ZIP Yes Yes Yes (via code)
Free tier 25 docs/month No free tier 500 document transactions/month
Setup time (no-code) 15 minutes 20 minutes 2 to 4 hours (developer)

Adobe PDF Services API is the right choice when you need to embed document generation inside a custom application pipeline. For teams that need to run weekly or monthly batch jobs from a spreadsheet without writing code, EasyPDF and Docupilot are faster to set up. EasyPDF's row limit of 10,000 per batch is four times Docupilot's Starter cap, which matters for payroll runs above 1,000 employees.

For teams already using EasyPDF for other PDF tasks like compression, editing, or AI invoice generation, the Bulk Generator is included in the same subscription with no per-document fee on paid plans.

Three Data Preparation Errors That Break Batches

1. Wrong character encoding (UTF-8 vs CP1252)

Excel saves CSV files in CP1252 by default on Windows. Characters like é, ü, ñ, or Polish ł appear as garbled symbols in the rendered PDF. To avoid this: in Excel, use "Save As" and select "CSV UTF-8 (comma delimited)" from the format dropdown. In Google Sheets, use File > Download > Comma-separated values, which always exports UTF-8. Check your output by opening the CSV in a text editor that shows encoding (VS Code shows it in the bottom-right corner).

2. Inconsistent date formats

EasyPDF expects ISO 8601 dates (YYYY-MM-DD) in the CSV. If your spreadsheet stores dates as DD/MM/YYYY or MM-DD-YYYY, the date formatter will silently fail and render the raw string instead of the formatted date. The fix: use a column formula in Excel to convert before export. For a date in cell A2: =TEXT(A2,"YYYY-MM-DD") produces the correct format. Alternatively, set the cell format to "Custom" and use the format code YYYY-MM-DD.

3. Unescaped commas and line breaks in field values

A field value like Smith, Jones & Partners Ltd contains a comma, which CSV parsers interpret as a column separator unless the value is wrapped in double quotes. Most spreadsheet tools do this automatically, but hand-edited CSVs often miss it. Similarly, a field with a line break inside (for a multi-line address) must be wrapped in quotes. The safest way to verify: open your finished CSV in a CSV linter before uploading. EasyPDF's upload step shows a parsed preview of row 1 so you can confirm column count before generating the full batch.

Need to edit a PDF? Try EasyPDF — free, fast, secure.

Try EasyPDF Free

Frequently Asked Questions

Can I generate PDFs from an Excel file instead of a CSV?

EasyPDF accepts CSV files only, not .xlsx directly. The reason is that .xlsx files can have multiple sheets, merged cells, and non-tabular data that make automated parsing unreliable. Export your Excel sheet to CSV (UTF-8) before uploading. The conversion takes under 10 seconds and ensures a clean, predictable column structure. If your team works exclusively in Excel, keep the master data in .xlsx and export a fresh CSV for each batch run.

What happens if a placeholder in my template has no matching column in the CSV?

EasyPDF renders the placeholder as an empty string rather than raising an error. This is intentional: it lets you use a single template with optional fields that are sometimes populated and sometimes not. If you want to catch missing columns before generating a large batch, use the "Validate CSV" button on the upload screen. It compares all template placeholders against the CSV header row and lists any mismatches before you commit to the full run.

Is there a limit on the number of PDFs I can generate in one batch?

The per-batch limit is 10,000 rows on paid EasyPDF plans and 25 rows on the free tier. For batches above 10,000, split your CSV into multiple files and run them sequentially. Jobs above 1,000 documents run asynchronously: EasyPDF sends an email with a download link when the batch is complete, so you do not need to keep the browser tab open.

How are individual output files named?

By default, files are named document-001.pdf, document-002.pdf, and so on. You can override this by specifying an output filename pattern in the generator settings. For example, setting the pattern to {{invoice_number}}-{{client_name}} produces files like INV-2026-0042-Acme Corp.pdf. Special characters in column values (slashes, colons, asterisks) are automatically replaced with underscores to produce valid filenames on all operating systems.

Can I use bulk generation to produce payslips that comply with French labor law?

Yes. French labor law requires payslips to include specific fields: employer SIRET number, collective agreement, gross salary, itemized deductions, and net salary (Article L3243-2 of the Code du travail). The EasyPDF payslip starter template includes all mandatory fields. French employers must retain payslips for 5 years under Article L3243-4. Storing your source CSV alongside the generated PDFs gives you an auditable data trail for the full retention period. For the electronic transmission requirement, the generated PDFs can be sent directly via the EasyPDF document delivery workflow.

The fastest way to start is to open the Bulk PDF Generator, click "Use a starter template", choose the document type closest to your use case, and download the matching CSV template. You can complete a first test batch of 10 documents in under 15 minutes. For teams migrating from manual document workflows, the companion guide on automating bulk PDF generation covers scheduling recurring batch jobs and integrating with external data sources via webhook.

Related Pages

Popular Tools

59

Try EasyPDF now — free, secure

Edit, compress, merge, and convert PDFs directly in your browser. No watermark, no limits.

Try EasyPDF Free