NetSuite work order PDFs: fix fields, bins, and due dates (Advanced PDF/HTML)
Fix NetSuite work order PDFs in Advanced PDF/HTML templates: correct wrong field mappings, reduce extra pages, add due dates, and show bin locations for all item types.
TABLE OF CONTENTS
Primary keyword target: NetSuite PDF template customization (work orders & POs)
If your NetSuite work order PDFs are spilling onto extra pages, showing the wrong field values, or hiding bin locations, you can fix all of it with NetSuite PDF template customization inside an Advanced PDF/HTML template by validating field mappings, tightening table layout, and adding simple fallback logic for inventory vs non-inventory items.
What this post covers
- Fixing a field that is pulling from the wrong source (example: an “Overall Height” field)
- Reducing unnecessary page count by adjusting table layout (column widths, wrapping, padding)
- Adding Due Date visibility on the printed work order
- Showing bin location for both inventory items (native bin) and non-inventory items (custom field) in the same column
- Quick troubleshooting steps when a field “should work” but prints blank
Before you edit: make a safe copy of the template
- Go to Customization → Forms → Advanced PDF/HTML Templates.
- Open the template used by your Work Order print.
- Click Customize (or Edit), then Save As to create a copy.
- Test changes in a sandbox if you have one.
Advanced templates can break rendering if the FreeMarker/HTML syntax is slightly off. Work in small changes and test often.
Step 1: Fix wrong field mapping (example: “Overall Height”)
When a field is “pulling from the wrong field,” it usually means one of these is true:
- The template is referencing the wrong object (for example,
record.itemvs a line-level object).
- The field exists on a related record, but the template is referencing it as if it were on the transaction.
- The template is printing the text label, but you need the internal value (or vice versa).
How to find the right field name
- In the Advanced PDF/HTML editor, use the Field selector panel and insert the field again instead of retyping.
- Compare the inserted token with what is currently in the template.
- If the field is a select list and you need an ID, use
.internalIdin FreeMarker.1
Validate line-level vs header-level fields
Work orders and purchase orders often have both:
- Header fields (top of the transaction)
- Line fields (inside the item list loop)
If the “Overall Height” value is tied to the item, it likely needs to be printed inside the line loop, not as
record.overallheight.Step 2: Reduce page count by tightening the item table
If you are seeing 4 to 6 page work orders from a small number of lines, the cause is almost always:
- Overly wide columns forcing wrapping
- Too much padding/line-height in the item rows
- A field printing multi-line content (like a long description)
Common layout fixes
- Shrink the columns that do not need space
- “Rush” should usually be a short column.
- Quantity columns can be narrow.
- Prevent accidental multi-line wrapping
- For columns like SKU, Bin, or Rush, use a
white-space: nowrap;style on the cell where possible.
- Reduce padding and line-height
- Look for CSS that sets large
paddingorline-heightontdor the row class.
- Make headers compact
- If “Rush” is breaking into two lines, shorten the header label to
Rushand reduce header padding.
Tip: Change one thing at a time and reprint a known “bad” work order to see what actually affects pagination.
Step 3: Add Due Date to the bottom of the Work Order
Many teams want the due date visible even when the paperwork is clipped to a rack.
Where to place it
A simple approach is to add a small “footer” section near the bottom of the template:
- Due Date
- Work Order number
- Optional: Location, Priority
Due date formatting
If you need to format dates, use FreeMarker string formatting. If you run into errors, simplify first by printing the raw field, then add formatting.
For general template tips and troubleshooting, Oracle includes several FreeMarker notes and common error patterns.1
Step 4: Show bin location for inventory and non-inventory items (fallback logic)
A common NetSuite reality:
- Inventory items often have a native bin value that prints fine.
- Non-inventory items may use a custom bin location field instead.
The template can handle this by printing whichever one is populated.
Conceptual logic
- If the native bin value exists, print it.
- Else if the custom bin location field exists, print that.
- Else print a placeholder (like
—).
Example FreeMarker-style fallback (pseudocode)
<#-- inside your item line loop --> <#assign nativeBin = item.bin?if_exists> <#assign customBin = item.custcol_bin_location?if_exists> <#if nativeBin?has_content> ${nativeBin} <#elseif customBin?has_content> ${customBin} <#else> — </#if>
The exact field IDs will differ by account. Use the Field picker to insert your custom column field token, then wrap it in the fallback structure.
Step 5: Troubleshooting checklist when a field prints blank
- Confirm the field has data on the source record.
- Confirm you are referencing the correct level (header vs line).
- If it is a select field, confirm whether you need the display text or
.internalId.1
- Look for conditional logic that might be hiding the output.
- Test with multiple work orders: inventory-heavy, non-inventory-heavy, long descriptions.
Optional next step: a “bin put away” worksheet view
If your QC or receiving team needs bin locations for all items on a received PO in one view, you may be able to solve it with:
- A saved search or report that lists PO lines with item + bin location
- A custom form or print that summarizes bin info for receiving
This can reduce the need to click into each item record during receiving.
Need help cleaning up NetSuite templates without breaking them?
If you want to fix field mappings, reduce page count, and make bin locations reliable across item types, we can help you implement and train your team so updates stay maintainable.
[Book a free consulting call](https://connex.digital/book/website)