What does your app need to do with a PDF?
Start with the document your reader needs. Choose how you will create it, keep the right copy and let the right person open it. Treat a signing workflow as its own decision.
Do you need to create, change or display a PDF?
Generate a PDF when your app already has the information. Edit a copy when someone gives you a template with fields or pages to change. Display a PDF when the file already exists and a reader needs to see it.
One invoice can pass through several of these jobs. First your app creates a copy from a sale. Later a customer opens that exact copy in their account. The viewer does not recalculate the invoice.
What should stay the same when an invoice changes?
Keep the app’s invoice record separate from the downloaded file. Decide how to identify the approved copy, then make sure both the download and the preview refer to it.
- Write the expected valuesGive your fictional invoice a reference and two line items. Check the total before generating a PDF.
- Keep the source and output separateSave the layout or blank template separately. When you make another version, confirm the right copy is shown and downloaded.
- Check what the reader seesLook at a short invoice and one that needs another page. Check headings, amounts and readability before using the layout for customer documents.
Compare tools
Scroll the table sideways to read every column.
| Tool | What it doesGenerate, change or show a document. | What you need firstThe data, file or setup your app supplies. | What you can keepThe output and the source material you still need. | What affects costThe license and the work your team takes on. |
|---|---|---|---|---|
| React-pdf renderer | Create a new PDF from React document components and app data. | Build a PDF layout and check page breaks and font coverage. | Keep the finished PDF, source layout and permitted assets. | MIT-licensed library. Supply code, processing and any storage. |
| PDF.js | Display pages from an existing PDF in a browser. | Provide an authorized source file and matching library and worker versions. | Keep the original PDF and an authorized open or download link. | Apache 2.0 library. Supply viewer integration and maintenance. |
| Gotenberg | Convert an existing HTML or supported office document to PDF. | Run a private converter and send the document with its required assets. | Keep the PDF and the original layout and assets. | MIT-licensed service. Budget for hosting and upkeep. |
| Docusign | Route documents to recipients and track the envelope. | Supply the documents, signer roles and signing order. | Keep the final PDF and choose a certificate or archive format. | Check the production plan's envelope allowance and API access. |
| Dropbox Sign | Request signatures and track individual and whole-request states. | Supply the document, fields and signer information. | Keep the signed document and its audit trail. Check how they are delivered. | Compare monthly API request limits, embedding and separate test mode. |
| SignWell | Send documents for signature through the web app or API. | Supply files, recipient roles and signing fields. | Retrieve completed PDF files and check the audit record you need. | Web and API limits differ. Check card and volume terms for the API plan. |
| DocuSeal | Prepare signing templates and collect signatures. | Choose hosted or self-hosted and assign signer fields. | Keep completed PDFs and audit records. Plan your own recovery when self-hosting. | Check web seats and production API charges per completed submission. |
| DocRaptor | Generate a PDF from a web-style template. | Supply HTML, CSS and permitted fonts or assets. | Keep the finished PDF, source template and input values. | Check monthly production volume, test watermark and overage. |
| Adobe PDF Services API | Convert, combine or extract information from PDFs. | Supply files and credentials for a chosen hosted operation. | Keep the source and the PDF or structured result for that operation. | Check Document Transaction units and operation-specific file or page limits. |
| Anvil | Fill fields from app data or send a separate signing packet. | Supply a PDF template and field mapping. Add signer roles for Etch. | Keep the template, map, output and completed signing records as applicable. | Free is UI-based. Check metered production API and separate usage units. |
When do you need a separate signing workflow?
A typed name or a drawn image is a visible mark on the page. If your workflow needs to invite someone to sign, track who has signed and keep a record of the completed document, evaluate that workflow separately.
Write down what evidence you need, who is allowed to see the document and which finished copy everyone should keep. A file that displays a signature image does not by itself tell you how the document was approved.
What should you check before a customer opens a private PDF?
Check who can retrieve the original file as well as who can open the page around it. If the app offers both a preview and a download, both need to respect the same access rules.
If you later test the workflow, verify the app and file store contain only made-up documents and that email, signing and payment connections are off or test-only. If you cannot verify the environment, use the paper exercise.
How can you rehearse the workflow with one fictional invoice?
Use paper to make a blank template and one fictional invoice copy. Leave out any real names, payment information or connected service.
- Choose the next actionDecide whether your task is to create the invoice, fill its Reference field or display the saved copy.
- Trace two readersGive one fictional customer access to the invoice and the other none. Mark which one should be able to preview and download it.
- Record the resultList the source data, template and final copy. If someone also needs to approve the invoice, describe that as a separate step.