Skip to content

Commit 7b2ccd9

Browse files
committed
README.md update with 1.0.0 highlights
1 parent a6f7189 commit 7b2ccd9

1 file changed

Lines changed: 121 additions & 76 deletions

File tree

README.md

Lines changed: 121 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# PDFixa Core
22

3-
**Deterministic, zero-dependency PDF engine foundation for Java.**
3+
**Deterministic, zero-dependency PDF engine for Java.** \
44
Byte-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.
7758
implementation '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
150195
Apache License 2.0

0 commit comments

Comments
 (0)