ninjarobot/FsPdf
55.9
Adequate · 2 October 2026
1.2k
lines of production code
F#
primary language
1
measurement over time
What this system is
FsPdf is a .NET library that enables programmatic PDF generation using F\#, featuring a high-level DSL for document layout, text wrapping, and shape drawing. It supports multi-page pagination, embedded TrueType fonts, and Adobe Font Metrics for accurate text rendering without external dependencies. The system provides primitives for creating structured documents with paragraphs, page breaks, and various geometric shapes.
Features
Embedded Adobe Font Metrics for Courier and Helvetica families
The \afm\ directory now includes embedded Adobe Font Metrics (AFM) files for the Courier (Regular, Bold, Oblique, Bold Oblique) and Helvetica (Regular, Bold, Oblique, Bold Oblique) typefaces. These files provide the necessary character width and bounding box data to enable accurate text measurement and line wrapping within the application, replacing any previous reliance on external resources or approximations.
afm · high confidence
Initial release of FsPdf with core PDF generation capabilities
This entry introduces the FsPdf library, enabling developers to generate PDFs programmatically using F\# without external dependencies beyond a .NET Standard 2.0 runtime. The release includes a higher-level DSL for simple page layout, shapes, and formatted text, with specific support for word wrapping. It also embeds Adobe Font Metrics (AFM) to allow accurate text measurement and wrapping. The project structure is established with a solution file targeting Visual Studio 16, configured for the .NET SDK 10.0.202, and includes MIT licensing and CI badges.
(repo-wide) · high confidence
Initial release of FsPdf with multi-page document generation and TrueType font embedding
This change introduces the FsPdf library, providing a high-level DSL for building PDF documents with automatic multi-page pagination, text wrapping, and layout management. Users can now create documents using paragraphs and page breaks, with support for standard media sizes (Letter, A4, etc.) and custom dimensions. The library includes drawing primitives for shapes like rectangles, circles, and triangles, as well as specific shapes like holiday candles. A key feature is the support for embedding TrueType fonts, allowing for rich text rendering beyond basic Type1 fonts. The implementation is structured into separate modules for font metrics (Afm), document layout (Document), PDF instructions (Instructions), and shape definitions (Shapes).
src/FsPdf · high confidence
Test coverage
Expanded test coverage for PDF generation features
The test suite in tests/FsPdf.Tests has been significantly expanded to cover new PDF generation capabilities. Tests now verify wrapped text rendering using embedded font metrics, the drawing of various shapes (including rectangles, circles, and holiday candles), and the use of multiple fonts (Times-Roman and Helvetica). The test infrastructure was also updated to use the higher-level FsPdf API and layout modules instead of manual PDF object construction.
tests · high confidence
Dependencies
Migrate from Paket to native .NET SDK package management and upgrade test framework
The project has removed the Paket dependency manager (deleting paket.dependencies and paket.lock) and switched to native .NET SDK package references. The main library (FsPdf) now uses FSharp.Core 5.0.0 and includes SourceLink for symbol publishing, while the test project has been upgraded to .NET 10.0 and updated to use xUnit 2.9.3, Microsoft.NET.Test.Sdk 18.0.1, and coverlet.collector 6.0.4.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 56 → 56 (-0.1)
- Rubric changed (rubric-2026.09.13 → rubric-2026.10.1) — scores are not directly comparable.
Lenses
- Code Health 95 → 95 (+0.0)
- Architecture 95 → 94 (-1.1)
- Maturity 43 → 43 (+0.0)
- Readiness 51 → 51 (+0.0)
- Security 77 → 77 (+0.0)
Resolved (8)
- Documentation: no usage examples (README.md)
- Low coverage: Afm.fs (Afm.fs)
- Low coverage: Document.fs (Document.fs)
- Low coverage: Instructions.fs (Instructions.fs)
- Low coverage: Layout.fs (Layout.fs)
- Low coverage: Pdf.fs (Pdf.fs)
- Low coverage: Shapes.fs (Shapes.fs)
- Low coverage: TrueType.fs (TrueType.fs)
New (7)
- Low coverage: src/FsPdf/Afm.fs (src/FsPdf/Afm.fs)
- Low coverage: src/FsPdf/Document.fs (src/FsPdf/Document.fs)
- Low coverage: src/FsPdf/Instructions.fs (src/FsPdf/Instructions.fs)
- Low coverage: src/FsPdf/Layout.fs (src/FsPdf/Layout.fs)
- Low coverage: src/FsPdf/Pdf.fs (src/FsPdf/Pdf.fs)
- Low coverage: src/FsPdf/Shapes.fs (src/FsPdf/Shapes.fs)
- Low coverage: src/FsPdf/TrueType.fs (src/FsPdf/TrueType.fs)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
ninjarobot/FsPdf was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit b9eac0d76945e77573d327732a6be36b46336f94 — the exact code this score is about.
- Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-351388015767.