Articles on: Integrations

How to Generate PDF Documents from Kintone Records (Step by Step, No Code)

Kintone is very good at the part most platforms are bad at. Your team builds the app it actually needs, a quote tracker, an order log, an inspection record, without waiting on a developer.
Then a customer needs the document, and the platform stops. Native Kintone printing hands the on-screen field layout to your browser's print dialog. There is no template system, so there is no letterhead, no line-item grid, no totals block, no barcode. For more than one record, Kintone's own documentation suggests exporting to CSV and printing from Excel.
This tutorial walks through the alternative end to end: connect the PDF Generator API plugin to a Kintone app, design the document in a drag-and-drop editor that already knows your fields, and then generate it three ways, from one record, from a whole list, and automatically when a record changes status. About twenty minutes, and no code at any point.


Before you start

  • A Kintone app with real fields. This walkthrough uses a Sales and Leads app: a lead title, a linked company, contact details, and a subtable of products with unit price and quantity. Any app with structured records works the same way.
  • A PDF Generator API account. Start the free 14 day trial, no credit card. Paid plans start at 8 euro per month.
  • The plugin itself. Download the zip file and get started.
  • App administrator rights on the Kintone app, because plugin settings live behind them.



Step 1: Import the plugin into your Kintone environment


Most Kintone plugins come from the Cybozu marketplace. This one is not listed there yet, so it arrives as a zip file and you import it once into your Kintone environment. Everything after that is standard Kintone.


This part needs Kintone administration rights, and it is done once for the whole environment rather than once per app.


  1. Click the gear icon at the top of Kintone and choose Kintone Administration.
  2. Under Other, click Plug-ins.
  3. Click Import.
  4. Click Browse, pick the plugin zip, then click Import.


The plugin is in when PDF Generator API — Document Output appears in the list of imported plug-ins. An imported plugin is allowed on every app in the environment by default, so there is nothing else to set on this screen, and nothing has changed inside any app yet. Switching it on for a specific app is Step 2.


One thing worth knowing while you are here: with no marketplace listing there is no automatic update either. When we send you a newer version, import the new zip exactly the way you just did and it updates the existing entry rather than adding a second one.




Step 2: Add the plugin to your app

Open your app, then App settings > Plug-ins, and add PDF Generator API — Document Output. Once it is enabled the row describes exactly what it does: it generates documents from Kintone records using your templates, attaches them to the record when you have set an attachment field, downloads them when you have not, and supports batch output.




Click the gear in the Settings column to open the plugin's own settings. Everything in Steps 3, 4 and 8 happens on that screen. It has two tabs, General and Automation, and a single Save that covers both.


Step 3: Connect your PDF Generator API workspace

The Connection block at the top of the General tab needs three things.

  • Credentials. Paste the API key and secret from your PDF Generator API account settings. They are stored in Kintone's plugin proxy configuration rather than in ordinary app settings, which means the secret is never readable from a record screen and never appears in the browser for a regular user. The settings screen only ever shows you the last four characters back, along with when the connection was established and when it expires.
  • Workspace identifier. The email address of the workspace whose templates this app should use.
  • API base URL. Optional. Leave it on the default unless you are on a dedicated deployment with its own hostname.







Click Load templates. A confirmation tells you how many came back, for example "17 templates were loaded". If nothing loads, the key and secret are almost always the cause, so re-copy both from the dashboard rather than retyping them.
Two buttons sit under the credentials and are worth knowing about before you need them: Replace credentials swaps in a different key, and Renew the connection extends the expiry without changing the key.


Step 4: Decide where documents go

Still on the General tab, the Document block decides what happens to every PDF this app produces. These are the settings people wish they had understood first, so it is worth two minutes now.

Setting

What to do with it

Default template

The template the app reaches for unless told otherwise

Template choice in record view

"Let users pick a template on each record (default preselected)" gives everyone a dropdown. "Always use the default template" locks it down. Pick the second one if you have a single standard document and do not want anyone choosing wrongly

Attachment field

The important one. Choose an attachment field and every generated document is attached to it, so the PDF lives on the record forever. Leave it on none and documents download to the browser instead and are not kept anywhere

