A 3,000-row table, 79 pages, laid out and written to PDF.
A document layout engine with the same API in Rust, Java, JavaScript, Python and C#. Compose pages from stacks, tables and charts — or design them in Construct — and PDFStreamline handles wrapping, page breaks, fonts and PDF/A, with the same pages in every language.
Billed to Acme Robotics GmbH
| Description | Qty | Amount |
|---|---|---|
| Platform licence — annual | 1 | $4,800.00 |
| Priority support | 12 | $1,440.00 |
| Onboarding workshop | 2 | $900.00 |
Every path produces the same document tree, so a design never gets stuck in one tool. The XML template is the bridge — copy it out of Construct, load it from Rust, Java, JavaScript, Python or C#, and back again. See how →
// Paste XML straight from Construct (Java 15+ text block)… SLTemplate cert = SLTemplates.fromXml(""" <page size="a4" orientation="LANDSCAPE"> <yStack crossAxisAlignment="CENTER" gap="6"> <text fontSize="9" bold="true">CERTIFICATE OF COMPLETION</text> <text fontSize="30" italic="true">{{name}}</text> <text fontColor="#6b7280">{{course}} · {{date}}</text> </yStack> </page>"""); // …or mix it with plain Java Document doc = cert .bind("name", student.fullName()) .bind("course", "Applied Data Science") .bind("date", LocalDate.now()) .build(); doc.save("certificate.pdf");
Applied Data Science · 25 September 2026
Low-level PDF libraries make you place every string at an x and y. PDFStreamline measures, wraps, splits and paginates for you — and ships the components real documents are made of, in every one of its five languages.
XStack, YStack and ZStack with FIT / FILL sizing, main and cross-axis alignment, margins, padding and borders. Content that runs long flows onto the next page on its own, with table headers repeated.
↳ table split across pages · header repeated · nothing clipped
Professional text shaping for every script, bundled font families with glyph fallback, embedding and subsetting, right-to-left layout, rich runs, drop caps and widow/orphan control.
Bar, line, area, pie, scatter, radar, heatmap, treemap, waterfall, funnel, gauge, candlestick, box plot, histogram, Gantt and more — bound to your data and drawn as vectors, not pasted as images.
Emit PDF/A and tagged PDF/UA with alt text in every language, check them with the built-in checkers, or lock a file with AES-256 passwords and permissions.
Sections, table of contents, footnotes, cross-references, internal links, headers and footers with page numbers.
Text fields, checkboxes, radio groups, dropdowns, list boxes and signature fields.
Turn any design into a Template<T> and render a batch to a folder, a ZIP or
memory — in parallel in every language (threads in Java and .NET, worker processes in Python, worker_threads in Node) — with error policies, progress callbacks and a
latency report. Single documents can render asynchronously with progress updates, and the
streaming writer writes pages as they finish, so the output never sits in memory twice.
Diagrams (flowchart, Gantt, org chart, timeline), icons, SVG paths, gradients, pattern backgrounds, shadows, text, logo and icon watermarks, themes and element presets — plus SVG, PNG, JPEG and WebP pages.
Long tables, batches of invoices and hundred-page reports render in a fraction of a second, with nothing else to install — no PDFBox, no headless browser.
A 3,000-row table, 79 pages, laid out and written to PDF.
790 pages. Even 100,000 rows take 2.4 s, with memory staying near 100 MB.
Warm renders of one table document on an Apple Silicon Mac. QuestPDF lays the same rows out on 77 and 770 pages where PDFStreamline uses 79 and 790, so it is a reference, not an identical document. All PDFStreamline figures include the evaluation watermark. Performance details →
Pick the language your project already uses. The classes and methods are the same in each — only the naming follows the language — and a document gets the same line breaks, page breaks and positions everywhere.
One self-contained jar for Linux, macOS and Windows, fonts included — add it to the classpath and go.
java -cp pdfstreamline-1.0.0.jar:. Hello import static com.pdfstreamline.Pdf.*; document() .add(text("Hello").fontSize(28)) .save("hello.pdf");
ES modules for Node 20.16+ and modern browsers, with everything bundled.
npm install @pdfstreamline/core import { Document, Text } from '@pdfstreamline/core'; Document.instance() .add(Text.of('Hello').fontSize(28)) .save('hello.pdf');
A wheel for Linux, macOS and Windows: pip install it and start building documents.
pip install pdfstreamline from pdfstreamline import Document, Text (Document.instance() .add(Text.of("Hello").font_size(28)) .save("hello.pdf"))
A NuGet package for every platform; implicit usings keep files short.
dotnet add package PdfStreamline Document.Instance() .Add(Text.Of("Hello").FontSize(28)) .Save("hello.pdf");
A crate with the full API: layout, text, tables, charts, barcodes and PDF output. Latin fonts are built in; the script-fonts feature adds Arabic, Devanagari, Thai and more.
cargo add pdfstreamline use pdfstreamline::*; Document::new() .add(Text::of("Hello").font_size(28)) .save("hello.pdf")?;
fontSize in Java and JavaScript, font_size in Rust and Python, FontSize in C#.Construct is a drag-and-drop editor, an XML editor and a live preview rendered by the real engine — side by side, always in sync. Every design is an XML template your code loads in Java, JavaScript, Python or C#, and anything your code builds can be pasted back in to edit visually. Three studios, one app: Design, Chart and Code.
| Description | Qty | Amount |
|---|---|---|
| {{description}} | {{qty}} | {{amount}} |
| {{description}} | {{qty}} | {{amount}} |
.slx, then SLTemplates.loadXml(…), bind your data and build().SLTemplates.toXml(element) prints anything your code builds. Paste it in and keep designing.@PdfPreview and watch its pages redraw every time you save in your IDE..slx — even a new design, into a temporary file until you name it.Charts, too. Chart Studio charts cells you paste, a linked CSV or Google Sheet, or your document's data, in 30 chart types — export a PNG, SVG or PDF, or drop it into a document as a live chart. And the For developers menu opens the XML editor, Gen code and Code Studio when you want full control. How Construct and code fit together →
Design a template once, connect a CSV, an Excel file or a Google Sheet, and generate a finished, personalised PDF for every row. Built for operations, HR, schools, events and anyone who has ever mail-merged by hand.
| name | course | score |
|---|---|---|
| Aisha Rahman | Applied Data Science | 96 |
| Lucas Ferreira | Applied Data Science | 88 |
| Mei Tanaka | Applied Data Science | 91 |
| Omar Haddad | Applied Data Science | 84 |
| Sofia Novak | Applied Data Science | 93 |
Applied Data Science
Applied Data Science
Applied Data Science · score 96
There are three common ways to produce PDFs, whatever your stack. Each is good at something — here is where PDFStreamline sits.
| Low-level drawing APIs | HTML → PDF | Report designers | PDFStreamline | |
|---|---|---|---|---|
| Automatic layout & page breaks | ✕ you position everything | ✓ via CSS | ◐ band-based | ✓ stacks, grids, flow |
| Author in code, type-checked | ✓ | ✕ HTML strings | ✕ designer files | ✓ fluent API |
| One API in Rust, Java, JavaScript, Python & C# | ✕ usually one per library | ◐ per-language wrappers | ✕ | ✓ identical layout |
| Visual editor | ✕ | ◐ any HTML tool | ✓ | ✓ Construct · web & desktop |
| Same template in code and editor | ✕ | ◐ | ◐ | ✓ XML or generated code |
| No browser engine in production | ✓ | ✕ often headless Chrome | ✓ | ✓ native library per language |
| Charts & diagrams built in | ✕ | ◐ JS libraries | ✓ | ✓ native vector |
| Non-developers can generate PDFs | ✕ | ✕ | ◐ | ✓ Construct Data Merge |
No. Construct, the visual editor, has a Data Merge mode that lets anyone design a template, connect a spreadsheet and generate PDFs without writing a line of code. Developers get the same template as XML that the library loads in Java, JavaScript, Python or C#.
Rust 1.85+, Java 8 and newer, JavaScript on Node 20.16+ and in modern browsers, Python 3.11+, and C# on .NET 9 — on Linux, macOS and Windows, on x64 and arm64. Fonts and text shaping come with the library; nothing else has to be installed.
Yes. The same document gets the same line breaks, page breaks and positions in every language, and the classes and methods are the same too — only the naming follows each language (fontSize, font_size, FontSize). A template you design in Construct comes out the same from any of them.
No. PDFStreamline lays out and writes the PDF itself, so there is nothing else to install or run: no Apache PDFBox, no iText and no headless browser.
Through XML templates, in both directions. Save a design as an .slx file (or copy any element with ⌘C in Developer mode) and load it with SLTemplates.loadXml(…) or fromXml(…) — load_xml / from_xml in Python, LoadXml / FromXml in C# — then bind your data and build. Going the other way, SLTemplates.toXml(element) prints anything your code builds as XML that you paste or open in Construct. Gen code turns a design into Java, JavaScript, Python or C# source, and Code Studio previews the documents your own code builds, live as you save.
They are the same app, and the web edition is available today. The desktop edition, coming to macOS and Windows, adds native file access — open and save .slx templates on disk, watch them for changes, render entirely offline — and Code Studio, which compiles and runs your own project to preview its documents.
No. In the desktop app everything happens on your computer, and in the browser everything happens inside the tab: your spreadsheet and your pages are never uploaded.
Join the early-access list for the library and Construct, the visual editor for web and desktop.
Launch news and release updates only. No spam.