ION Factory OS
  • Welcome to ION
  • Features
    • Procedures
      • Steps
        • Content
        • Datagrid
        • Fields
        • Attributes
      • Dependencies
      • Part-Procedure Relationship
      • Attributes
      • Standard Steps
      • Installation Requirements (Beta)
      • Nested Steps and Nested Standard Steps
      • Procedure Best Practices
    • Runs
      • Run Execution Overview
      • Runs And Step States
      • Batching Runs
        • Batching 2.0 Changes
      • Workcenter execution
      • Split Inventory on a Run
      • Redlines
      • Export run data
      • Scheduling runs
      • Time Tracking
      • Attributes
      • Outside Processing
      • Runs Best Practices
    • Parts Library
      • As-built Bill of Materials (aBOM)
        • Editing aBOM build requirements
        • aBOM Beta Changes
          • aBOM actions for developers
      • Inventory
        • Inventory status
        • Inventory splitting
        • Inventory merging
        • Inventory scrapping
        • Kitting
        • Inventory Movement Automations
      • Manufacturing bill of materials (mBOM)
        • mBOM versions
        • Made on Assembly (MOA)
        • Part Substitutes
        • Reference designators
      • Part Attributes
      • Part revision interchangeability
      • Supplier Part Numbers & Purchase Unit Conversions
    • Kitting and Inventory Fulfilment
      • Kit Statuses and Workflows
      • Inventory requests
      • Kitting and runs
      • Fulfilling Multiple Kits
      • Kanban Kitting
    • Purchasing
      • Purchase Orders
        • Types of Purchases
        • Purchase Order Approvals
        • Purchase Order FAQs
        • Supplier Part Numbers & Unit Conversions
        • PO Requirements, Terms, and Quality Clauses
      • Receiving/Inspection
      • Outside Processing
      • Consigned Parts
    • Barcode Labels
      • Templating
        • ION barcode minimum sizes
        • Sample templates
      • Printing
        • Configuring Zebra Browser Print
        • Server Based Barcode Printing (PrintNode)
      • Scanning
        • Scan barcodes from other systems
    • Quality
      • Issues
      • Further Actions - CAPA
      • Issues States, Dispositions, and Resolutions
      • Quality Best Practices
    • Tools
    • Locations
    • Attributes
    • Labels
      • Deleting labels
    • Notifications
    • Search
    • Settings
      • Role based access control
        • Full Glossary of ION Permissions
    • ION Actions
      • ION Actions examples for Quality
      • ION Actions examples for Runs and Procedures
      • ION ACTIONS examples for Supply Chain
  • Analytics
    • Inventory valuation
    • Part impact analysis
    • Users, Roles, Teams
    • Analytics FAQ
    • Data Connector
    • Data Products
  • Plans and Autoplan
    • Autoplan
    • Autoplan glossary
    • Preparing to use Autoplan
    • Clear to build reporting
    • Running Autoplan on a schedule
    • Firm and blocked plan items
    • Location constraints
    • Autoplan suggested suppliers and procedures
    • Reorder point
    • Plan input serial numbers
    • Applying a calendar
    • Plan Reservations
    • Independent schedules
    • Drive demand from kits
    • Drive demand below buy parts configuration
    • Group plan items with the same date
    • Manualy Changing Autoplan Status
  • API
    • How to create an App with ION
    • Access Tokens
    • About GraphQL
    • Interactive API explorer
    • API Keys
    • Examples
      • Notifications
      • Runs
      • Automatically updating fields in runs
      • Parts and Part Revisioning
      • mBOMs
      • Part Inventory and Kitting
      • aBOM (As-built Bill of Materials)
      • Edit time-tracking session data
    • Changelog
    • Webhooks
    • Pagination
  • Automations
    • Auto-checkout of Run Steps
    • Auto-Consumption of Lineside Inventory
    • Automatically Send Purchases to Suppliers
    • Set Close by Run Step on Issue Creation
    • Intent Management / Grade / Tier / Pedigree
      • Data Imprinting
      • ION Actions for Intent
    • Auto-Update mBOM Revision on Part Revision Update
    • Auto-approve part-procedure relationships
    • Purchase Order PDF and Versions
    • Auto Populate PO Line Attributes
    • Imprint Attributes from One Object to Another on a Desired Event
  • Integrations
    • Deploying Integrations and Automations
    • Arena
    • Cofactr
    • Datum
    • Duro
    • NetSuite
      • Purchasing in NetSuite, Receiving in ION
      • Work Order/Assembly Builds
    • Procurable
    • PDF Generator
    • Quickbooks
    • Ramp
    • Silkline Integration
    • Slack
    • Smartsheet
    • SOLIDWORKS
    • Teamcenter
  • Training
    • Standard Operating Procedures
      • Cycle Counting
      • Tool Utilization
    • Guided Flows
    • ION Sandbox
    • Chat Support for ION
  • Troubleshooting
    • Resetting your password
    • Resetting your Multi-Factor Authentication
    • You have no roles... error
  • Changelog
  • Adminstration
    • Security
      • Backups and Security FAQ
      • Single Sign-On (SSO)
        • Okta SAML connection setup
      • Export Control
      • Report Generator Disclaimer
    • Browser and Device Compatibility
    • Authentication
      • My company is new to ION, logging in for the first time.
      • I'm told I'm not authorized to access the application
      • My account has been deactivated
    • Login Page
  • Tickets Portal
