Skip to main content
All posts
purchase orders work orders menus templates PDF API

Purchase Order, Work Order and Menu PDFs from JSON

Generate purchase orders for suppliers, field service reports with signatures, and restaurant menus as PDFs from your data, with totals calculated.

PodPDF Team September 18, 2026 5 min read

Not every business document is an invoice. Before the invoice there is the purchase order you send to a supplier; out in the field there is the work order a technician fills in and the customer signs; on the restaurant table there is the menu that changes with the season. Each is a document your systems already have the data for.

The Business documents group in the PodPDF template library covers all three. Send JSON, get a PDF.

A purchase order generated from the PodPDF template

Purchase Orders

The purchase order has your company details, the PO number, order date, required delivery date and payment terms, the vendor and ship to addresses side by side, an items table with SKU, quantity and unit cost, totals with tax and shipping, notes for the supplier, and an Authorised by signature line. The footer asks the supplier to quote the PO number on every invoice and delivery note.

curl -X POST https://api.podpdf.com/templates/YOUR_TEMPLATE_ID/render \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -o PO-7781.pdf \
  -d '{
    "data": {
      "buyer": { "name": "Corner Coffee Co.", "address": "88 Elm Street\nBoulder, CO 80302" },
      "po_number": "PO-7781",
      "order_date": "2026-09-18",
      "delivery_date": "2026-09-29",
      "payment_terms": "Net 30",
      "vendor": { "name": "Mountain Roasters Supply", "address": "2100 Industrial Way\nDenver, CO 80216" },
      "ship_to": "Corner Coffee Co.\nAttn: Sam\n88 Elm Street\nBoulder, CO 80302",
      "items": [
        { "sku": "MRS-ETH-5", "description": "Ethiopia Yirgacheffe, whole bean, 5 lb", "quantity": 6, "unit_cost": 58 },
        { "sku": "CUP-12-1K", "description": "Compostable cups 12 oz, case of 1,000", "quantity": 2, "unit_cost": 86 }
      ],
      "shipping": 35,
      "approved_by": "Olivia Grant"
    }
  }'

Each line is quantity × unit_cost; the template adds them up, applies tax_rate if you send one, adds shipping and prints the Order total. Lines with zero tax or shipping are hidden, so a tax-exempt order doesn’t show “Tax $0.00”.

Where POs come from: an approval in your procurement tool, a reorder point in your inventory system, or a form your team fills in. Wire the approval step to the render call and the supplier gets the PDF the moment the order is approved. When the goods arrive, the supplier’s delivery note and invoice can quote the same PO number.

Service Reports and Work Orders

A field service report with parts, labour and signatures

The service report records a job: the job number and date, the customer and site, the equipment and serial number, the reported problem, the work performed, a parts-and-labour table, totals, and two signature lines — the technician’s, and the customer’s confirming the work was completed.

FieldWhat goes in it
job_number, service_dateFrom your job scheduling system
customer.name, customer.addressThe site where the work was done
equipment, serial_numberWhat was serviced
problem, work_performedFree text, line breaks kept
linesParts and labour: description, quantity, unit_price
technicianPrinted under the technician’s signature line

Labour goes in the same table as parts — "Labour (hours)" with quantity: 1.5 and the hourly rate — so the total covers both. With no billable lines, the table reads “No charge”.

Field teams often fill the job in on a tablet or a form app; send the submission to the render endpoint and email the report to the customer before the technician has left the car park. Print it instead if your customers sign on paper.

Restaurant Menus

A restaurant menu with starters, mains and desserts

The menu template has three sections — starters, mains and desserts — each a list of dishes with name, description and price, plus an allergen note and a QR code linking to your online menu. The tables have no column headings, so they read like a menu rather than a spreadsheet.

{
  "data": {
    "restaurant": "The Canal House",
    "tagline": "Seasonal British cooking · Leeds",
    "mains": [
      {
        "name": "Braised beef shin",
        "description": "Horseradish mash, glazed carrots, red wine jus",
        "price": 21
      },
      {
        "name": "Wild mushroom risotto (v)",
        "description": "Aged parmesan, truffle oil",
        "price": 16
      }
    ],
    "allergen_note": "Please tell your server about any allergies.",
    "menu_url": "https://canalhouse.example/menu"
  }
}

Keep the menu in a spreadsheet, a POS or a CMS and print a fresh copy whenever a dish or price changes — no designer needed for a daily specials sheet. Prices are formatted in the template’s currency. Only mains is required: a section you send no dishes for keeps its heading, so for a lunch menu without desserts, delete that section in the builder or duplicate the template.

Use Cases

  • Procurement: purchase orders from approvals, reorder points or a purchase request form
  • Wholesale and distribution: POs to suppliers with SKUs, and delivery notes back
  • HVAC, plumbing, electrical and IT support: work orders and service reports with customer sign-off
  • Property maintenance: job sheets per visit, sent to the landlord and tenant
  • Restaurants, cafés and bars: menus, specials sheets and event menus
  • Caterers: a menu per event with the client’s name in the tagline

Pricing

Each document is one PDF at $0.01. Long purchase orders flow onto more pages with the table header repeated, up to 25 pages per PDF.

Get Started

purchase orders work orders menus templates PDF API
Back to blog

PodPDF is built by XAD Labs, which builds custom PDF processing pipelines at scale.

Start generating PDFs today

$0.005 per PDF on a monthly plan, or $0.01 from one-off credit packs.