Attachment mode

"Append — keep previous documents" keeps a history on the record. "Replace — overwrite the field with the latest document" keeps only the newest. Append is the safer default when the document is something you sent a customer

Generation log field

Point this at a multi-line text field and you get a free audit trail, one line per document with the time, the record revision it came from, the template name and identifier, and what produced it. It covers the button, batch runs and automation alike, and keeps the most recent 200 lines. The field has to be editable by the people who generate

File name pattern

{fieldCode} is replaced with that record's value, so invoice-{record_no} produces invoice-1043.pdf. Left blank, files come out as <template name>-<record id>

Button label

The text on the record button. Default is "Generate PDF". Change it to "Print quote" or "Create invoice" if that is what your team actually calls it

Batch generation limit

How many records can be selected at once in the list view, anywhere from 1 to 200





The attachment field choice has a second effect that surprises people in Step 7, so keep it in mind: with an attachment field set, a batch run gives every record its own document. With none set, a batch run downloads one combined PDF.
Save.

Step 5: Design the document

This is the step that decides whether any of the rest matters, and it is the step where Kintone document tools usually hand you a fixed background image and ask you to position text on top of it. This one does not.
Open any record in your app. Above it you will see a template picker and a Generate PDF button with a caret next to it. Click the caret and choose Edit template, or Create template if you are starting from scratch.
A short dialog asks for the Output type:

  • One document per record. One record is sent as sample data, so you place fields directly on the layout. This is what you want for a quote, an invoice or a delivery slip.
  • One document listing all records. Records arrive nested under an items key, so you place fields inside a table component that repeats once per record. This is what you want for a summary or a report.


One detail from that dialog that saves confusion later: the first record on the current page is sent as sample data, and it populates the editor's field panel only. It is never saved into the template.
Click Open editor.




Look at the left panel. It is already full of your data. Not placeholder names, not a schema you have to map, the actual values from the record you were just looking at: the company name, the contact, the status, the record number, the line items. There is no mapping step in this tutorial because there is no mapping step in the product. You opened the editor from a record, so the editor knows the record.
Switch that panel to Components and you get the building blocks, twenty of them.



Text, Number and Date for values. Table for anything that repeats, which is how your subtable of products becomes a line-item grid that grows with the order. Barcode and QR code, with 38 formats behind them, for labels, packing slips and asset tags. Chart for a summary document. Header and Footer for the parts that repeat on every page, Page number for the numbering. Image for your logo. Plus Container, Rectangle, vertical and horizontal lines, Symbol, Checkbox, Radio and Signature.
Building the document is what it looks like: drag a component onto the page, drop a data field into it, set the font and the colour. Want the logo bigger, the totals block moved, the tax line in bold? Drag it. That is the entire loop, and it is the reason a change to your invoice layout does not become a developer ticket.
Two things in the editor worth finding early:

  • The Chat panel on the right is an AI assistant that will build or change the template from a plain description. "Move the totals block to the right and make the invoice number bold" is a valid instruction. It uses your monthly credits, so it is a shortcut rather than the main road, but it is a fast way to get a first draft on the page.
  • Conditional formatting, under Properties, changes how a component looks based on the data. An overdue invoice can print its total in red without you building two templates.

Save the template when it looks right.

Step 6: Generate your first PDF

Back on the record. Pick your template in the picker, click Generate PDF.


A few seconds later the document appears in the attachment field you chose in Step 4, named by your file name pattern. Open it. That is a Kintone record turned into a document you can send a customer, and nothing was re-keyed into Excel to get there.
Look at the generation log field underneath while you are here. It has a new line, something like:

2026-08-19T08:42:22.858Z  rev 11  Construction Invoice (Teal/Yellow) (1660868)
Generated from the record

Time, record revision, template, and cause. Every document from now on adds one.
The caret next to the button holds three more things you will want eventually:



  • Import PDF turns an existing PDF into a template, which is the fastest route if you already have the document your company uses
  • Download raw JSON hands you the exact payload the template receives from this record. When a field comes out blank and you cannot see why, this answers it in one click
  • Run automation now fires your automation rules against this record on demand, which is how you test the rules you are about to build in Step 8

