11# PDFixa Core
22
3- ** Deterministic, zero-dependency PDF engine foundation for Java.**
3+ ** Deterministic, zero-dependency PDF engine for Java.** \
44Byte-for-byte reproducible output. No bloat. No surprises.
55
66[ ![ Java 17+] ( https://img.shields.io/badge/Java-17+-blue?logo=openjdk&logoColor=white )] ( # )
@@ -10,56 +10,37 @@ Byte-for-byte reproducible output. No bloat. No surprises.
1010[ ![ Deterministic] ( https://img.shields.io/badge/Output-Deterministic-success )] ( # )
1111[ ![ Maven Central] ( https://img.shields.io/maven-central/v/io.offixa/pdfixa-core?label=Maven%20Central&color=blue )] ( https://central.sonatype.com/artifact/io.offixa/pdfixa-core )
1212
13- ---
14-
15- ## 1.0.0 Highlights
16-
17- - ** Stable release** — production-ready engine foundation.
18- - ** API frozen** for the 1.x line; public API compatibility is guaranteed.
19- - ** Deterministic by design** — identical bytes on every run, every platform.
20- - ** Unicode-aware** — UTF-16 literal support in Core; full Unicode rendering available in Pro.
21- - ** Zero dependencies, JPMS modular** — drop-in for modular and non-modular projects alike.
22-
23- ---
24-
25- ## Why PDFixa?
26-
27- PDFixa Core is a deterministic PDF engine built for predictability, reproducibility and clean architecture.
28- Every byte of output is fully determined by your input — no timestamps, no UUIDs, no ambient state.
29- The same code always produces the same file, bit for bit.
30-
31- ### Key Guarantees
32-
33- - ** Byte-for-byte deterministic output** — object numbers, xref offsets and ` /ID ` are stable across runs, platforms and JVM versions.
34- - Zero runtime dependencies (pure JDK 17+)
35- - JPMS modular design (` io.offixa.pdfixa.core ` )
36- - No hidden timestamps or UUID pollution
37- - Strict lifecycle (allocate → write → seal)
13+ If you find PDFixa useful, consider ⭐ starring the repository.
3814
3915---
16+ ## Quick Start
4017
41- ## API Stability
18+ Generate a deterministic PDF in a few lines:
4219
43- PDFixa Core 1.0.0 marks the beginning of the stable 1.x line.
44- All public API surfaces are frozen: ** source-compatible changes only ** for future 1.x releases.
45- You can depend on ` pdfixa-core ` in production without risk of breaking upgrades within the 1.x series.
20+ ``` java
21+ PdfDocument doc = new PdfDocument ();
22+ PdfPage page = doc . addPage();
4623
47- ---
24+ page. drawTextBox(
25+ 72 , 760 , 468 , 16 ,
26+ " Helvetica-Bold" , 18 ,
27+ " Hello from PDFixa!"
28+ );
4829
49- ## Determinism Example
30+ try (var out = new FileOutputStream (" hello.pdf" )) {
31+ doc. save(out);
32+ }
33+ ```
5034
51- ``` java
52- byte [] first = generate();
53- byte [] second = generate();
35+ Output:
5436
55- assert Arrays . equals(first, second); // Always true
5637```
57-
58- Object numbers, xref offsets and ` /ID ` remain identical across runs.
38+ hello.pdf
39+ ```
5940
6041---
6142
62- ## Quick Start
43+ ## Installation
6344
6445### Maven
6546
@@ -77,74 +58,138 @@ Object numbers, xref offsets and `/ID` remain identical across runs.
7758implementation 'io.offixa:pdfixa-core:1.0.0'
7859```
7960
80- ### Example
61+ ---
8162
82- ``` java
83- PdfDocument doc = new PdfDocument ();
84- PdfPage page = doc. addPage();
63+ ## 1.0.0 Highlights
8564
86- page. drawTextBox(
87- 72 , 760 , 468 , 16 ,
88- " Helvetica-Bold" , 18 ,
89- " Hello from PDFixa Core!"
90- );
65+ * ** Stable release** — production-ready engine foundation.
66+ * ** API frozen** for the 1.x line.
67+ * ** Deterministic by design** — identical bytes on every run.
68+ * ** Unicode-aware API** — UTF-16 literal support.
69+ * ** Zero dependencies** — pure Java 17+.
70+ * ** JPMS modular design** .
9171
92- try (var out = new FileOutputStream (" hello.pdf" )) {
93- doc. save(out);
94- }
72+ ---
73+
74+ ## Why PDFixa?
75+
76+ PDFixa Core is a deterministic PDF engine built for ** predictability, reproducibility and clean architecture** .
77+
78+ Every byte of output is determined entirely by your input.
79+
80+ No timestamps.
81+ No UUIDs.
82+ No hidden runtime state.
83+
84+ The same code always produces the same file — ** bit for bit** .
85+
86+ ---
87+
88+ ## Determinism Example
89+
90+ ``` java
91+ byte [] first = generate();
92+ byte [] second = generate();
93+
94+ assert Arrays . equals(first, second); // always true
9595```
9696
97+ Object numbers, cross-reference offsets and document ` /ID ` remain identical across runs.
98+
99+ This makes PDFixa ideal for:
100+
101+ * reproducible builds
102+ * document pipelines
103+ * deterministic testing
104+ * compliance workflows
105+
97106---
98107
99108## Features
100109
101110### Text
102111
103- - Base-14 fonts
104- - Word wrapping
105- - drawTextBox API
106- - Unicode-aware API (UTF-16 literal support )
112+ * Base-14 fonts
113+ * Word wrapping
114+ * ` drawTextBox ` API
115+ * Unicode-aware API (UTF-16 literals )
107116
108117### Graphics
109118
110- - Paths and shapes
111- - Fill & stroke
112- - RGB & grayscale
119+ * Paths and shapes
120+ * Fill & stroke
121+ * RGB and grayscale colors
113122
114123### Images
115124
116- - JPEG embedding
117- - PNG (8-bit RGB)
125+ * JPEG embedding
126+ * PNG (8-bit RGB)
118127
119128### Document
120129
121- - Standard page sizes
122- - Metadata builder
123- - SHA-256 deterministic ` /ID `
124- - PDF 1.7 compliant
130+ * Standard page sizes
131+ * Metadata builder
132+ * Deterministic SHA-256 ` /ID `
133+ * PDF 1.7 compliant output
134+
135+ ---
136+
137+ ## Examples
138+
139+ See full working examples:\
140+ 👉 https://github.com/offixa/pdfixa-examples
141+
142+ Example projects include:
143+ * invoice-generator
144+ * report-generator
145+ * multi-language-pdf
146+ * batch-pdf
147+ * images-demo
148+
149+ Each example contains runnable code and generated PDFs.
125150
126151---
127152
128153## Core vs Pro
129154
130- | Capability | Core | Pro |
131- | : ---| : ---: | : ---: |
132- | Deterministic output | Yes | Yes |
133- | Zero dependencies | Yes | Yes |
134- | Unicode-aware API (UTF-16 literals) | Yes | Yes |
135- | Full Unicode rendering (CIDFont, ToUnicode) | — | Yes |
136- | Font embedding | — | Yes |
137- | Font subsetting | — | Yes |
138- | Advanced layout engine | — | Yes |
155+ | Capability | Core | Pro |
156+ | ------------------------------------------- | ---- | --- |
157+ | Deterministic output | ✅ | ✅ |
158+ | Zero dependencies | ✅ | ✅ |
159+ | Unicode-aware API | ✅ | ✅ |
160+ | Full Unicode rendering (CIDFont, ToUnicode) | — | ✅ |
161+ | Font embedding | — | ✅ |
162+ | Font subsetting | — | ✅ |
163+ | Advanced layout engine | — | ✅ |
139164
140- > ** [ Get PDFixa Pro → offixa.io] ( https://offixa.io ) **
165+ Learn more about ** PDFixa Pro** :
166+
167+ https://offixa.io/pdfixa-pro
168+
169+ ---
170+
171+ ## Documentation
172+
173+ Full documentation:
174+
175+ https://offixa.io/pdfixa
176+
177+ Documentation sections include:
178+
179+ * Getting Started
180+ * Pages
181+ * Fonts
182+ * Images
183+ * Metadata
184+ * Deterministic output
141185
142186---
143187
144188## Requirements
145189
146- Java 17+
190+ Java ** 17+**
147191
148- ## License
192+ ---
149193
194+ ## License
150195Apache License 2.0
0 commit comments