{"id":47673783,"url":"https://github.com/carlos7ags/folio","last_synced_at":"2026-05-31T17:00:35.548Z","repository":{"id":344848954,"uuid":"1182006348","full_name":"carlos7ags/folio","owner":"carlos7ags","description":"PDF library for Go: layout engine, HTML to PDF, forms, signatures, barcodes, and PDF/A. Apache 2.0.","archived":false,"fork":false,"pushed_at":"2026-05-30T15:22:07.000Z","size":11490,"stargazers_count":794,"open_issues_count":17,"forks_count":41,"subscribers_count":10,"default_branch":"main","last_synced_at":"2026-05-30T16:16:45.714Z","etag":null,"topics":["acroform","apache-2-0","barcode","digital-signatures","document-generation","folio-pdf","go","golang","html-to-pdf","html-to-pdf-converter","pdf","pdf-a","pdf-generation","pdf-library","wasm"],"latest_commit_sha":null,"homepage":"https://playground.foliopdf.dev","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/carlos7ags.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-14T23:07:55.000Z","updated_at":"2026-05-30T15:21:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/carlos7ags/folio","commit_stats":null,"previous_names":["carlos7ags/folio"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/carlos7ags/folio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlos7ags%2Ffolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlos7ags%2Ffolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlos7ags%2Ffolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlos7ags%2Ffolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/carlos7ags","download_url":"https://codeload.github.com/carlos7ags/folio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/carlos7ags%2Ffolio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33739861,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acroform","apache-2-0","barcode","digital-signatures","document-generation","folio-pdf","go","golang","html-to-pdf","html-to-pdf-converter","pdf","pdf-a","pdf-generation","pdf-library","wasm"],"created_at":"2026-04-02T13:13:43.325Z","updated_at":"2026-05-31T17:00:35.536Z","avatar_url":"https://github.com/carlos7ags.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Folio\n\nA PDF library for Go — layout engine, HTML to PDF, text shaping for\nleft-to-right, right-to-left, Indic, and CJK scripts, redaction, forms,\ndigital signatures, barcodes, page import, and PDF/A compliance.\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/carlos7ags/folio.svg)](https://pkg.go.dev/github.com/carlos7ags/folio)\n[![CI](https://github.com/carlos7ags/folio/actions/workflows/ci.yml/badge.svg)](https://github.com/carlos7ags/folio/actions)\n[![Apache 2.0](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE)\n\n**[Try it live in your browser](https://playground.foliopdf.dev/)**\n\n![Folio Playground](assets/playground.png)\n\n---\n\n## Install\n\n```bash\ngo get github.com/carlos7ags/folio\n```\n\nRequires Go 1.25+. Three external dependencies, all from the Go\n`x/` extended standard library: `golang.org/x/image` (font parsing,\nTIFF decoding), `golang.org/x/net` (HTML parsing), and\n`golang.org/x/text` (Unicode bidirectional algorithm for RTL text).\n\n## Language SDKs\n\n| Language | Package | Status |\n|----------|---------|--------|\n| **Go** | `go get github.com/carlos7ags/folio` | This repo |\n| **Java** | [`dev.foliopdf:folio-java`](https://central.sonatype.com/artifact/dev.foliopdf/folio-java) | [folio-java](https://github.com/carlos7ags/folio-java) |\n| **WASM** | [Playground](https://playground.foliopdf.dev) | Built-in |\n\n---\n\n## Quick Start\n\n```go\npackage main\n\nimport (\n    \"github.com/carlos7ags/folio/document\"\n    \"github.com/carlos7ags/folio/font\"\n    \"github.com/carlos7ags/folio/layout\"\n)\n\nfunc main() {\n    doc := document.NewDocument(document.PageSizeA4)\n    doc.Info.Title = \"Hello World\"\n    doc.SetAutoBookmarks(true)\n\n    doc.Add(layout.NewHeading(\"Hello, Folio!\", layout.H1))\n    doc.Add(layout.NewParagraph(\n        \"A PDF generated from Go code.\",\n        font.Helvetica, 12,\n    ))\n\n    doc.Save(\"hello.pdf\")\n}\n```\n\n---\n\n## HTML to PDF\n\nPass an HTML string to the converter and receive a `[]layout.Element`\nready to add to a document. Runs in-process — no subprocess, no\nheadless browser, no external service.\n\n```go\nimport (\n    \"github.com/carlos7ags/folio/document\"\n    \"github.com/carlos7ags/folio/html\"\n)\n\ndoc := document.NewDocument(document.PageSizeLetter)\nelems, _ := html.Convert(`\n    \u003ch1\u003eInvoice #1042\u003c/h1\u003e\n    \u003cp\u003eBill to: \u003cstrong\u003eAcme Corp\u003c/strong\u003e\u003c/p\u003e\n    \u003ctable border=\"1\"\u003e\n        \u003ctr\u003e\u003cth\u003eItem\u003c/th\u003e\u003cth\u003eAmount\u003c/th\u003e\u003c/tr\u003e\n        \u003ctr\u003e\u003ctd\u003eConsulting\u003c/td\u003e\u003ctd\u003e$1,200\u003c/td\u003e\u003c/tr\u003e\n    \u003c/table\u003e\n`, nil)\nfor _, e := range elems {\n    doc.Add(e)\n}\ndoc.Save(\"invoice.pdf\")\n```\n\nSupports 40+ HTML elements, inline and `\u003cstyle\u003e` block CSS, flexbox, CSS grid,\nSVG, named/hex/rgb colors, `@page` rules, and tables with colspan.\n\nFor the full list of recognized CSS properties, accepted value forms, and\nknown unsupported features, see [docs/CSS_SUPPORT.md](docs/CSS_SUPPORT.md).\n\n**[Try HTML to PDF live in your browser](https://playground.foliopdf.dev/)**\n\n---\n\n## Layout Engine\n\nFolio uses a plan-based layout engine — layout is a pure function with no\nmutation during rendering. Elements can be laid out multiple times safely,\nwhich makes page break splitting clean and predictable.\n\n```go\ndoc := document.NewDocument(document.PageSizeLetter)\ndoc.Info.Title = \"Quarterly Report\"\ndoc.Info.Author = \"Finance Team\"\ndoc.SetAutoBookmarks(true)\n\ndoc.Add(layout.NewHeading(\"Q3 Revenue Report\", layout.H1))\n\ndoc.Add(layout.NewParagraph(\"Revenue grew 23% year over year.\",\n    font.Helvetica, 12).\n    SetAlign(layout.AlignJustify).\n    SetSpaceAfter(10))\n\ntbl := layout.NewTable().SetAutoColumnWidths()\nh := tbl.AddHeaderRow()\nh.AddCell(\"Product\", font.HelveticaBold, 10)\nh.AddCell(\"Units\", font.HelveticaBold, 10)\nh.AddCell(\"Revenue\", font.HelveticaBold, 10)\n\nr := tbl.AddRow()\nr.AddCell(\"Widget A\", font.Helvetica, 10)\nr.AddCell(\"1,200\", font.Helvetica, 10)\nr.AddCell(\"$48,000\", font.Helvetica, 10)\ndoc.Add(tbl)\n\ndoc.Save(\"report.pdf\")\n```\n\n### Layout Elements\n\n| Element | Description |\n|---|---|\n| `Paragraph` | Word-wrapped text with alignment, leading, orphans/widows |\n| `Heading` | H1-H6 with preset sizes, spacing, and auto-bookmarks |\n| `Table` | Borders, colspan, rowspan, header repetition, auto-column widths |\n| `List` | Bullet, numbered, Roman, alpha, nested |\n| `Div` | Container with borders, background, padding |\n| `Flex` | Flexbox layout with direction, wrap, alignment |\n| `Image` | JPEG, PNG, TIFF with aspect ratio preservation |\n| `LineSeparator` | Horizontal rule (solid, dashed, dotted) |\n| `TabbedLine` | Tab stops with dot leaders (for TOCs) |\n| `Link` | Clickable text with URL or internal destination |\n| `Float` | Left/right floating with text wrap |\n| `Columns` | Multi-column layout with automatic balancing |\n| `AreaBreak` | Explicit page break |\n| `BarcodeElement` | Code128, QR, EAN-13 inline in layout |\n\n---\n\n## Styled Text\n\n```go\np := layout.NewStyledParagraph(\n    layout.NewRun(\"Normal text \", font.Helvetica, 12),\n    layout.NewRun(\"bold \", font.HelveticaBold, 12),\n    layout.NewRun(\"colored and underlined\", font.Helvetica, 12).\n        WithColor(layout.ColorRed).\n        WithUnderline(),\n)\ndoc.Add(p)\n```\n\n---\n\n## Internationalization\n\nFolio ships script-specific shapers and the OpenType tables they\nconsume:\n\n| Script family | Pipeline |\n|---|---|\n| Left-to-right (Latin, Cyrillic, Greek) | Standard glyph run with GSUB ligatures and GPOS kerning |\n| Right-to-left (Arabic, Hebrew, Farsi) | UAX #9 bidi, Arabic contextual shaping (init/medi/fina/isol) via GSUB, kashida justification, `/ActualText` markers for copy/paste fidelity |\n| Indic (Devanagari — Hindi, Sanskrit, Marathi, Nepali) | Five-phase OpenType pipeline: reordering, half-form substitution, conjunct formation |\n| CJK (Japanese, Chinese, Korean) | Embedded TrueType subset, line-breaking with JIS X 4051 kinsoku shori |\n\nThe layout engine segments text by Unicode script (UAX #24), splits by\ngrapheme cluster (UAX #29), and dispatches to the appropriate shaper.\nHTML inherits the same pipeline; add `dir=\"rtl\"` or `direction: rtl`\nto flip paragraph and list direction.\n\nSee [`examples/rtl`](examples/rtl/) and [`examples/indic`](examples/indic/)\nfor runnable demos.\n\n---\n\n## Tables\n\n```go\ntbl := layout.NewTable().SetAutoColumnWidths()\n// Or explicit widths:\ntbl.SetColumnUnitWidths([]layout.UnitValue{\n    layout.Pct(30), layout.Pct(70),\n})\n\n// Header rows repeat automatically on page breaks\nh := tbl.AddHeaderRow()\nh.AddCell(\"Name\", font.HelveticaBold, 10)\nh.AddCell(\"Value\", font.HelveticaBold, 10)\n\nr := tbl.AddRow()\ncell := r.AddCell(\"Styled cell\", font.Helvetica, 10)\ncell.SetBorders(layout.AllBorders(layout.DashedBorder(1, layout.ColorBlue)))\ncell.SetBackground(layout.ColorLightGray)\ncell.SetVAlign(layout.VAlignMiddle)\n```\n\n---\n\n## Barcodes\n\n```go\nimport \"github.com/carlos7ags/folio/barcode\"\n\nqr, _ := barcode.NewQR(\"https://example.com\")\ndoc.Add(layout.NewBarcodeElement(qr, 100).SetAlign(layout.AlignCenter))\n\nbc, _ := barcode.NewCode128(\"SHIP-2024-001\")\ndoc.Add(layout.NewBarcodeElement(bc, 200))\n\nean, _ := barcode.NewEAN13(\"590123412345\")\ndoc.Add(layout.NewBarcodeElement(ean, 150))\n```\n\n---\n\n## Interactive Forms\n\n```go\nimport \"github.com/carlos7ags/folio/forms\"\n\nform := forms.NewAcroForm()\nform.Add(forms.NewTextField(\"name\", [4]float64{72, 700, 300, 720}, 0))\nform.Add(forms.NewCheckbox(\"agree\", [4]float64{72, 670, 92, 690}, 0, false))\nform.Add(forms.NewDropdown(\"role\", [4]float64{72, 640, 250, 660}, 0,\n    []string{\"Developer\", \"Designer\", \"Manager\"}))\n\ndoc.SetAcroForm(form)\ndoc.Save(\"form.pdf\")\n```\n\n---\n\n## Digital Signatures\n\n```go\nimport \"github.com/carlos7ags/folio/sign\"\n\nsigner, _ := sign.NewLocalSigner(privateKey, []*x509.Certificate{cert})\nsigned, _ := sign.SignPDF(pdfBytes, sign.Options{\n    Signer:   signer,\n    Level:    sign.LevelBB,\n    Reason:   \"Approved\",\n    Location: \"New York\",\n})\nos.WriteFile(\"signed.pdf\", signed, 0644)\n```\n\nSupports PAdES B-B, B-T (timestamped), and B-LT (long-term validation with\nembedded OCSP responses and CRLs). Also supports external signers (HSM, KMS)\nvia the `Signer` interface. Uses Go stdlib crypto.\n\n---\n\n## Reading and Merging PDFs\n\n```go\nimport \"github.com/carlos7ags/folio/reader\"\n\n// Read\nr, _ := reader.Load(\"document.pdf\")\nfmt.Println(\"Pages:\", r.PageCount())\npage, _ := r.Page(0)\ntext, _ := page.ExtractText()\n\n// Merge\nr1, _ := reader.Load(\"doc1.pdf\")\nr2, _ := reader.Load(\"doc2.pdf\")\nm, _ := reader.Merge(r1, r2)\nm.SaveTo(\"merged.pdf\")\n```\n\n---\n\n## Redaction\n\nPermanently remove sensitive text from PDFs — not just a visual overlay,\nbut actual removal of text operators from content streams.\n\n```go\n// By text search\nm, _ := reader.RedactText(r, []string{\"John Doe\", \"555-12-3456\"}, nil)\nm.SaveTo(\"redacted.pdf\")\n\n// By regex (e.g. SSNs)\nre := regexp.MustCompile(`\\d{3}-\\d{2}-\\d{4}`)\nm, _ := reader.RedactPattern(r, re, \u0026reader.RedactOptions{\n    OverlayText: \"REDACTED\",\n    StripMetadata: true,\n})\nm.SaveTo(\"redacted.pdf\")\n```\n\nCharacter-level precision — partial words within a line are removed without\naffecting adjacent text. See [`examples/redact/`](examples/redact/) for a full demo.\n\n---\n\n## Page Import\n\nLoad existing PDFs as templates and add dynamic content on top — the standard\nworkflow for invoices, receipts, certificates, and letterheads.\n\n```go\nr, _ := reader.Load(\"template.pdf\")\nimp, _ := reader.ExtractPageImport(r, 0)\n\ndoc := document.NewDocument(document.PageSizeLetter)\np := doc.AddPage()\np.ImportPage(imp.ContentStream, imp.Resources, imp.Width, imp.Height)\np.AddText(\"Invoice #1042\", font.HelveticaBold, 14, 72, 700)\ndoc.Save(\"filled.pdf\")\n```\n\nAll resources (fonts, images, color spaces) are resolved and\nself-contained in the imported page.\nSee [`examples/import-page/`](examples/import-page/) for a receipt-filling demo.\n\n---\n\n## Headers, Footers, Watermarks\n\n```go\ndoc.SetFooter(func(ctx document.PageContext, page *document.Page) {\n    text := fmt.Sprintf(\"Page %d of %d\", ctx.PageIndex+1, ctx.TotalPages)\n    page.AddText(text, font.Helvetica, 9, 280, 30)\n})\n\ndoc.SetWatermarkConfig(document.WatermarkConfig{\n    Text:     \"DRAFT\",\n    FontSize: 72,\n    Opacity:  0.15,\n    Angle:    45,\n})\n```\n\n---\n\n## Standards and Compliance\n\n```go\ndoc.SetTagged(true)   // PDF/UA — screen readers, text extraction\n\ndoc.SetPdfA(document.PdfAConfig{Level: document.PdfA2B}) // archival\n\ndoc.SetAutoBookmarks(true) // auto-generate from headings\n\ndoc.SetPageLabels(\n    document.PageLabelRange{PageIndex: 0, Style: document.LabelRomanLower},\n    document.PageLabelRange{PageIndex: 4, Style: document.LabelDecimal},\n)\n```\n\n---\n\n## Colors\n\n```go\nlayout.ColorRed               // 16 named colors\nlayout.RGB(0.2, 0.4, 0.8)    // RGB\nlayout.CMYK(1, 0, 0, 0)      // CMYK for print\nlayout.Hex(\"#FF8800\")         // hex string\nlayout.Gray(0.5)              // grayscale\n```\n\n---\n\n## CLI\n\n```bash\ngo install github.com/carlos7ags/folio/cmd/folio@latest\n\nfolio merge -o combined.pdf doc1.pdf doc2.pdf\nfolio info document.pdf\nfolio text document.pdf\nfolio blank -o empty.pdf -size a4 -pages 5\n```\n\n---\n\n## C Shared Library\n\nFolio exports a C ABI (`libfolio.so` / `.dylib` / `.dll`) with 372 functions,\nusable from Python, Ruby, C#, Java, or any language with FFI support.\n\n```bash\nCGO_ENABLED=1 go build -buildmode=c-shared -o libfolio.so ./export/\n```\n\n```c\n#include \"folio.h\"\n\nuint64_t doc = folio_document_new(595.28, 841.89);\nuint64_t page = folio_document_add_page(doc);\nfolio_page_add_text(page, \"Hello from C\", folio_font_helvetica(), 24, 72, 750);\nfolio_document_save(doc, \"hello.pdf\");\nfolio_document_free(doc);\n```\n\nPre-built binaries for Linux, macOS, and Windows are attached to each\n[GitHub release](https://github.com/carlos7ags/folio/releases).\n\n---\n\n## Performance\n\nAll benchmarks run the full pipeline: HTML parsing, CSS cascade, layout,\nand PDF serialization. Each document uses real styling: grid, flexbox,\nborder-radius, alternating rows, and page breaks. No headless browser,\nno external process.\n\nBenchmarks on Apple M1 Pro (`go test -bench`):\n\n| Benchmark | What it generates | Time |\n|-----------|-------------------|------|\n| HTMLInvoice | Styled invoice: CSS Grid, flexbox, cards, 3-row table | 1.1 ms |\n| HTMLReport | 2-page quarterly report: KPI cards, 3 tables, page break | 7.9 ms |\n| HTMLTableHeavy100 | 100-row, 5-column data table with alternating rows | 11.3 ms |\n| BlankPage | Empty page + PDF serialization | 5.4 µs |\n| SingleParagraph | One paragraph, end-to-end | 130 µs |\n| Table10x3 | 10-row table via layout API | 400 µs |\n\nReproduce locally:\n\n```bash\ngo test -run='^$' -bench=. -benchmem ./document/\n```\n\n### Output size\n\nThe writer offers five opt-in passes via `document.WriteOptions`. The\nzero value preserves byte-identical output; each toggle refuses on\nencrypted documents.\n\n```go\ndoc.SaveWithOptions(\"out.pdf\", document.WriteOptions{\n    UseXRefStream:       true, // §7.5.8 cross-reference stream\n    UseObjectStreams:    true, // §7.5.7 compressed object streams\n    OrphanSweep:         true, // drop unreachable objects\n    CleanContentStreams: true, // §7.8 empty q/Q, identity cm\n    DeduplicateObjects:  true, // merge byte-identical objects\n    RecompressStreams:   true, // re-Flate at BestCompression\n})\n```\n\nSavings depend on document shape. Text-heavy documents generated by\nthe layout engine are already Flate-compressed, so the win is modest.\nDocuments assembled by importing pages from parsed source PDFs see\nthe largest reduction because imported content streams arrive in\nraw form:\n\n| Fixture | Default | xref + obj | Full stack | Saved |\n|---|---:|---:|---:|---:|\n| Text-heavy report (25 sections) | 6913 B | 5621 B | 5555 B | 19.6% |\n| 50 empty pages | 6317 B | 932 B | 535 B | 91.5% |\n| 60-row data table | 8063 B | 7785 B | 7774 B | 3.6% |\n| Imported text-heavy | 40569 B | 40073 B | 6071 B | 85.0% |\n\nRun [`examples/optimize`](examples/optimize/) to reproduce these numbers.\n\n---\n\n## Architecture\n\n```\nElement.PlanLayout(area) -\u003e LayoutPlan (immutable)\nPlacedBlock.Draw(ctx, x, y) -\u003e PDF operators\n```\n\n- **No mutation** during layout — elements can be laid out multiple times safely\n- **Content splitting** across pages via overflow elements\n- **Intrinsic sizing** via MinWidth/MaxWidth for auto-column tables\n- **Deterministic output** — byte-for-byte reproducible PDFs\n- **Three external dependencies** — `golang.org/x/image`, `golang.org/x/net`, `golang.org/x/text`\n\n---\n\n## Package Structure\n\n```\nfolio/\n  core/             PDF object model\n  content/          Content stream builder\n  document/         Document API (pages, outlines, PDF/A, watermarks, page import, WriteOptions)\n  font/             Standard 14 + TrueType/OpenType embedding, subsetting, GSUB, GPOS\n  image/            JPEG, PNG, TIFF, WebP, GIF\n  layout/           Layout engine: elements, rendering, bidi, Arabic/Devanagari shaping, CJK\n  barcode/          Code128, QR, EAN-13\n  forms/            AcroForms (text, checkbox, radio, dropdown, signature)\n  html/             HTML + CSS to PDF conversion\n  svg/              SVG to PDF rendering\n  sign/             Digital signatures (PAdES, CMS, timestamps)\n  reader/           PDF parser, text extraction, merge, redaction, page import\n  tmpl/             html/template integration: execute a template, then convert\n  unicode/grapheme/ UAX #29 grapheme clusters\n  export/           C shared library (372 exported functions)\n  cmd/folio/        CLI tool\n```\n\n---\n\n## Examples\n\nEach [`examples/`](examples/) subdirectory is a self-contained `go run` demo:\n\n| Example | What it shows |\n|---|---|\n| [`hello`](examples/hello/) | Minimal one-page PDF |\n| [`rtl`](examples/rtl/) | Right-to-left script shaping (Arabic, Hebrew) |\n| [`indic`](examples/indic/) | Indic script shaping (Devanagari first) |\n| [`cjk`](examples/cjk/) | Chinese, Japanese, Korean text with font subsetting |\n| [`fonts`](examples/fonts/) | Standard, custom, and Unicode fonts (CJK, Cyrillic) |\n| [`links`](examples/links/) | Hyperlinks, bookmarks, internal navigation |\n| [`forms`](examples/forms/) | Interactive AcroForm fields |\n| [`html-to-pdf`](examples/html-to-pdf/) | Rich HTML+CSS report with flexbox and tables |\n| [`import-page`](examples/import-page/) | Load existing PDF as template, fill in data |\n| [`merge`](examples/merge/) | Parse, merge, and extract text |\n| [`optimize`](examples/optimize/) | Cross-reference and object stream output, side-by-side size comparison |\n| [`redact`](examples/redact/) | Permanently remove sensitive text |\n| [`report`](examples/report/) | Multi-page report with layout API |\n| [`sign`](examples/sign/) | PAdES digital signature |\n| [`zugferd`](examples/zugferd/) | PDF/A-3B invoice with Factur-X XML |\n\n---\n\n## Roadmap\n\n- [ ] GPOS LookupType 6 (mark-to-mark) for stacked diacritics (#206)\n- [ ] Multi-face `font.Fallback` for paragraphs mixing four or more scripts (#192)\n- [ ] Template library — invoice, report, certificate, resume\n- [ ] Hosted cloud API — POST HTML, get PDF\n- [ ] .NET SDK via P/Invoke\n\n---\n\n## Contributing\n\nContributions welcome. Please open an issue before submitting large PRs.\n\n```bash\ngit clone https://github.com/carlos7ags/folio\ncd folio\ngo test ./...\n```\n\n---\n\n## License\n\nApache License 2.0 — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlos7ags%2Ffolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcarlos7ags%2Ffolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcarlos7ags%2Ffolio/lists"}