Step 7: Generate a whole list at once

Go to any list view. The same toolbar is there, with Generate documents instead.


Choose a template, then the output type, and this is where the two modes genuinely differ:

  • One document per record. Every selected record produces its own document, attached to that record. This is your Monday morning run of forty invoices.
  • One document listing all records. The selected records go over as table data and one document comes back with a row per record. It downloads rather than attaching, because a document about many records has no single record to attach it to. This is your summary report.

Tick the records you want, or Select all, up to the batch limit you set in Step 4.
This is the single thing native Kintone printing cannot do at all, and it is usually the reason someone went looking for a plugin in the first place.

Step 8: Make it happen without anyone clicking

Open the plugin settings again and switch to the Automation tab.


Automation rules generate documents on record events. Tick Enable automation rules, then + Add rule and give it a name you will still understand in six months.
Before you build one, one honest limitation. These rules run inside the browser session of the person whose action triggered them. If that user closes the tab before the page finishes reloading, the rule does not run. So this is event-driven generation attached to real user activity, not an unattended overnight job. Plan around it: it is excellent for "the moment a rep marks this Won, produce the order confirmation", and it is not the tool for "generate every invoice at 3am".
A rule has four parts.


When. Four triggers: a status transition in Process Management, a record is created, a record is edited, or created or edited. Choose the status transition and two more fields appear: which action button was pressed (or any), and which resulting status the record lands in. "When a lead moves into PO Confirmed" is exactly that.
Conditions. Optional, and the reason a rule stays sane. Set "Only if ALL of these are true" or "Only if ANY of these is true", then add rows. Each row is a field from your app, an operator, and a value, with eleven operators to pick from: is, is not, contains, does not contain, greater than, greater than or equal to, less than, less than or equal to, is one of (comma-separated), is empty, and is not empty.


So "only when the total is above 10,000" or "only when the country is one of DE, AT, CH" is two clicks and a value. With no conditions, the rule runs for every matching event.
Template. Chosen per rule and independent of the app-wide default, which is the part people miss. One app can produce a quote when the status goes to Initial Quotation and an order confirmation when it goes to PO Confirmed, from the same records, with no duplication anywhere.
Then. Two delivery actions, and you can use either or both.

  • Store the document on the record. Pick the attachment field and whether to append or replace.
  • POST the document to an external URL. Give it a URL, where {fieldCode} is replaced by the record's value and URL-encoded. Choose how the document travels: base64 in the request body, a file link only (which needs the store action switched on, since there has to be a stored file to link to), or no document at all when the receiving system only wants the record data. Authentication is handled properly: a bearer token field, plus custom headers where each header can be flagged Secret, which moves it into the plugin proxy configuration where only app administrators can read it and out of the rule itself. A header named Authorization overrides the bearer token.

That second action is what turns this from a document plugin into a piece of your pipeline. The moment a deal is won, the confirmation is generated, attached to the record, and pushed to your ERP, with no automation platform in between.
Save, then go to a record and use Run automation now from the caret menu to test the rule immediately rather than staging a real status change.

When something looks wrong

Three tools, in the order you should reach for them:

  1. The generation log field. Did the document generate at all, and what caused it? Every run leaves a line.
  2. Download raw JSON on the record. Is the field actually reaching the template? A blank spot on a PDF is nearly always a field that arrived empty, and this shows you in one click.
  3. Run automation now. Rule not firing? Run it by hand. If it works here but not on a real status change, your trigger or your conditions are too narrow.

Wrapping up

That is the whole loop: connect, decide where documents go, design, then generate from a record, from a list, or automatically. Your data never leaves Kintone to get formatted, and the next time someone wants the totals block moved it is a drag in the editor, not a ticket.
If you want a guided version with your own documents, book a call and bring a real quote or invoice, or start the free 14 day trial first. The Kintone integration page has the full feature rundown, and if you are still comparing options, our guide to document generators for Kintone covers the alternatives honestly.

Updated on: 20/08/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!