Powered by GitBook
On this page
  • Step 1: Start with an Example PDF
  • Step 2: Define the Data Query
  • Step 3: Create the Template and Test
  • Conclusion

Was this helpful?

  1. Integrations

PDF Generator

How to export data from ION in the form of a PDF

PreviousProcurableNextQuickbooks

Last updated 22 days ago

Was this helpful?

We understand how important it is to quickly and securely share information from ION with external partners—whether that’s suppliers, auditors, or regulators. This guide outlines a simple way to export data from ION using a tool we also use internally: .

There are many options available for generating PDFs—tools like DocHub, PDFMonkey, Docmosis, PDFShift, and even Google Sheets can all serve this need. For the purpose of this example, we’ll focus on using Carbone.io due to its flexibility, ease of integrating with structured data, and ability to automate generation of the PDFs due to its accessible API.

Note: This method does not protect ITAR-restricted data. For more information, please refer to our .


Step 1: Start with an Example PDF

Start with an example PDF you already use today—ideally one that includes all the data you want to share in the format your recipients expect. This could be a purchase order, audit log, or build report.


Step 2: Define the Data Query

Using the ION GraphQL Explorer, create the API query you need to retrieve all of the information that appears in your example PDF. Identify a real object in ION—such as a purchase order, run, or quality issue—as a sample to build and test your query against.

Ensure the query returns data in a structured JSON format that matches the fields and structure expected by the template you will create in Step 3. Below is an example of a query and the response.

API Call:

{
  partKit(id:780){
    _updated
    id
    deliveryLocation{
      address
    }
    partKitItems{
      part{
        partNumber
        revision
        description
      }
      quantity
    }
  }
}

JSON Response:

{
  "data": {
    "partKit": {
      "_updated": "2025-05-08T00:33:40.275245",
      "id": 780,
      "deliveryLocation": {
        "address": "600 Wilshire Blvd,\nSuite 1500,\nLos Angeles, CA 90017"
      },
      "partKitItems": [
        {
          "part": {
            "partNumber": "7777-03",
            "revision": "C",
            "description": "Wheel assembly"
          },
          "quantity": 4
        },
        {
          "part": {
            "partNumber": "1111-545-01",
            "revision": "B",
            "description": "Mounting screw"
          },
          "quantity": 8
        },
        {
          "part": {
            "partNumber": "7777-02",
            "revision": "B",
            "description": "Car body"
          },
          "quantity": 1
        },
        {
          "part": {
            "partNumber": "SA",
            "revision": "1",
            "description": "Spoiler Assembly"
          },
          "quantity": 2
        }
      ]
    }
  }
}

Step 3: Create the Template and Test

Use the example PDF from Step 1 as a guide to create a .docx or .odt template file. Your goal is to recreate the layout and structure of the PDF using Carbone's templating syntax.

For each field in your JSON response from Step 2, insert a dynamic placeholder in the template to represent the data. For example, if you're working with a part kit, your template might include placeholders like {data.partKit.id}, or {data.partKit.deliveryLocation.address}. Below is an example of a template we created to generate a packing list.

Once your template is ready, upload it to Carbone.io and pair it with the JSON data to generate the final PDF. You can preview and adjust formatting as needed until the output matches your expectations.

We recommend adding a few dynamic placeholders at a time in order to test and quickly debug if needed.


Conclusion

Let us know if you’d like help getting started or want to set this up as part of an automated workflow.

If you need more information on how to configure complex templates with Carbone.io, we recommend checking out their

Each template created will have an ID and Carbone has an API key that you can use to automatically call it's API and generate these reports. Here is an example of the which enables us to determine if the template is rendering the data correct.

This approach helps you generate clear, professional documents using the latest data in ION, with minimal overhead. It's flexible, supports complex formatting, and can be adapted for a variety of export use cases. You can use the template ID and Carbone API key to setup automated workflows that upload PDFs to ION based on an

Carbone.io
disclaimer
quickstart guide!
Carbone.io studio
event that is triggered.
35KB
Packing List.docx