Order Printer
Group bundles on invoices, pick lists, and return forms in Shopify's free Order Printer app.
Shopify's Order Printer app has its own templates, separate from the built-in packing slip. They're plain Liquid with access to the same line item properties, so the same grouping technique applies.
Where to edit: Shopify admin → Apps → Order Printer → Templates → pick a template → Edit.
The differences from packing slips
| Packing slip | Order Printer | |
|---|---|---|
| Loop variable | line_items_in_shipment | line_items |
| Quantity field | shipping_quantity | quantity |
line_item.groups | Available | Not available |
| Prices | Not shown | Available (line_item.line_price) |
Because groups isn't available, grouping here relies entirely on the app's _bundle_id property — which is present in both cart line modes, so nothing is lost.
The snippet
Replace the template's {% for line_item in line_items %} loop with this.
Adapting it per template
- Invoice — keep the price column, as above. The bundle's total is the sum of its components, which is what the customer paid.
- Packing slip / delivery note — delete the price column and the
b_totallines; keep the SKU and item count. - Pick list — the component
skuon each child row is the field pickers actually need. Keep the bundle header for context and make the child rows the prominent part. - Return form — treat components as individually returnable, because they are. Show the group header for identification only.
Next
Theme templates — the cart and the customer's order page.