返回资讯中心
外部精选
软件工程
#开发者实时流

Show HN: Bhowra Ink – Serverless HTML to PDF for Azure Functions and Lambda

Generate the human-readable invoice PDF that modern e-invoicing mandates require —

Hacker News 最新dillu_spur2026/10/21 · 25 天前11 分钟阅读

以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。

Generate the human-readable invoice PDF that modern e-invoicing mandates require — with the structured XML embedded and a scannable QR code, all in pure C#.

PDF/A-3 hybrid

Archival PDF with your CII / UBL XML embedded (/AFRelationship), the form ZATCA requires when sharing an invoice with the buyer.

EU Factur-X / ZUGFeRD

Embed factur-x.xml at the right conformance profile. The PDF is the legal invoice — compliant with EN 16931 and XRechnung.

ISO/IEC 18004 QR generator (byte mode, versions 1–40, EC L/M/Q/H) built in — no extra library needed for the ZATCA TLV QR or any other QR-coded document.

Right-to-left & Arabic

Production-grade shaping and bidi layout for bilingual GCC invoices. Verified on ZATCA tax invoices and UAE/Saudi payslips — no extra packages required.

Bhowra.Ink renders the invoice PDF and embeds your XML. Signing and tax-authority submission remain your pipeline’s responsibility.

Spec-correct parser with the real error-recovery algorithms (adoption agency, foster parenting), the HTML5 named-entity table, <template> handling, optional-end-tag rules, tables with rowspan/colspan, lists, semantic elements.

TrueType, OpenType, WOFF and WOFF2 font embedding; automatic subsetting for small files; full-Unicode Type0/CIDFontType2 embedding with ToUnicode maps so text in the PDF copies, searches and extracts correctly.

CSS Grid with a unified track engine — fr/minmax()/auto tracks, align-content, spans that grow the implicit grid, and content-sized columns when no grid-template-columns is given. Flexbox with row/column direction, wrapping, and every justify-content mode including space-between/around/evenly. A design wider than the page shrinks to fit automatically (ConverterProperties.PageScaling), with links and bookmarks scaled to match.

<link rel="stylesheet"> and @import are fetched and folded into the cascade in document order. Local files by default; remote fetches are opt-in and SSRF-guarded &mdash; private/link-local/ cloud-metadata addresses blocked, redirects re-validated, per-file and total byte caps, import-cycle and depth guards.

JPEG (grayscale/RGB/CMYK with Exif), PNG (every bit depth, interlacing, full alpha), WebP (lossless / VP8L), GIF, BMP, inline SVG shapes and strokes, EXIF auto-orientation, parallel async downloads, and a pluggable ImageFetcher delegate for private blob storage. TIFF and JPEG-2000 not decoded. Also available standalone: ImageToPdf turns one or more images directly into a PDF — Contain/Cover/Stretch/None fit modes, one image per page, no HTML required.

Linear, radial and conic gradients rendered as true PDF shadings (not rasterized), CSS transforms and filter: blur(), box-shadow with real Gaussian blur, per-corner border radius, per-side dashed/dotted/double borders, outlines, opacity, text-overflow: ellipsis, word-break/overflow-wrap, ::before/::after with content counters, SVG clipPath / <use> / <symbol>.

@page size/margins/margin-boxes, page counters, running headers via string-set, named page sizes (A4/Letter/Legal/landscape), headers/footers in HTML styled by your document's own CSS, multi-column flow (columns/column-rule), widows/orphans, break-inside: avoid, repeating table headers. Note: border-collapse: collapse shared-border dedup is not yet optimized.

sRGB, device-cmyk() for print workflows, embedded sRGB ICC output intent for PDF/A.

Versions 1.4–2.0, classic and cross-reference-stream xref, Flate compression (50–75% smaller files), document metadata + XMP, encryption (AES-256 and legacy RC4), watermarks, bookmarks/outline, link annotations, embedded file attachments, tagged structure trees for accessibility, PDF/A-2B and PDF/UA-1 modes. Fillable AcroForm fields (radio, checkbox, text, dropdown) generated from HTML inputs.

Per-developer annual subscription. Unlimited deployments on every tier. Full-featured free trial — no sales call required.

Site and OEM answer different questions. Site is about how many people write the code. OEM is about who runs it. If the DLL executes on a machine your organization doesn’t operate, you need OEM — whatever your team size.

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →