-
Notifications
You must be signed in to change notification settings - Fork 43
Releases: carlos7ags/folio
Releases · carlos7ags/folio
v0.9.1
A rendering-correctness release across border-radius (#329), CSS paged media
(@page, position: fixed, margin boxes — #327/#328), and lists
(#330/#339/#342/#347/#358), plus a from-scratch fix of the QR barcode encoder
(#341). Adds native multi-level list numbering via CSS counters (#356), table
rowspan geometry (#357), Document.AddConvertResult, and
SetPageSize/PageSize (#338). No breaking changes.
Added
document.Document.AddConvertResult(*html.ConvertResult) error— the wiring half ofAddHTML, exported so callers who need the rawConvertResult(to inspect or transform elements before rendering) can add it back with a single correct call. It forwards everything the converter produces — normal-flow elements, absolutely/position:fixedelements,@pagesize and margins, all four margin-box sets, and<title>/<meta>metadata — and sets the page size from any@pagerule.AddHTMLis now exactlyConvertFull+AddConvertResult, so the two paths cannot diverge. This closes the discoverability trap where a hand-writtenfor _, e := range result.Elements { doc.Add(e) }loop silently dropped absolutes, margin boxes, and@pageconfig with no error (#338)document.Document.SetPageSize(PageSize)andPageSize() PageSize— read and override the page dimensions afterNewDocument. The size was previously fixed at construction even thoughAddHTMLmutates it internally from@pagerules; these expose the missing setter/getter.AddConvertResultderives the size from@pageautomatically, so the pre-NewDocumentgeometry-resolve dance is no longer required (#338)- Code 128 code sets A and C —
barcode.NewCode128now selects sets A, B, and C automatically instead of Code B only. Set C encodes digit runs as pairs (roughly halving the width of numeric payloads) and set A encodes the ASCII control characters (0–31); bytes above 127 still return an error. Round-trip and golden-pattern tests cover every code-set transition (#346) - Native multi-level list numbering via CSS counters and
::marker—li::marker { content: ... }now defines the marker string, socounter-reset/counter-incrementwithcounter()/counters()produce true nested numbering (e.g.1,1.1,1.1.1) instead of a per-level restart. Addslist-style-position(inside/outside):insiderenders the marker inline with the first content line and wraps subsequent lines under it;outside(default) places it in a gutter that auto-grows to fit a wide marker so multi-level ordinals no longer overlap the item text (short-marker lists stay byte-identical). Thelist-styleshorthand now scans all tokens (position / type / image).layout.ListgainsSetMarkerInside. Newexamples/legal-numberingrenders a nested Master Services Agreement with hanging indents. Phase 1 of #356 - Table
rowspanvertical geometry — arowspancell previously reserved grid occupancy (following rows skipped its columns) but was always drawn one row tall. The spanning cell now spans the full height of its rows:buildGridexcludes rowspanning cells from their starting row's natural height, then resolves span heights from the summed spanned-row heights plus inter-row gaps (growing the last spanned row when content needs more room), and vertical alignment centers across the full span. A rowspan straddling a page break is not yet handled (#357)
Fixed
border-radius (#329)
- Percentage
border-radiusrenders as a true rounded corner —border-radius: 50%was resolving against a zero reference and collapsing to 0 (square corners). It now resolves per-axis: a circle on a square box, an ellipse on a rectangle, per CSS Backgrounds §5.5 corner clamping (#329) border-radiussurvives on a text-bearing box — a box with a direct text run drew its rounded background, then the text's paragraph re-painted the same color as a square rectangle on top, squaring the corners. The redundant fill (and any matchingTextRun.BackgroundColorhighlight) is now cleared, so the common "number inside a colored circle" badge works as a single rounded box (#329)border-radiusapplied across the remaining container paths —flex: 0 0 autochips, grid items,display: blockspans,blockquote,figure, and table wrappers each now round likedisplay: inline-block. Previously only the inline-block path took the rounded-rect draw, so visually identical content-hugging boxes rounded or not depending on how they were sized (#329)
CSS paged media — @page, position: fixed, margin boxes (#327, #328)
position: fixedelements render on every page — a fixed element (page watermark, pinned footer) was emitted once on the last flowed page instead of repeated on each page. It now draws on every page (#327)@page :first/:left/:rightmargins inherit the base@pagecascade — a partial pseudo-page override (e.g.@page :first { margin: 20px }) now inherits the base@page {}margins for the sides it does not set, and left/right duplex margin boxes resolve correctly (#327)@pageparsing correctness bundle — a batch of fixes to@pagerule parsing across the converter, layout, and document layers (size/orientation resolution, margin percentage/calcresolution, and margin-box cascade), so every document-building entry point applies identical paged-media geometry (#327)@pagemargin boxes embed the default font for PDF/A — running headers/footers declared via@bottom-centeretc. now carry the embedded body font, so a PDF/A document with page numbering no longer fails conformance on an unembedded font in the margin box (#328)
Lists and inline-block (#330, #339, #342, #347, #358)
display: inline-blockshrinks to fit and flows inline — an inline-block box now sizes to its content (fit-content width) and participates in inline flow instead of forcing a block break (#330)- Styled
<li>lays out block children and honors its own box — a list item containing block-level children (cards, nested divs) now lays them out correctly, and the<li>'s own background / border /border-radiusis drawn via a per-item box that the list layout previously lacked (#339, #342) inline-block/ explicit-width<li>hugs its content and stops double-painting — follow-up to the per-item box: a badge-style<li>now shrinks to content and clears the square background overpaint that squared its rounded corners (#342)- Ordered lists continue numbering and keep every item across a page break — a long
<ol>spanning pages restarted at1.on the second page and silently dropped the item straddling the boundary. Numbering now continues the sequence (honoring<ol start="N">), and a boundary item is split or deferred so no content is lost. Addslayout.List.SetStart/Start(#347) - Nested list markers indent per level — a sub-list's marker was drawn at the container's left margin regardless of depth, so every nested ordinal sat in the same left column while only the body text indented. Each level's marker now steps right by the accumulated parent indent, landing under its parent's content edge (LTR and RTL;
list-style-position: insidealready drew relative to the content edge). Single-level lists are unaffected (#358) - Margin-box fidelity for
@page :left/:right— fixing the wiring aroundAddConvertResultsurfaced that the left/right margin-box reconstruction dropped theHasColorflag and the embedded font that base and:firstalready carried; all four sets are now consistent (#338) examples/html-to-pdfno longer drops absolutes — the example wired the rawConvertFullresult by hand and forwarded onlyresult.Elements, silently droppingposition: fixed/absolutecontent. It now usesdoc.AddConvertResult(result), which forwards elements, absolutes,@pageconfig, and margin boxes in one call (#338)
Barcodes (#341, #346)
- QR codes are now scannable —
barcode.NewQRproduced structurally valid but unscannable symbols due to four independent encoder defects: the Reed-Solomon generator polynomial was built constant-term-first (so every block's error-correction codewords were wrong), one of the two format-information copies was written bit-reversed, the version-information bits were written in reverse (breaking version 7+), and the level-H ECC-per-block table had wrong codeword counts for versions 21–40. All four are fixed and verified by an independent decoder (#341) - EAN-13 quiet zones — corrected the leading/trailing quiet-zone widths so EAN-13 symbols meet the spec and scan reliably (#346)
Tests
- Independent barcode decode tests —
qr_decode_test.goreads generated QR symbols back with an independently-built GF(256) field, cross-checks the codeword-capacity tables, and reads format/version info from the matrix; each check was confirmed to fail when its corresponding fix is reverted. Adds Code 128 (A/B/C) and EAN-13 decode round-trips, and anexamples/barcodesdemo rendering QR (all four ECC levels), Code 128, and EAN-13 into one PDF for visual/scanner verification (#341, #346) - List pagination regression tests — multi-page ordered-list numbering continuity,
<ol start>continuation across a break, unordered no-content-loss, a single item taller than a page, andSetStartclamping (#347) AddConvertResultequivalence + fidelity tests — assertAddHTMLandConvertFull+AddConvertResultleave identical document state (page size, all margins, all four margin-box sets, elements, absolutes, metadata), that absolutes and@pageconfig survive, and the:left/:rightfield-fidelity regression (#338)
Documentation
using-folioClaude Code skill — a thin, version-controlled skill (.claude/skills/using-folio) capturing the stable usage patterns: preferDocument.AddHTML(orConvertFull+AddConvertResult) over hand-wiring, the asset-loadin...
Assets 10
v0.9.0
@github-actions
github-actions
9efa456
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's Changed
- document: deterministic output mode (WriteOptions.Deterministic + SetFileID) by @carlos7ags in #320
- html: typed error taxonomy (html.ParseError + html.AssetError) by @carlos7ags in #321
- html: resource guards (Options.MaxElements / MaxDepth + html.LimitError) by @carlos7ags in #322
- render: thread context.Context through the render entry points by @carlos7ags in #323
- folio: add root package façade re-exporting the document surface by @carlos7ags in #324
Full Changelog: v0.8.0...v0.9.0
Assets 10
v0.8.0
@github-actions
github-actions
d01435b
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's Changed
- svg: clip to viewport under preserveAspectRatio slice by @carlos7ags in #211
- html: add Options.BaseFS and Options.Client (#85) by @carlos7ags in #212
- document: extend PDF/A to A-3a and the PDF/A-4 family by @carlos7ags in #214
- font: GPOS LookupType 6 (Mark-to-Mark Positioning) by @carlos7ags in #213
- html: add CSS :empty and ::placeholder support by @carlos7ags in #215
- layout: apply Unicode NFC normalization at the layout entry point by @carlos7ags in #217
- layout: generalize Indic shaper to eight additional Brahmic scripts by @carlos7ags in #216
- font: add GPOS LookupType 3 (cursive) and LookupType 5 (mark-to-ligature) by @carlos7ags in #218
- font: fix GPOS cursive horizontal placement and tighten Type 5 by @carlos7ags in #220
- html: unify on Options.BaseFS, add Logger, fix @font-face resolution by @carlos7ags in #219
- layout: resolve CSS counter(page)/counter(pages) in body flow by @carlos7ags in #221
- html: emit real PDF link annotations for href="#anchor" with auto-registered destinations by @carlos7ags in #223
- layout: finish CSS GCPM bookmark properties for PDF outlines by @carlos7ags in #224
- font: add Fallback for cross-script font dispatch (Phase 1 of #192) by @carlos7ags in #225
- html: add Options.StrictAssets to promote asset-load failures to errors by @carlos7ags in #234
- html, layout: fix flex shorthand with calc/min/max basis by @carlos7ags in #236
- font: load TrueType Collections via face-0 extraction by @carlos7ags in #235
- layout: add MeasureLines and MeasureHeight to Paragraph by @carlos7ags in #238
- html: fix margin/padding shorthand with calc/min/max values by @carlos7ags in #237
- html: fix font shorthand with calc/min/max in size by @carlos7ags in #240
- html: centralize asset resolution behind one resolveLocalAsset by @carlos7ags in #239
- layout: preserve inline elements and Arabic OriginalText across page splits by @carlos7ags in #241
- html: fix border shorthand with calc width and rgb/rgba/hsl color by @carlos7ags in #242
- font: drop falsely-advertised PostScript Type 1 (typ1) magic by @carlos7ags in #243
- html: fix background-size with calc/min/max values by @carlos7ags in #244
- examples/cjk: add end-to-end test (Phase 1 of #231) by @carlos7ags in #245
- html: fix @page size with calc/min/max values by @carlos7ags in #247
- layout: honor SpaceAfter=0 when reconstructing paragraph runs across page splits by @carlos7ags in #246
- html: fix gap/grid-gap shorthand with calc/min/max values by @carlos7ags in #249
- layout: lock in cloneWithWords hyphenation contract with a guard test by @carlos7ags in #250
- html: fix border-radius shorthand with calc/min/max values by @carlos7ags in #252
- layout: add SplitAfterLine to Paragraph by @carlos7ags in #253
- html: fix box-shadow with calc/min/max length values by @carlos7ags in #254
- html: fix transform-origin with calc/min/max length values by @carlos7ags in #257
- html: fix border-spacing shorthand with calc/min/max values by @carlos7ags in #258
- html: fix columns shorthand with calc/min/max width values by @carlos7ags in #259
- html: fix column-rule with calc width and rgb/rgba/hsl color by @carlos7ags in #261
- html: fix margin auto-flag detector with calc/min/max values by @carlos7ags in #263
- font: drop sfnt dependency by parsing tables directly (#260) by @carlos7ags in #262
- html: paren-aware slash detector + column-rule none/hidden zeros width by @carlos7ags in #270
- html: refactor CSS parser into declarative property registry by @carlos7ags in #271
- html: paren-aware parseTransform extractor + comma-preserving arg split by @carlos7ags in #272
- docs: expand CSS_SUPPORT.md with glossary, alignment notes, workarounds by @carlos7ags in #273
- font, examples/cjk: language-aware TTC face selection by @carlos7ags in #277
- font: address review feedback on language-aware TTC PR (#277 follow-up) by @carlos7ags in #279
- docs: add Selectors / At-rules / Functions sections to CSS_SUPPORT.md (closes #162) by @carlos7ags in #282
- export: add C ABI wrappers for paragraph measure/split + language-aware font parse by @carlos7ags in #283
- html: parseAngle/parseNumericVal/parseLineHeight understand calc/min/max/clamp (closes #274, #275) by @carlos7ags in #284
- html: promote font-weight to numeric ladder + nearest-weight @font-face matching (closes #286) by @carlos7ags in #287
- html: add CSS text-align: start | end with direction-relative late binding by @carlos7ags in #288
- html, layout: add CSS text-decoration-line: overline by @carlos7ags in #289
- html: render CSS border styles groove / ridge / inset / outset by @carlos7ags in #290
- html, layout: honours max-width / max-height / min-width / min-height (closes #291) by @carlos7ags in #292
- pin paragraph background to line box under center/right align by @samueldominguez in #293
- layout: honor word-break:break-all in measureWords second pass by @samueldominguez in #294
- build(deps): bump golang.org/x/text from 0.36.0 to 0.37.0 by @dependabot[bot] in #298
- build(deps): bump golang.org/x/image from 0.39.0 to 0.40.0 by @dependabot[bot] in #297
- font: CFF subsetting for CID-keyed CJK fonts (closes #295) by @carlos7ags in #300
- examples/html-to-pdf: add CI (#231) by @carlos7ags in #301
- examples/report: add CI (#231) by @carlos7ags in #302
- examples: add CI for hello, links, template (#231) by @carlos7ags in #303
- examples: add CI for merge, import-page, redact (#231) by @carlos7ags in #304
- font, integration: synthetic CJK font fixture (closes #281) by @carlos7ags in #305
- build(deps): bump golang.org/x/net from 0.53.0 to 0.54.0 by @dependabot[bot] in #296
- html: direct unit test for parseLineHeight (closes #275) by @carlos7ags in #306
- layout: preserve OriginalText + GIDs across breakLongWords chunks (closes #255) by @carlos7ags in #307
- html: propagate to @font-face face selection (closes #280) by @carlos7ags in #308
- html: Phase 1 of #269 — sibling *cssLength fields for margin/padding by @carlos7ags in #309
- html: Phase 2 of #269 — migrate consumers to MarginTopAt / PaddingTopAt helpers by @carlos7ags in #310
- html: Phase 4 of #269 - remove legacy float64 margin/padding fields by @carlos7ags in #311
- html: recognize calc()/min()/max()/clamp() in gradient stops and bg-position (closes #265, #266) by @carlos7ags in #312
- all: standardize error message prefixes by @carlos7ags in #313
- html: close review findings on #312 — doc gap + 10 tests by @carlos7ags in #314
- html: reset depth between calc operator scan passes by @carlos7ags in #315
- html, layout: lazy-resolve background-position at draw time (closes #266) by @carlos7ags in #319
- build(deps): bump golang.org/x/image from 0.40.0 to 0.41.0 by @dependabot[bot] in #317
- build(deps): bump golang.org/x/net from 0.54.0 to 0.55.0 by @dependabot[bot] in #316
- docs: prepare CHANGELOG and MIGRATING for v0.8.0 by @carlos7ags in https://gi...
Contributors
page, carlos7ags, and 3 other contributors
Assets 10
v0.7.1
@github-actions
github-actions
70dcee4
This commit was created on GitHub.com and signed with GitHub’s verified signature.
What's Changed
- export: C ABI bindings for v0.7.0 additions by @carlos7ags in #208
Full Changelog: v0.7.0...v0.7.1
Assets 10
v0.7.0
What's Changed
- Plumb stop-opacity through layout.GradientStop by @carlos7ags in #146
- Fix CSS !important cascade at inline/stylesheet boundary (#137) by @carlos7ags in #144
- Fix panic on
inside and other inline elements (#147) by @carlos7ags in #149 - Land stress-test examples from #126 and fix stale README claims by @carlos7ags in #153
- Add comprehensive
-in-inline regression tests (#147, #10) by @carlos7ags in #151 - Replace magic-string line-break marker with TextRun.IsLineBreak (#150) by @carlos7ags in #156
- Add CJK line-breaking support with kinsoku shori rules by @carlos7ags in #157
- Add RTL text support: bidi, Arabic shaping, GSUB, HTML direction (#37, #160) by @carlos7ags in #148
- Add tmpl package: Go html/template integration for PDF generation by @carlos7ags in #155
- Support @font-face with base64 data URI fonts (#159) by @carlos7ags in #163
- Wire OpenType GSUB substitutions into Arabic shaper (#160) by @carlos7ags in #164
- Audit content package: validation, ISO 32000 operators, coverage by @carlos7ags in #166
- Audit core package: correctness fixes, tests, and gradual API cleanup by @carlos7ags in #165
- Harden image decoders against malicious input by @carlos7ags in #167
- Audit font package: sentinel errors, concurrency contract, coverage by @carlos7ags in #168
- Strengthen image tests, fix JPEG parser OOB found by fuzz by @carlos7ags in #169
- Segment text runs by Unicode script per UAX #24 by @carlos7ags in #170
- Parse and apply GSUB LookupType 4 ligature substitutions by @carlos7ags in #171
- Fix TrueType kern table coverage decode, cache pairs, measure kerning by @carlos7ags in #172
- Phase 2 audit follow-ups: composite glyph tests and Adobe CMYK JPEGs by @carlos7ags in #173
- Parse and apply GSUB LookupType 6 chaining contextual substitution by @carlos7ags in #174
- Parse OpenType GPOS pair and mark-to-base positioning by @carlos7ags in #175
- Implement UAX #29 grapheme clusters and snap bidi splits to cluster boundaries by @carlos7ags in #176
- Optimizer phase 1: cross-reference streams and object streams by @carlos7ags in #177
- Phase 3 audit follow-ups: SVG preserveAspectRatio and barcode fuzzers by @carlos7ags in #178
- Kashida (tatweel) justification for Arabic paragraphs by @carlos7ags in #179
- Emit /ActualText markers around shaped Arabic words by @carlos7ags in #180
- examples/optimize: multi-fixture comparison and README mention by @carlos7ags in #181
- Wire GSUB ligature features into Arabic shaping by @carlos7ags in #182
- Make font.MeasureString cluster-aware by @carlos7ags in #183
- Dispatch GSUB chain context actions to ligature and chain lookups by @carlos7ags in #184
- Wire GPOS mark-to-base anchors into the draw pipeline by @carlos7ags in #185
- Add Devanagari shaper for Hindi, Sanskrit, Marathi, Nepali by @carlos7ags in #186
- Bump golang.org/x/net from 0.52.0 to 0.53.0 by @dependabot[bot] in #188
- Bump golang.org/x/image from 0.38.0 to 0.39.0 by @dependabot[bot] in #189
- Fix multi-column layout: sequential balanced fill instead of round-robin by @carlos7ags in #193
- Bump softprops/action-gh-release from 2 to 3 by @dependabot[bot] in #200
- optimize: orphan sweep + size-regression guard primitive (#201) by @carlos7ags in #202
- optimize: Flate recompression of stream payloads (#203) by @carlos7ags in #204
- Add examples/indic program showing Devanagari shaping by @carlos7ags in #191
- optimize: structural deduplication + content stream operator cleanup by @carlos7ags in #205
Full Changelog: v0.6.2...v0.7.0
Assets 10
1 person reacted
v0.6.2
What's Changed
- Honor
column-span: allinside multi-column containers by @carlos7ags in #131 - Fix multi-line headings overprinting wrapped lines by @carlos7ags in #132
- Preserve table sizing fields across page-break continuations by @carlos7ags in #136
- Fix flexbox
orderandalign-itemsvia CSS custom properties by @carlos7ags in #138 - Fix CSS Grid
align-items,justify-items, and container height by @carlos7ags in #140 - Preserve heading tag and fix Consumed accounting across page breaks by @carlos7ags in #139
- Fix SVG rendering gaps: data-URI images, gradients, inline SVG in paragraphs (#130) by @carlos7ags in #141
- Fix inline emphasis splitting paragraphs + table cell % overflow in flex by @carlos7ags in #142
- Expand C ABI to 372 exports: Document, Div, Cell, Grid, Flex, highlights, PKCS12 by @carlos7ags in #143
Full Changelog: v0.6.1...v0.6.2
Assets 10
1 person reacted
v0.6.1
What's Changed
- Fix nil font panic in paragraph measureWords (#98) by @carlos7ags in #99
- Support border-radius on table cells (#100) by @carlos7ags in #103
- Fix :not() with attribute selectors, enabling Tailwind space-y (#101) by @carlos7ags in #105
- Fix Div per-corner border-radius rendering (#104) by @carlos7ags in #106
- Support space-separated rgb()/hsl() per CSS Color Level 4 (#108) by @carlos7ags in #110
- Add public ParseCSSLength utility and fix rem parsing (#109) by @carlos7ags in #111
- Support CSS aspect-ratio property by @carlos7ags in #112
- Fix table cell border-radius cleared by default border-collapse by @carlos7ags in #114
- Match browser UA defaults for table: no margins, 2px border-spacing by @carlos7ags in #117
- Add invoice example with rounded table, grid, flex by @carlos7ags in #118
- Add Document.ToBytes convenience method (#66) by @carlos7ags in #119
- Support per-side border-radius on table cells (#115) by @carlos7ags in #120
- Add draw function rendering tests by @carlos7ags in #121
- Add table rendering integration tests by @carlos7ags in #122
- Add grid, paragraph, and float integration tests by @carlos7ags in #123
- Fix Go version in README (#124) by @carlos7ags in #125
Full Changelog: v0.6.0...v0.6.1
Assets 10
1 person reacted
v0.6.0
What's Changed
- Add element-based header/footer API with automatic space reservation by @carlos7ags in #68
- Close 11 rendering gaps from HTML support audit by @carlos7ags in #69
- Split large html/ files into focused modules by @carlos7ags in #70
- Feat: Support per-run text highlight background color by @bendavidsonku in #72
- Add 11 CSS features: running headers, selectors, colors, math functions by @carlos7ags in #74
- Use actual font metrics for highlight, underline, and strikethrough by @carlos7ags in #75
- Architecture audit: documentation, naming, and API cleanup by @carlos7ags in #76
- Fix Phase 2 audit issues: alpha, font flags, kern bounds, validation by @carlos7ags in #77
- Fix Phase 3 audit: page-break-inside, selectors, colors, docs by @carlos7ags in #78
- Fix Phase 4 audit: encryption detection, multi-sign, Page error, predictor bounds by @carlos7ags in #79
- Phase 5 audit: test coverage for zero-coverage public APIs by @carlos7ags in #80
- Bump golangci/golangci-lint-action from 7 to 9 by @dependabot[bot] in #81
- Bump actions/download-artifact from 4 to 8 by @dependabot[bot] in #82
- Bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #83
- Add AddHTMLTemplate for data-driven PDF generation by @carlos7ags in #84
- Fix overflow handling to include following siblings in layout. by @AnalogJ in #13
- Feat: Support inline elements (images, SVGs, inline-block) within paragraphs by @bendavidsonku in #71
- Fix and rendering: baseline shift and adjacent run spacing by @carlos7ags in #87
- Support baseline-shift CSS property and vertical-align lengths by @carlos7ags in #93
- Fix baseline calculation using CSS half-leading by @carlos7ags in #92
- Preserve empty lines from consecutive newlines in paragraphs by @carlos7ags in #94
- Fix punctuation at font boundaries to keep its own font by @carlos7ags in #96
- Preserve blank lines across page splits in paragraph overflow by @carlos7ags in #97
New Contributors
- @bendavidsonku made their first contribution in #72
- @dependabot[bot] made their first contribution in #81
- @AnalogJ made their first contribution in #13
Full Changelog: v0.5.2...v0.6.0
Contributors
AnalogJ, carlos7ags, and 2 other contributors
Assets 10
2 people reacted
v0.5.2
What's Changed
- Add merge example: parse, merge, and extract text from PDFs by @carlos7ags in #55
- Add sign example: PAdES B-B digital signature with self-signed cert by @carlos7ags in #56
- Examples/report by @carlos7ags in #57
- Implement PDF redaction with character-level precision by @carlos7ags in #59
- Add PDF/UA accessibility: alt text, custom tags, structure tree reading by @carlos7ags in #60
- Support \n as line break in Paragraph text, fix gofmt by @carlos7ags in #63
- Add Page.ImportPage for using existing PDFs as templates by @carlos7ags in #62
- Add C ABI exports for redaction, page import, and drawing primitives by @carlos7ags in #64
Full Changelog: v0.5.1...v0.5.2
Assets 10
v0.5.1
Full Changelog: v0.5.0...v0.5.1