GraphCompose 1.8 banner with native gradient bar charts, rendered by the engine itself

GraphCompose 1.8: Documents That Can Draw

For most of its life, GraphCompose could lay out text and structure very well, and draw very little. It produced invoices, reports, CVs, and proposals — documents that are mostly typography, spacing, and tables. That was the point. But real business documents are not only words. They have a revenue chart, a sparkline next to a KPI, a logo, a divider shape, a coloured panel with a soft gradient. Up to now, every one of those meant rasterizing an image somewhere else and pasting it in. ...

19 June 2026 · 7 min · Artem Demchyshyn
A developer connecting layout fragments into finished document pages

What Drove Me to Build GraphCompose

It started with a simple idea: I wanted to create my own CV in pure Java. No big framework. No designer tool. No attempt to overengineer everything before I even had one page. Just Java, PDFBox, and the confidence every developer has right before a supposedly small task becomes a real project. At first I thought: how hard can it be? Very quickly I found myself inside the classic PDF generation loop: ...

14 June 2026 · 9 min · Artem Demchyshyn
A developer looking at layered document layout plans

Lessons from Building a Java PDF Engine

Building a PDF engine in Java is a useful way to meet a lot of hidden complexity at once. Text measurement, pagination, styling, rendering order, reusable components, API design, testing, and performance all become visible very quickly. This is not a tutorial about drawing text into a PDF. It is a reflection on what I learned while building the layout engine behind GraphCompose: the hard part is rarely one isolated algorithm. The hard part is making many small rules work together until the final document feels reliable. ...

14 June 2026 · 7 min · Artem Demchyshyn