Releases: RikoAppDev/compose-pdf
v0.7.0
Color emoji support.
render(regular, bold, emoji) draws emoji as inline color bitmaps pulled from an Apple sbix or Google CBLC/CBDT color-emoji font and embedded as image XObjects — the "phone" emoji look, with selectable text around them.
- Single–code-point emoji. ZWJ sequences and skin-tone modifiers render their base emoji (joiner/modifier dropped); color vector fonts (
COLR/CPAL, e.g. Segoe UI Emoji) are not used. - Opt-in: omitting the emoji font keeps output byte-for-byte identical, and the cross-platform golden test still passes.
- The on-screen
@Previewbridge renders emoji as text (.notdef); color emoji live in the exported PDF only.
Includes everything from 0.6.0 (the published compose-pdf-preview artifact).
v0.6.0
Publish the design-time @Preview bridge as its own Maven Central artifact.
io.github.rikoappdev:compose-pdf-preview:0.6.0— render apdfDocument { … }spec live on a ComposeCanvas(Android Studio / Compose Desktop@Preview), reusing the engine's computed layout.- CI now also runs
:composepdf-preview:jvmTest(headless Compose Desktop screenshot).
v0.5.0
Universal vector image import — SVG + Android VectorDrawable → native PDF vector paths.
New DSL: vector(bytes, width, height, fit) (auto-detects SVG vs VectorDrawable).
- Full SVG/VD path grammar (M L H V C S Q T A Z, abs+rel); quadratics & elliptical arcs → cubic beziers
- Basic shapes (rect/circle/ellipse/line/polyline/polygon),
<group>/transform, inherited paint - nonzero & even-odd fill, stroke, per-element opacity;
currentColor+ full CSS named-color set - Colors: #AARRGGBB (VectorDrawable) and #RRGGBB[AA]/rgb()/named (SVG)
- Emitted as a reusable Form XObject (a logo repeated in a header costs one object)
- Pure-Kotlin, dependency-free (no XML library); deterministic output
- Hardened against malformed input (no parser hangs); verified via PDFBox rasterization
Deferred: gradients, patterns, , clipPath, filters, CSS classes.
v0.4.1
Hardening release — decoder robustness against malformed/edge input. Valid-data output is byte-identical to 0.4.0 (golden unchanged).
- inflate: range-check distance symbol, validate stored-block NLEN, overflow-safe buffer sizing
- png: require in-range palette index, reject overflow-sized dimensions
- jpeg: accept only baseline/progressive SOF (reject lossless/arithmetic), bounds-check SOF read
- font: guard numberOfHMetrics == 0
- dsl: require photoGrid perRow >= 1; clamp oversized image height to the page
v0.4.0
PNG image support: image() accepts PNG (pure-Kotlin decode → /FlateDecode + /SMask transparency) alongside JPEG. JPEG path unchanged.
v0.3.1
Publish via the Central Portal Publisher API (reliable CDN sync). Same library as 0.3.0 (render progress callback).
v0.3.0
compose-pdf 0.3.0
- Render progress callback —
render(regular, bold, onProgress)reports0f→1fas pages are laid out and serialized, for a real determinate progress bar. The callback is optional and defaults to null; output is byte-for-byte unchanged when omitted. - Roadmap: live
@Composablepreview bridge.
v0.2.0
compose-pdf 0.2.0
- Rounded box corners; per-fragment border/background when boxes split across pages.
- Per-row table background + split horizontal/vertical cell padding;
totalRowbackground override. PhotoFit.Smart/Contain/Cover— aspect-ratio aware image layout.- Reserved footer / page-number space; configurable
repeatHeader(every page vs first only),pageNumbers,pageNumberFormat,pageNumberStyle. keepBlocksTogetherto avoid orphaned slivers.- Example-document gallery in
commonMain(ExampleDocuments) with rendered samples undersamples/.
0.1.0
First release of compose-pdf — a pure-Kotlin Kotlin Multiplatform vector PDF library.
- Embedded subset Type0/CIDFontType2 (Identity-H) + ToUnicode: selectable, searchable text incl. Latin diacritics.
- Compose-style DSL: text, spacer, divider, row/column/box, image/photoGrid, table with repeating headers and total rows, header/footer bands + page numbers.
- Automatic pagination; FlateDecode compression (pure-Kotlin deterministic deflate).
- App-supplied fonts; identical integer layout proven across JVM + iOS by a cross-platform golden test.
- Targets: Android + iOS + JVM.