Releases: mini-software/MiniPdf
v0.31.0
What's New in v0.31.0
Highlights
- Excel merged-cell alignment coverage -- adds a regression workbook for issue 77 to track merged-cell alignment behavior in XLSX conversion.
- NuGet package documentation paths -- moves NuGet README files under
documents/and updates project packaging paths so package readmes resolve from the new location. - README cleanup -- removes unnecessary generated header text from the primary and localized README files.
Downloads
GitHub Actions will attach the CLI and GUI native AOT packages to this release after the release workflows finish.
| Platform | CLI | GUI |
|---|---|---|
| Windows x64 | minipdf-win-x64.zip |
minipdf-gui-win-x64.zip |
| Windows ARM64 | minipdf-win-arm64.zip |
minipdf-gui-win-arm64.zip |
| Linux x64 | minipdf-linux-x64.tar.gz |
minipdf-gui-linux-x64.tar.gz |
| Linux ARM64 | minipdf-linux-arm64.tar.gz |
minipdf-gui-linux-arm64.tar.gz |
| macOS x64 | minipdf-osx-x64.tar.gz |
minipdf-gui-osx-x64.tar.gz |
| macOS ARM64 | minipdf-osx-arm64.tar.gz |
minipdf-gui-osx-arm64.tar.gz |
Changes since v0.30.0
9dda305Fix README file paths in project files and remove unnecessary header2a85333feat(excel): add test file for merged cell alignment issue
README.md | 1 -
documents/README.fr.md | 1 -
documents/README.it.md | 1 -
documents/README.ja.md | 1 -
documents/README.ko.md | 1 -
.../README.nuget.cli.md | 6 +-
README.nuget.md => documents/README.nuget.md | 8 +-
README.zh-CN.md => documents/README.zh-CN.md | 1 -
documents/README.zh-TW.md | 1 -
src/MiniPdf.Cli/MiniPdf.Cli.csproj | 2 +-
src/MiniPdf/ExcelToPdfConverter.cs | 124 +++++++++++++++------
src/MiniPdf/MiniPdf.csproj | 2 +-
.../xlsx/XlsxIssue77_MergedCellAlignment.xlsx | Bin 0 -> 15565 bytes
13 files changed, 95 insertions(+), 54 deletions(-)
Full Changelog: v0.30.0...v0.31.0
v0.30.0
What's New in v0.30.0
Highlights
- Excel conversion quality -- adds cell border handling and text normalization improvements in the Excel reader/PDF converter path.
- DOCX layout fixes -- improves row height calculation, cell baseline placement, and DOCX-to-PDF layout behavior.
- Font compatibility -- improves TrueType Collection handling and font name extraction in PDF output.
- Benchmark and issue coverage -- adds issue-file benchmark reporting, DOCX issue fixtures, XLSX issue fixtures, and comparison results for issue202605 and issue26050501.
- Project workflow polish -- adds GitHub issue templates and funding metadata, with README badge cleanup across translated docs.
Downloads
Release assets are built and uploaded automatically after this release is published.
| Platform | CLI Download | GUI Download |
|---|---|---|
| Windows x64 | minipdf-win-x64.zip |
minipdf-gui-win-x64.zip |
| Windows ARM64 | minipdf-win-arm64.zip |
minipdf-gui-win-arm64.zip |
| Linux x64 | minipdf-linux-x64.tar.gz |
minipdf-gui-linux-x64.tar.gz |
| Linux ARM64 | minipdf-linux-arm64.tar.gz |
minipdf-gui-linux-arm64.tar.gz |
| macOS x64 | minipdf-osx-x64.tar.gz |
minipdf-gui-osx-x64.tar.gz |
| macOS ARM64 | minipdf-osx-arm64.tar.gz |
minipdf-gui-osx-arm64.tar.gz |
Changes since v0.29.0
0e0be2ffeat(excel): enhance Excel reading and PDF conversion with cell border handling and text normalization99687e9feat(issue-templates): add multiple issue templates for bug reports, feature requests, documentation, and questions30a2714fix(readme): remove unnecessary badge links from multiple language README files7e733effeat(readme): add GitHub Sponsors badge to multiple language README files570192cfix(readme): update GitHub Sponsors badge for improved clarity5a0b6effeat(funding): add custom funding link to FUNDING.yml560f82dfeat(funding): add GitHub Sponsors link to README and create FUNDING.yml0d56324fix(docx): improve row height calculation and cell baseline placement in PDF conversion3da245efeat(benchmark): add score reporting and comparison for XLSX and DOCX files #74d7e8912Add comparison results for issue202605 and issue26050501 to the report7e43bb5Refactor code structure for improved readability and maintainability2c32126fix(pdf): enhance font handling for TrueType Collections and improve font name extraction79a6dferefactor(tests): remove obsolete benchmark test files
Git Diff Stat
.github/FUNDING.yml | 2 +
.github/ISSUE_TEMPLATE/bug_report.yml | 83 +++
.github/ISSUE_TEMPLATE/config.yml | 5 +
.github/ISSUE_TEMPLATE/conversion_quality.yml | 91 +++
.github/ISSUE_TEMPLATE/documentation.yml | 54 ++
.github/ISSUE_TEMPLATE/feature_request.yml | 76 +++
.github/ISSUE_TEMPLATE/question.yml | 70 +++
README.md | 2 -
README.zh-CN.md | 2 -
documents/README.fr.md | 2 -
documents/README.it.md | 2 -
documents/README.ja.md | 2 -
documents/README.ko.md | 2 -
documents/README.zh-TW.md | 2 -
scripts/Run-Benchmark_issues.ps1 | 74 +++
src/MiniPdf/DocxReader.cs | 75 ++-
src/MiniPdf/DocxToPdfConverter.cs | 612 ++++++++++++---------
src/MiniPdf/ExcelReader.cs | 9 +
src/MiniPdf/ExcelToPdfConverter.cs | 115 ++--
src/MiniPdf/PdfWriter.cs | 38 +-
tests/Issue_Files/docx/issue202605.docx | Bin 0 -> 29162 bytes
tests/Issue_Files/docx/issue26050501.docx | Bin 0 -> 18842 bytes
tests/Issue_Files/reference_docx/issue202605.pdf | Bin 0 -> 154034 bytes
tests/Issue_Files/reference_docx/issue26050501.pdf | Bin 0 -> 111155 bytes
tests/Issue_Files/reports_docx/comparison_report.json | 66 ++-
tests/Issue_Files/reports_docx/comparison_report.md | 387 ++++++++++++-
tests/Issue_Files/reports_docx/images/Class News_p1_minipdf.png | Bin 703953 -> 704021 bytes
tests/Issue_Files/reports_docx/images/Class News_p2_minipdf.png | Bin 834413 -> 834186 bytes
tests/Issue_Files/reports_docx/images/Class News_p3_minipdf.png | Bin 700528 -> 700600 bytes
tests/Issue_Files/reports_docx/images/Class News_p4_minipdf.png | Bin 837157 -> 837123 bytes
tests/Issue_Files/reports_docx/images/issue202605_p1_minipdf.png | Bin 0 -> 259243 bytes
tests/Issue_Files/reports_docx/images/issue202605_p1_reference.png | Bin 0 -> 264757 bytes
tests/Issue_Files/reports_docx/images/issue202605_p2_minipdf.png | Bin 0 -> 89605 bytes
tests/Issue_Files/reports_docx/images/issue202605_p2_reference.png | Bin 0 -> 84863 bytes
tests/Issue_Files/reports_docx/images/issue26050501_p1_minipdf.png | Bin 0 -> 340587 bytes
tests/Issue_Files/reports_docx/images/issue26050501_p1_reference.png | Bin 0 -> 346741 bytes
tests/Issue_Files/reports_docx/images/issue26050501_p2_minipdf.png | Bin 0 -> 240114 bytes
tests/Issue_Files/reports_docx/images/issue26050501_p2_reference.png | Bin 0 -> 224339 bytes
tests/Issue_Files/xlsx/XlsxIssue75.xlsx | Bin 0 -> 137387 bytes
tests/Issue_Files/xlsx/XlsxIssue77_Template1.xlsx | Bin 0 -> 15870 bytes
tests/Issue_Files/xlsx/XlsxIssue77_Template2_Workaround.xlsx | Bin 0 -> 16575 bytes
tests/MiniPdf.Benchmark/_calc_width.py | 70 ---
tests/MiniPdf.Benchmark/_check_classic50.py | 16 -
tests/MiniPdf.Benchmark/_check_classic71.py | 57 --
tests/MiniPdf.Benchmark/_check_classic71_spacing.py | 51 --
tests/MiniPdf.Benchmark/_check_classic71b.py | 37 --
tests/MiniPdf.Benchmark/_check_docdefaults.py | 57 --
tests/MiniPdf.Benchmark/_check_good_tier.py | 11 -
tests/MiniPdf.Benchmark/_check_scores.py | 31 --
tests/MiniPdf.Benchmark/_get_detail.py | 18 -
tests/MiniPdf.Benchmark/_tmp_stats.py | 23 -
51 files changed, 1433 insertions(+), 709 deletions(-)
Full Changelog: v0.29.0...v0.30.0
v0.29.0
What's New in v0.29.0
DOCX rendering fidelity release: substantial improvements to OOXML indent cascade, list label placement, CJK metrics, paragraph spacing, theme font resolution, and shape rendering. Improves Chinese/Japanese/Korean document fidelity and resolves several long-standing layout regressions.
Highlights
- OOXML indent cascade -- correct inheritance from styles per OOXML 17.3.1.12 and 17.9.3, with auto-tab handling for inherited list paragraphs.
- List label placement -- gate auto-tab snap on
w:suff; correct CJK numbered-list label placement; preferw:lefttwips overw:leftCharswhen both are present. - CJK grid metrics -- recognize Chinese font aliases; include paragraph-mark font size in cell line height; skip empty/tab-only runs from line-height max.
- Paragraph spacing -- apply explicit
pStyleSpacingBeforeat top of page (narrowed to first paragraph); apply explicit SpacingBefore for first cell paragraph. - Theme & font resolution -- resolve theme Latin font for runs without explicit
rFonts; substitute Avenir LT Pro to Times New Roman for serif embedding. - Shapes & anchors -- render explicit-fill shapes when stroke is also present; handle
ObjectAnchorhost paragraph (anchor image + shape). - Chinese chromatography report fidelity -- targeted improvements driven by real-world test corpus.
Downloads
| Platform | CLI | GUI |
|---|---|---|
| Windows x64 | minipdf-win-x64.zip |
minipdf-gui-win-x64.zip |
| Windows ARM64 | minipdf-win-arm64.zip |
minipdf-gui-win-arm64.zip |
| Linux x64 | minipdf-linux-x64.tar.gz |
minipdf-gui-linux-x64.tar.gz |
| Linux ARM64 | minipdf-linux-arm64.tar.gz |
minipdf-gui-linux-arm64.tar.gz |
| macOS x64 | minipdf-osx-x64.tar.gz |
minipdf-gui-osx-x64.tar.gz |
| macOS ARM64 | minipdf-osx-arm64.tar.gz |
minipdf-gui-osx-arm64.tar.gz |
NuGet package MiniPdf is published automatically via the NuGet workflow.
Changes since v0.28.0
- dab2898 fix(docx): improve Chinese chromatography report fidelity
- fbe2fa5 fix(docx): apply OOXML 17.9.3 ind cascade for numbered paragraphs
- 0650b65 fix(docx): correct CJK numbered-list label placement
- 27f7e29 fix(docx): render explicit-fill shapes when stroke is also present
- 6267eec fix(docx): resolve theme Latin font for runs without explicit rFonts
- b97808e fix(docx): narrow SpacingBefore-explicit-at-top-of-page to first paragraph only
- b3fffea fix(docx): apply explicit pStyle SpacingBefore at top of page
- a86535e DOCX: prefer w:left twips over w:leftChars when both present
- 96213f5 DOCX: apply explicit pStyle SpacingBefore for first cell paragraph
- c48fc2b fix(docx): substitute Avenir LT Pro to Times New Roman to embed serif
- 6497e07 fix(docx): handle ObjectAnchor host paragraph (anchor image + shape)
- 6017cb1 fix(docx): skip empty/tab-only runs in paragraph line-height max-Fs
- 9ec77ef fix(docx): include paragraph mark font size in cell line height
- 2d0bd43 fix(docx): recognize Chinese font aliases for CJK grid metrics
- c933d02 test(nthu): regenerate report artifacts to reflect current source
- 04a5218 fix(docx): honor OOXML w:suff to gate list label auto-tab snap
- c620d18 fix(docx): correct OOXML indent cascade and apply auto-tab for inherited list paragraphs
- 39b91c7 DocxReader: inherit paragraph indent from styles (OOXML 17.3.1.12)
389 files changed, 3089 insertions(+), 20324 deletions(-)
Core source changes:
src/MiniPdf/DocxReader.cs(+/-693 lines)src/MiniPdf/DocxToPdfConverter.cs(+/-253 lines)src/MiniPdf/PdfWriter.cs(+/-32 lines)
Remaining diff is benchmark report regeneration (reports_docx/ images and comparison data).
Full Changelog: v0.28.0...v0.29.0
v0.28.0
What's New in v0.28.0
Highlights
- DOCX line-metrics & font fidelity -- font-aware top-of-page ascent, gated line-height growth on font-size jumps, Franklin Gothic line-height factor tuned to LibreOffice (1.149 -> 1.136), Times Roman widths for serif runs in Calibri-default docs, and TNR/Arial Bold wrap accuracy improvements.
- DOCX justification & wrapping -- preserve leading tab indent, run-boundary justify gaps, snap auto-numbered list label to next default tab stop, num-aligned tab override when list label overflows hanging indent, and explicit
spacingAfterflag for paragraph spacing. - DOCX CJK rendering -- digit-CJK gap insertion at run boundaries in the multi-format renderer, kinsoku no-end rule for opening punctuation, PDF-level CJK punctuation compression, and tolerance for Calibri Latin width overshoot in CJK runs (SA8000).
- DOCX layout fixes -- floating images anchored to paragraph line-box top (not baseline), skip line-height advance for
wrapNoneanchor-image-only paragraphs, skipSpacingBeforefor first paragraph in table cell, outlined Wingdings bullets, KaiTi_GB2312 / FangSong_GB2312 font alias mapping. - PDF engine -- cap justified line width when natural exceeds
MaxWidth; split emoji range so Dingbats bullets use the text font. - API --
ConvertToPdf(Stream)now auto-detects DOCX vs XLSX (#70).
Downloads
| Platform | CLI | GUI |
|---|---|---|
| Windows x64 | minipdf-win-x64.zip |
minipdf-gui-win-x64.zip |
| Windows ARM64 | minipdf-win-arm64.zip |
minipdf-gui-win-arm64.zip |
| Linux x64 | minipdf-linux-x64.tar.gz |
minipdf-gui-linux-x64.tar.gz |
| Linux ARM64 | minipdf-linux-arm64.tar.gz |
minipdf-gui-linux-arm64.tar.gz |
| macOS x64 | minipdf-osx-x64.tar.gz |
minipdf-gui-osx-x64.tar.gz |
| macOS ARM64 | minipdf-osx-arm64.tar.gz |
minipdf-gui-osx-arm64.tar.gz |
Changes since v0.27.0
d3b3160 fix(docx): tune Franklin Gothic line-height factor to LibreOffice (1.136)
7f8a4d8 fix(pdf): cap justified line width when natural exceeds MaxWidth
6b44e8c fix(docx): improve MSc Thesis p2 line metrics for justified TNR
93ac363 fix(docx): improve TNR/Arial Bold wrap accuracy in Calibri-default docs
f90d086 fix(docx): font-aware top-of-page ascent and gate line-height-grow on font-size jump
82d54ce fix(api): auto-detect docx/xlsx in ConvertToPdf(Stream) (#70)
7216497 fix(docx): add explicit spacingAfter flag to handle paragraph spacing correctly
22b4d9b fix(docx): add Franklin Gothic line-height factor (1.149)
dd54d03 fix(docx): skip SpacingBefore for first paragraph in table cell
995e909 fix(docx): preserve leading tab indent and run-boundary justify gaps
d5f1673 fix(docx): use Times Roman widths for serif runs in Calibri-default docs
a0cdf3c fix(docx): outlined Wingdings bullets + drop stray leading space on wrap
8e98028 fix(docx): anchor floating images to paragraph line-box top, not baseline
db9051d fix(docx): skip line-height advance for wrapNone anchor-image-only paragraphs
05e527f fix(docx): insert digit-CJK gap at run boundaries in multi-format renderer
63b2395 fix(docx): apply CJK kinsoku no-end rule for opening punctuation
1fda6b8 fix(docx): snap auto-numbered list label to next default tab stop
fe16ec7 fix(pdf): split emoji range so Dingbats bullets use text font
4e2e4a0 Refine serif-run-in-Calibri width estimate
70d8c6b Fix left-aligned tab gap calculation in ExpandTabs
a085604 Apply CJK punctuation compression in PDF text emission
a6ae666 fix(docx): tolerate Calibri Latin width overshoot in CJK runs (SA8000)
0a3732a fix(docx): honor num-aligned tab override when list label overflows hanging indent
eed1be0 fix(docx): map KaiTi_GB2312/FangSong_GB2312 font aliases to simkai/simfang
Diff stat: 313 files changed, 2972 insertions(+), 1777 deletions(-)
Full Changelog: v0.27.0...v0.28.0
v0.27.0
What's New in v0.27.0
Highlights
This release focuses on DOCX-to-PDF rendering fidelity, with broad layout, text-wrap, and font-metric improvements plus PDF writer enhancements for image transparency and connector lines.
DOCX Conversion
- Conditional table borders -- honor
band1Horz/firstColconditional borders so styled tables match Word output. - CJK baseline accuracy -- correct snap-to-grid baseline placement for KaiTi-family fonts.
- Justified line wrapping -- justified lines now stay within the right margin even when the wrap-width estimate undercounts; trailing underlined whitespace in justified paragraphs is suppressed.
- Wide sans-serif width estimation --
WordWrapuses a wider Helvetica reduction for wide sans-serif fonts. trHeightatLeast rows -- allow rows to shrink so they stay on the current page instead of forcing a page break.- Floating-anchor host paragraphs -- skip
lineHeightforwrapNonefloating-anchor host paragraphs to avoid extra vertical space. - Font weight detection + Montserrat metrics -- improved bold/weight detection and Montserrat character-width tables.
- Calibri-like font width estimation -- improved width estimation for Calibri-family fonts.
- Bold list text -- bold formatting is preserved on numbered/bulleted list runs.
- CJK + empty paragraph handling -- improved CJK font selection and empty-paragraph height handling.
- Header/footer images and connector lines -- added rendering support for connector lines and header/footer images.
PDF Writer
- Image alpha transparency -- support alpha transparency for images embedded during DOCX-to-PDF conversion.
Tooling / Repo
- New
create-releaseskill for automating GitHub releases with CLI and GUI AOT binaries. - New
libreoffice-referenceskill for looking up Office-to-PDF processing logic from local references.
Downloads
| Platform | CLI | GUI |
|---|---|---|
| Windows x64 | minipdf-win-x64.zip |
minipdf-gui-win-x64.zip |
| Windows ARM64 | minipdf-win-arm64.zip |
minipdf-gui-win-arm64.zip |
| Linux x64 | minipdf-linux-x64.tar.gz |
minipdf-gui-linux-x64.tar.gz |
| Linux ARM64 | minipdf-linux-arm64.tar.gz |
minipdf-gui-linux-arm64.tar.gz |
| macOS x64 | minipdf-osx-x64.tar.gz |
minipdf-gui-osx-x64.tar.gz |
| macOS ARM64 | minipdf-osx-arm64.tar.gz |
minipdf-gui-osx-arm64.tar.gz |
Changes since v0.26.0
1c1ef32 Refactor code structure for improved readability and maintainability
7548231 fix(docx): suppress trailing underlined whitespace in justified paragraphs
f6b0118 fix(docx): honor band1Horz/firstCol conditional borders in tables
ce42ef1 fix(docx): correct CJK snap-to-grid baseline placement for KaiTi-family fonts
684f3b0 fix(docx): justify lines fit within margin even when wrap estimate undercounts
7c0e251 fix(docx): use wider Helvetica reduction for wide sans-serif fonts in WordWrap
4d999ef update skill of obsidian
f3ede13 fix(docx): allow trHeight atLeast rows to shrink to keep on current page
666d768 fix(docx): skip lineHeight for wrapNone floating-anchor host paragraphs
b24468a feat: enhance DOCX to PDF conversion with support for font weight detection and Montserrat character widths
b696c37 feat: enhance DOCX to PDF conversion with improved font width estimation for Calibri-like fonts
146d67a feat: add support for alpha transparency in images during DOCX to PDF conversion
3227b80 Refactor code structure for improved readability and maintainability
603fdfd feat: add support for rendering connector lines and header/footer images in PDF conversion
59a0a97 feat: add support for bold list text in DOCX to PDF conversion
fac6c67 feat: enhance DOCX to PDF conversion with CJK font support and improved empty paragraph handling
9b4bd7d feat: add create-release skill for automating GitHub releases with CLI and GUI AOT binaries
Source diff stat
src/MiniPdf/DocxReader.cs | 615 ++++++++++++++++++++++----
src/MiniPdf/DocxToPdfConverter.cs | 904 +++++++++++++++++++++++++++++++++-----
src/MiniPdf/PdfPage.cs | 7 +-
src/MiniPdf/PdfWriter.cs | 145 +++---
4 files changed, 1421 insertions(+), 250 deletions(-)
Full Changelog: v0.26.0...v0.27.0
v0.26.0
What's New in v0.26.0
Cross-Platform GUI Desktop App (New!)
Added MiniPdf.Gui -- a cross-platform desktop application built with Avalonia UI for converting DOCX/XLSX to PDF.
Features:
- Open single or multiple Office files (DOCX, XLSX)
- Open folders for batch conversion
- Drag and drop files/folders directly onto the window
- Real-time progress tracking per file
- Custom font directory support (CJK fonts etc.)
- Open output folder after conversion
- NativeAOT single-file executable -- no .NET runtime required
Downloads
| Platform | CLI | GUI |
|---|---|---|
| Windows x64 | minipdf-win-x64.zip | minipdf-gui-win-x64.zip |
| Windows ARM64 | minipdf-win-arm64.zip | minipdf-gui-win-arm64.zip |
| Linux x64 | minipdf-linux-x64.tar.gz | minipdf-gui-linux-x64.tar.gz |
| Linux ARM64 | minipdf-linux-arm64.tar.gz | minipdf-gui-linux-arm64.tar.gz |
| macOS x64 | minipdf-osx-x64.tar.gz | minipdf-gui-osx-x64.tar.gz |
| macOS ARM64 | minipdf-osx-arm64.tar.gz | minipdf-gui-osx-arm64.tar.gz |
Full Changelog: v0.25.0...v0.26.0
v0.25.0
Highlights from v0.24.0 to current commit (6aecd83):
- DOCX: last rendered page break support — added handling for w:lastRenderedPageBreak and improved proactive page break logic.
- DOCX: line height calculation adjustment — refined line height calculations and empty paragraph handling for better layout accuracy.
- DOCX: vertically merged cell border suppression — suppressed borders for vertically merged table cells and adjusted post-table gap calculation.
- DOCX: CJK/Latin fraction exclusion — excluded CJK fullwidth glyphs and thin spaces from Latin fraction width logic.
- DOCX: frame alignment support — added frame alignment, trailing empty paragraph trimming, and improved page break logic.
- DOCX: auto spacing for Latin and East Asian text — added auto spacing between Latin and East Asian characters with grid snapping adjustments.
- DOCX: serif font detection — added serif font detection and adjusted width reduction for improved text layout.
- DOCX: w:keepNext support — implemented w:keepNext paragraph property and fixed cellPaddingV floor for zero-margin tables.
- DOCX: Fabrikam document support — enhanced conversion with additional test coverage.
Full Changelog: v0.24.0...v0.25.0
v0.24.0
Highlights from v0.23.0 to current commit (a02ae6d):
- DOCX: table style paragraph spacing/line spacing propagation in table cells.
- DOCX: improved line-height calculation for mixed run font sizes to avoid overlap.
- DOCX: table cell spacing behavior aligned with Word compatibility mode.
- XLSX: support second-row stripe style rendering.
- XLSX: improved fitToPage scaling behavior to reduce near-overflow extra pages.
- API: added SQLite-based usage logging (hashed IP, file type, size, duration, success).
- Benchmarks: added IEEE style DOCX case and refreshed comparison assets/reports.
Full Changelog: v0.23.0...v0.24.0
v0.23.0
What's Changed (v0.22.0 → v0.23.0)
DOCX Enhancements
- Footnote support: Full parsing & rendering of footnotes with separator lines and proper numbering
- Floating textbox: Added hAlign Align support for
<wsp>shapes - SDT (Structured Document Tag): Recursive unwrapping of
<w:sdt>content for richer document fidelity - Orphaned list labels: Correct rendering when list paragraphs lack explicit text runs
- Wrap-top-and-bottom images: Layout mode now supported so images don't overlap text
- Header top-margin fix: Ensures first-page content doesn't collide with headers
XLSX / Excel Enhancements
- Bold prefix length: Accurate column-width calculation when cells mix bold and normal text
- Verdana-specific font widths: Pixel-perfect column sizing for Verdana (commonly used in Excel defaults)
- Cell indent rendering: Respects indent attribute for left-padded cells
- Wrapped-text clip: Long wrapped text is now clipped to cell bounds instead of overflowing
PDF Writer
- Embedded font width measurement: Improved glyph width calculation for TrueType fonts embedded in output PDF
CI / CD
- NativeAOT cross-platform CLI binaries: Added
release-aot.ymlworkflow — automatically builds and attaches self-contained CLI binaries for 6 platforms on every release
v0.22.0
Release v0.22.0
Includes cross-platform CLI AOT binaries for Windows/Linux/macOS (x64/arm64)