refactor: Rename zpdf to zcatpdf for consistency with zcat* family
- Renamed all references from zpdf to zcatpdf
- Module import: @import("zcatpdf")
- Consistent with zcatui, zcatgui naming convention
- All lowercase per Zig standards
Note: Directory rename (zpdf -> zcatpdf) and Forgejo repo rename
should be done manually after this commit.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
3826cbaed4
commit
f09922076f
27 changed files with 188 additions and 188 deletions
26
CLAUDE.md
26
CLAUDE.md
|
|
@ -1,4 +1,4 @@
|
||||||
# zpdf - Generador PDF para Zig
|
# zcatpdf - Generador PDF para Zig
|
||||||
|
|
||||||
> **Ultima actualizacion**: 2025-12-09
|
> **Ultima actualizacion**: 2025-12-09
|
||||||
> **Lenguaje**: Zig 0.15.2
|
> **Lenguaje**: Zig 0.15.2
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
## Descripcion del Proyecto
|
## Descripcion del Proyecto
|
||||||
|
|
||||||
**zpdf** es una libreria pura Zig para generacion de documentos PDF. Compila a un binario unico con minimas dependencias.
|
**zcatpdf** es una libreria pura Zig para generacion de documentos PDF. Compila a un binario unico con minimas dependencias.
|
||||||
|
|
||||||
**Filosofia**:
|
**Filosofia**:
|
||||||
- Minimas dependencias (libdeflate para compresion)
|
- Minimas dependencias (libdeflate para compresion)
|
||||||
|
|
@ -176,7 +176,7 @@
|
||||||
## Arquitectura
|
## Arquitectura
|
||||||
|
|
||||||
```
|
```
|
||||||
zpdf/
|
zcatpdf/
|
||||||
├── CLAUDE.md # Documentacion del proyecto
|
├── CLAUDE.md # Documentacion del proyecto
|
||||||
├── build.zig # Sistema de build
|
├── build.zig # Sistema de build
|
||||||
├── src/
|
├── src/
|
||||||
|
|
@ -252,9 +252,9 @@ zpdf/
|
||||||
### Documento Basico
|
### Documento Basico
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
|
|
||||||
var doc = zpdf.Pdf.init(allocator, .{});
|
var doc = zcatpdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Mi Documento");
|
doc.setTitle("Mi Documento");
|
||||||
|
|
@ -270,14 +270,14 @@ try doc.save("output.pdf");
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
// cell() simple
|
// cell() simple
|
||||||
try page.cell(100, 20, "Hello", zpdf.Border.all, .center, true);
|
try page.cell(100, 20, "Hello", zcatpdf.Border.all, .center, true);
|
||||||
|
|
||||||
// multiCell con word wrap
|
// multiCell con word wrap
|
||||||
try page.multiCell(400, null, texto_largo, zpdf.Border.none, .left, false);
|
try page.multiCell(400, null, texto_largo, zcatpdf.Border.none, .left, false);
|
||||||
|
|
||||||
// Table helper
|
// Table helper
|
||||||
const widths = [_]f32{ 200, 100, 100 };
|
const widths = [_]f32{ 200, 100, 100 };
|
||||||
var table = zpdf.Table.init(page, .{
|
var table = zcatpdf.Table.init(page, .{
|
||||||
.col_widths = &widths,
|
.col_widths = &widths,
|
||||||
});
|
});
|
||||||
try table.header(&.{ "Producto", "Qty", "Precio" });
|
try table.header(&.{ "Producto", "Qty", "Precio" });
|
||||||
|
|
@ -371,7 +371,7 @@ try page.drawCode128(x, y, "ABC-12345", 50, 1.5); // height=50, module_width=1.
|
||||||
try page.drawCode128WithText(x, y, "ABC-12345", 50, 1.5, true);
|
try page.drawCode128WithText(x, y, "ABC-12345", 50, 1.5, true);
|
||||||
|
|
||||||
// QR Code 2D barcode
|
// QR Code 2D barcode
|
||||||
try page.drawQRCode(x, y, "HTTPS://GITHUB.COM", 100, zpdf.QRCode.ErrorCorrection.M);
|
try page.drawQRCode(x, y, "HTTPS://GITHUB.COM", 100, zcatpdf.QRCode.ErrorCorrection.M);
|
||||||
|
|
||||||
// Error correction levels:
|
// Error correction levels:
|
||||||
// .L - Low (7% recovery)
|
// .L - Low (7% recovery)
|
||||||
|
|
@ -434,13 +434,13 @@ try page.addInternalLink(2, 100, 700, 150, 20); // page 2
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
// Numeros de pagina
|
// Numeros de pagina
|
||||||
try zpdf.Pagination.addPageNumbers(&doc, .{
|
try zcatpdf.Pagination.addPageNumbers(&doc, .{
|
||||||
.format = "Page {PAGE} of {PAGES}",
|
.format = "Page {PAGE} of {PAGES}",
|
||||||
.position = .bottom_center,
|
.position = .bottom_center,
|
||||||
});
|
});
|
||||||
|
|
||||||
// Header con linea
|
// Header con linea
|
||||||
try zpdf.addHeader(&doc, "Documento", .{
|
try zcatpdf.addHeader(&doc, "Documento", .{
|
||||||
.draw_line = true,
|
.draw_line = true,
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
|
|
@ -748,10 +748,10 @@ $ZIG build test
|
||||||
|
|
||||||
```
|
```
|
||||||
/mnt/cello2/arno/re/recode/TEAM_STANDARDS/
|
/mnt/cello2/arno/re/recode/TEAM_STANDARDS/
|
||||||
git remote: git@git.reugenio.com:reugenio/zpdf.git
|
git remote: git@git.reugenio.com:reugenio/zcatpdf.git
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**zpdf - Generador PDF para Zig**
|
**zcatpdf - Generador PDF para Zig**
|
||||||
*v1.0 - RELEASE (FEATURE COMPLETE) - 2025-12-09*
|
*v1.0 - RELEASE (FEATURE COMPLETE) - 2025-12-09*
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# zpdf - Mejoras Futuras
|
# zcatpdf - Mejoras Futuras
|
||||||
|
|
||||||
> Este documento detalla las posibles mejoras y funcionalidades que podrían implementarse en versiones futuras de zpdf.
|
> Este documento detalla las posibles mejoras y funcionalidades que podrían implementarse en versiones futuras de zcatpdf.
|
||||||
> Fecha: 2025-12-09
|
> Fecha: 2025-12-09
|
||||||
> Versión actual: v1.0
|
> Versión actual: v1.0
|
||||||
|
|
||||||
|
|
@ -104,7 +104,7 @@ El módulo `src/security/` tiene implementado:
|
||||||
|
|
||||||
### Código de ejemplo (objetivo)
|
### Código de ejemplo (objetivo)
|
||||||
```zig
|
```zig
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{});
|
var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
pdf.setEncryption(.{
|
pdf.setEncryption(.{
|
||||||
.user_password = "user123",
|
.user_password = "user123",
|
||||||
.owner_password = "admin456",
|
.owner_password = "admin456",
|
||||||
|
|
@ -179,7 +179,7 @@ El módulo `src/forms/field.zig` define:
|
||||||
|
|
||||||
### Código de ejemplo (objetivo)
|
### Código de ejemplo (objetivo)
|
||||||
```zig
|
```zig
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{});
|
var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
var page = try pdf.addPage(.{});
|
var page = try pdf.addPage(.{});
|
||||||
|
|
||||||
try page.addTextField(.{
|
try page.addTextField(.{
|
||||||
|
|
@ -426,7 +426,7 @@ Si se retoma el desarrollo, este es el orden sugerido:
|
||||||
- [CommonMark Spec](https://spec.commonmark.org/)
|
- [CommonMark Spec](https://spec.commonmark.org/)
|
||||||
|
|
||||||
### Librerías de referencia
|
### Librerías de referencia
|
||||||
- [fpdf2 (Python)](https://github.com/py-pdf/fpdf2) - Base de inspiración para zpdf
|
- [fpdf2 (Python)](https://github.com/py-pdf/fpdf2) - Base de inspiración para zcatpdf
|
||||||
- [pdf-lib (JavaScript)](https://github.com/Hopding/pdf-lib) - Buena referencia para features
|
- [pdf-lib (JavaScript)](https://github.com/Hopding/pdf-lib) - Buena referencia para features
|
||||||
- [pdfkit (Node.js)](https://github.com/foliojs/pdfkit) - Implementación madura
|
- [pdfkit (Node.js)](https://github.com/foliojs/pdfkit) - Implementación madura
|
||||||
|
|
||||||
|
|
@ -438,4 +438,4 @@ Si se retoma el desarrollo, este es el orden sugerido:
|
||||||
---
|
---
|
||||||
|
|
||||||
*Documento generado: 2025-12-09*
|
*Documento generado: 2025-12-09*
|
||||||
*zpdf v1.0 - Feature Complete*
|
*zcatpdf v1.0 - Feature Complete*
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# zpdf - Plan de Implementacion Completo
|
# zcatpdf - Plan de Implementacion Completo
|
||||||
|
|
||||||
> **Creado**: 2025-12-08
|
> **Creado**: 2025-12-08
|
||||||
> **Version actual**: 0.5
|
> **Version actual**: 0.5
|
||||||
|
|
@ -273,7 +273,7 @@ test "parse RGBA PNG with alpha" {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -630,7 +630,7 @@ pub const Page = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -859,7 +859,7 @@ pub const Pdf = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -1082,7 +1082,7 @@ pub const Page = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -1234,7 +1234,7 @@ pub const Page = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -1420,7 +1420,7 @@ for (page.ext_gstates, 0..) |gs, i| {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -1641,7 +1641,7 @@ pub const Page = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -1864,7 +1864,7 @@ pub const Page = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -1895,7 +1895,7 @@ pub fn main() !void {
|
||||||
|
|
||||||
// QR con mas datos
|
// QR con mas datos
|
||||||
try page.drawText(300, 600, "QR Code (mas datos):");
|
try page.drawText(300, 600, "QR Code (mas datos):");
|
||||||
try page.drawQrCode(300, 450, "Hola mundo! Este es un ejemplo de QR Code generado con zpdf", .{
|
try page.drawQrCode(300, 450, "Hola mundo! Este es un ejemplo de QR Code generado con zcatpdf", .{
|
||||||
.module_size = 3,
|
.module_size = 3,
|
||||||
.ecc = .H,
|
.ecc = .H,
|
||||||
});
|
});
|
||||||
|
|
@ -2007,7 +2007,7 @@ pub const OutputProducer = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -2199,7 +2199,7 @@ pub const Page = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -2616,7 +2616,7 @@ pub const Page = struct {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
|
||||||
72
README.md
72
README.md
|
|
@ -1,12 +1,12 @@
|
||||||
# zpdf - PDF Generation Library for Zig
|
# zcatpdf - PDF Generation Library for Zig
|
||||||
|
|
||||||
A pure Zig library for creating PDF documents with minimal dependencies.
|
A pure Zig library for creating PDF documents with minimal dependencies.
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{});
|
var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
var page = try pdf.addPage(.{});
|
var page = try pdf.addPage(.{});
|
||||||
|
|
@ -35,12 +35,12 @@ pub fn main() !void {
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
Add zpdf to your `build.zig.zon`:
|
Add zcatpdf to your `build.zig.zon`:
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
.dependencies = .{
|
.dependencies = .{
|
||||||
.zpdf = .{
|
.zcatpdf = .{
|
||||||
.url = "https://git.reugenio.com/reugenio/zpdf/archive/v1.0.tar.gz",
|
.url = "https://git.reugenio.com/reugenio/zcatpdf/archive/v1.0.tar.gz",
|
||||||
.hash = "...",
|
.hash = "...",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -49,11 +49,11 @@ Add zpdf to your `build.zig.zon`:
|
||||||
In your `build.zig`:
|
In your `build.zig`:
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const zpdf_dep = b.dependency("zpdf", .{
|
const zcatpdf_dep = b.dependency("zcatpdf", .{
|
||||||
.target = target,
|
.target = target,
|
||||||
.optimize = optimize,
|
.optimize = optimize,
|
||||||
});
|
});
|
||||||
exe.root_module.addImport("zpdf", zpdf_dep.module("zpdf"));
|
exe.root_module.addImport("zcatpdf", zcatpdf_dep.module("zcatpdf"));
|
||||||
```
|
```
|
||||||
|
|
||||||
## Quick Reference
|
## Quick Reference
|
||||||
|
|
@ -85,14 +85,14 @@ exe.root_module.addImport("zpdf", zpdf_dep.module("zpdf"));
|
||||||
**File:** `src/pdf.zig`
|
**File:** `src/pdf.zig`
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
|
|
||||||
// Create document with default settings
|
// Create document with default settings
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{});
|
var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
// Create document with options
|
// Create document with options
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{
|
var pdf = zcatpdf.Pdf.init(allocator, .{
|
||||||
.page_size = .a4,
|
.page_size = .a4,
|
||||||
.orientation = .portrait,
|
.orientation = .portrait,
|
||||||
.unit = .pt,
|
.unit = .pt,
|
||||||
|
|
@ -228,7 +228,7 @@ try page.setFont(.times_roman, 11);
|
||||||
try page.setFont(.courier, 10);
|
try page.setFont(.courier, 10);
|
||||||
|
|
||||||
// Calculate string width
|
// Calculate string width
|
||||||
const width = zpdf.Font.helvetica.stringWidth("Hello", 12.0);
|
const width = zcatpdf.Font.helvetica.stringWidth("Hello", 12.0);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Available Fonts (Type1 built-in)
|
### Available Fonts (Type1 built-in)
|
||||||
|
|
@ -255,7 +255,7 @@ const width = zpdf.Font.helvetica.stringWidth("Hello", 12.0);
|
||||||
```zig
|
```zig
|
||||||
// Load TTF file
|
// Load TTF file
|
||||||
const font_data = try std.fs.cwd().readFileAlloc(allocator, "font.ttf", 10_000_000);
|
const font_data = try std.fs.cwd().readFileAlloc(allocator, "font.ttf", 10_000_000);
|
||||||
var ttf = try zpdf.TrueTypeFont.parse(allocator, font_data);
|
var ttf = try zcatpdf.TrueTypeFont.parse(allocator, font_data);
|
||||||
defer ttf.deinit();
|
defer ttf.deinit();
|
||||||
|
|
||||||
// Get font info
|
// Get font info
|
||||||
|
|
@ -281,20 +281,20 @@ const width = ttf.stringWidth("Hello", 12.0);
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
// Set colors
|
// Set colors
|
||||||
page.setFillColor(zpdf.Color.red);
|
page.setFillColor(zcatpdf.Color.red);
|
||||||
page.setStrokeColor(zpdf.Color.blue);
|
page.setStrokeColor(zcatpdf.Color.blue);
|
||||||
|
|
||||||
// RGB (0-255)
|
// RGB (0-255)
|
||||||
page.setFillColor(zpdf.Color.rgb(255, 128, 0));
|
page.setFillColor(zcatpdf.Color.rgb(255, 128, 0));
|
||||||
|
|
||||||
// Hex
|
// Hex
|
||||||
page.setFillColor(zpdf.Color.hex(0xFF8000));
|
page.setFillColor(zcatpdf.Color.hex(0xFF8000));
|
||||||
|
|
||||||
// Grayscale (0.0-1.0)
|
// Grayscale (0.0-1.0)
|
||||||
page.setFillColor(zpdf.Color.gray(0.5));
|
page.setFillColor(zcatpdf.Color.gray(0.5));
|
||||||
|
|
||||||
// CMYK (0.0-1.0)
|
// CMYK (0.0-1.0)
|
||||||
page.setFillColor(zpdf.Color.cmyk(0, 1, 1, 0)); // Red
|
page.setFillColor(zcatpdf.Color.cmyk(0, 1, 1, 0)); // Red
|
||||||
```
|
```
|
||||||
|
|
||||||
### Predefined Colors
|
### Predefined Colors
|
||||||
|
|
@ -442,12 +442,12 @@ try page.imageFit(img_idx, info, x, y, max_width, max_height);
|
||||||
```zig
|
```zig
|
||||||
const col_widths = [_]f32{ 200, 100, 100, 100 };
|
const col_widths = [_]f32{ 200, 100, 100, 100 };
|
||||||
|
|
||||||
var table = zpdf.Table.init(page, .{
|
var table = zcatpdf.Table.init(page, .{
|
||||||
.x = 50,
|
.x = 50,
|
||||||
.y = 700,
|
.y = 700,
|
||||||
.col_widths = &col_widths,
|
.col_widths = &col_widths,
|
||||||
.row_height = 20,
|
.row_height = 20,
|
||||||
.header_bg_color = zpdf.Color.hex(0xE0E0E0),
|
.header_bg_color = zcatpdf.Color.hex(0xE0E0E0),
|
||||||
.border = true,
|
.border = true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -559,10 +559,10 @@ try page.drawCode128WithText(x, y, "ABC-12345", height, module_width, show_text)
|
||||||
try page.drawQRCode(x, y, "https://example.com", size, error_correction);
|
try page.drawQRCode(x, y, "https://example.com", size, error_correction);
|
||||||
|
|
||||||
// Error correction levels
|
// Error correction levels
|
||||||
zpdf.QRCode.ErrorCorrection.L // 7% recovery
|
zcatpdf.QRCode.ErrorCorrection.L // 7% recovery
|
||||||
zpdf.QRCode.ErrorCorrection.M // 15% recovery
|
zcatpdf.QRCode.ErrorCorrection.M // 15% recovery
|
||||||
zpdf.QRCode.ErrorCorrection.Q // 25% recovery
|
zcatpdf.QRCode.ErrorCorrection.Q // 25% recovery
|
||||||
zpdf.QRCode.ErrorCorrection.H // 30% recovery
|
zcatpdf.QRCode.ErrorCorrection.H // 30% recovery
|
||||||
```
|
```
|
||||||
|
|
||||||
### Types
|
### Types
|
||||||
|
|
@ -641,15 +641,15 @@ try page.setOpacity(1.0);
|
||||||
```zig
|
```zig
|
||||||
// Horizontal gradient
|
// Horizontal gradient
|
||||||
try page.linearGradientRect(x, y, width, height,
|
try page.linearGradientRect(x, y, width, height,
|
||||||
zpdf.Color.red, zpdf.Color.blue, .horizontal);
|
zcatpdf.Color.red, zcatpdf.Color.blue, .horizontal);
|
||||||
|
|
||||||
// Vertical gradient
|
// Vertical gradient
|
||||||
try page.linearGradientRect(x, y, width, height,
|
try page.linearGradientRect(x, y, width, height,
|
||||||
zpdf.Color.green, zpdf.Color.yellow, .vertical);
|
zcatpdf.Color.green, zcatpdf.Color.yellow, .vertical);
|
||||||
|
|
||||||
// Diagonal gradient
|
// Diagonal gradient
|
||||||
try page.linearGradientRect(x, y, width, height,
|
try page.linearGradientRect(x, y, width, height,
|
||||||
zpdf.Color.purple, zpdf.Color.cyan, .diagonal);
|
zcatpdf.Color.purple, zcatpdf.Color.cyan, .diagonal);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Radial Gradients
|
### Radial Gradients
|
||||||
|
|
@ -657,11 +657,11 @@ try page.linearGradientRect(x, y, width, height,
|
||||||
```zig
|
```zig
|
||||||
// Circle gradient (center to edge)
|
// Circle gradient (center to edge)
|
||||||
try page.radialGradientCircle(cx, cy, radius,
|
try page.radialGradientCircle(cx, cy, radius,
|
||||||
zpdf.Color.white, zpdf.Color.blue);
|
zcatpdf.Color.white, zcatpdf.Color.blue);
|
||||||
|
|
||||||
// Ellipse gradient
|
// Ellipse gradient
|
||||||
try page.radialGradientEllipse(cx, cy, rx, ry,
|
try page.radialGradientEllipse(cx, cy, rx, ry,
|
||||||
zpdf.Color.yellow, zpdf.Color.red);
|
zcatpdf.Color.yellow, zcatpdf.Color.red);
|
||||||
```
|
```
|
||||||
|
|
||||||
### Types
|
### Types
|
||||||
|
|
@ -683,11 +683,11 @@ Templates define reusable document layouts with named regions.
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
// Use predefined invoice template
|
// Use predefined invoice template
|
||||||
var tmpl = try zpdf.Template.invoiceTemplate(allocator);
|
var tmpl = try zcatpdf.Template.invoiceTemplate(allocator);
|
||||||
defer tmpl.deinit();
|
defer tmpl.deinit();
|
||||||
|
|
||||||
// Or create custom template
|
// Or create custom template
|
||||||
var tmpl = zpdf.Template.init(allocator, "custom", 595, 842);
|
var tmpl = zcatpdf.Template.init(allocator, "custom", 595, 842);
|
||||||
defer tmpl.deinit();
|
defer tmpl.deinit();
|
||||||
|
|
||||||
try tmpl.defineRegion("header", .{
|
try tmpl.defineRegion("header", .{
|
||||||
|
|
@ -727,7 +727,7 @@ if (tmpl.getRegion("header")) |region| {
|
||||||
Parse Markdown-style text and render with appropriate styles.
|
Parse Markdown-style text and render with appropriate styles.
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
var renderer = zpdf.MarkdownRenderer.init(allocator);
|
var renderer = zcatpdf.MarkdownRenderer.init(allocator);
|
||||||
defer renderer.deinit();
|
defer renderer.deinit();
|
||||||
|
|
||||||
try renderer.parse(
|
try renderer.parse(
|
||||||
|
|
@ -744,11 +744,11 @@ try renderer.parse(
|
||||||
// Render to PDF
|
// Render to PDF
|
||||||
for (renderer.getLines()) |line| {
|
for (renderer.getLines()) |line| {
|
||||||
for (line.spans) |span| {
|
for (line.spans) |span| {
|
||||||
const font = zpdf.MarkdownRenderer.fontForStyle(span.style);
|
const font = zcatpdf.MarkdownRenderer.fontForStyle(span.style);
|
||||||
try page.setFont(font, span.font_size orelse 12);
|
try page.setFont(font, span.font_size orelse 12);
|
||||||
|
|
||||||
if (span.color) |color| {
|
if (span.color) |color| {
|
||||||
page.setFillColor(zpdf.Color.hex(color));
|
page.setFillColor(zcatpdf.Color.hex(color));
|
||||||
}
|
}
|
||||||
|
|
||||||
try page.drawText(x, y, span.text);
|
try page.drawText(x, y, span.text);
|
||||||
|
|
@ -789,7 +789,7 @@ for (renderer.getLines()) |line| {
|
||||||
|
|
||||||
```zig
|
```zig
|
||||||
// Configure compression when creating document
|
// Configure compression when creating document
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{
|
var pdf = zcatpdf.Pdf.init(allocator, .{
|
||||||
.compression = .{
|
.compression = .{
|
||||||
.enabled = true,
|
.enabled = true,
|
||||||
.level = 6, // 0-12, higher = better compression
|
.level = 6, // 0-12, higher = better compression
|
||||||
|
|
|
||||||
|
|
@ -11,13 +11,13 @@ pub fn build(b: *std.Build) void {
|
||||||
});
|
});
|
||||||
const libdeflate_lib = libdeflate_dep.artifact("deflate");
|
const libdeflate_lib = libdeflate_dep.artifact("deflate");
|
||||||
|
|
||||||
// zpdf module with libdeflate
|
// zcatpdf module with libdeflate
|
||||||
const zpdf_mod = b.createModule(.{
|
const zcatpdf_mod = b.createModule(.{
|
||||||
.root_source_file = b.path("src/root.zig"),
|
.root_source_file = b.path("src/root.zig"),
|
||||||
.target = target,
|
.target = target,
|
||||||
.optimize = optimize,
|
.optimize = optimize,
|
||||||
});
|
});
|
||||||
zpdf_mod.linkLibrary(libdeflate_lib);
|
zcatpdf_mod.linkLibrary(libdeflate_lib);
|
||||||
|
|
||||||
// Tests
|
// Tests
|
||||||
const unit_tests = b.addTest(.{
|
const unit_tests = b.addTest(.{
|
||||||
|
|
@ -61,7 +61,7 @@ pub fn build(b: *std.Build) void {
|
||||||
.target = target,
|
.target = target,
|
||||||
.optimize = optimize,
|
.optimize = optimize,
|
||||||
.imports = &.{
|
.imports = &.{
|
||||||
.{ .name = "zpdf", .module = zpdf_mod },
|
.{ .name = "zcatpdf", .module = zcatpdf_mod },
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
//! Demonstrates barcode generation for product labels, shipping, URLs, etc.
|
//! Demonstrates barcode generation for product labels, shipping, URLs, etc.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
const Pdf = zpdf.Pdf;
|
const Pdf = zcatpdf.Pdf;
|
||||||
const Color = zpdf.Color;
|
const Color = zcatpdf.Color;
|
||||||
const QRCode = zpdf.QRCode;
|
const QRCode = zcatpdf.QRCode;
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -17,7 +17,7 @@ pub fn main() !void {
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
pdf.setTitle("Barcode Demo");
|
pdf.setTitle("Barcode Demo");
|
||||||
pdf.setAuthor("zpdf");
|
pdf.setAuthor("zcatpdf");
|
||||||
|
|
||||||
var page = try pdf.addPage(.{});
|
var page = try pdf.addPage(.{});
|
||||||
|
|
||||||
|
|
@ -28,7 +28,7 @@ pub fn main() !void {
|
||||||
|
|
||||||
try page.setFont(.helvetica, 12);
|
try page.setFont(.helvetica, 12);
|
||||||
page.setFillColor(Color.hex(0x666666));
|
page.setFillColor(Color.hex(0x666666));
|
||||||
try page.drawText(50, 760, "Code128 barcode generation with zpdf");
|
try page.drawText(50, 760, "Code128 barcode generation with zcatpdf");
|
||||||
|
|
||||||
// Reset to black for barcodes
|
// Reset to black for barcodes
|
||||||
page.setFillColor(Color.black);
|
page.setFillColor(Color.black);
|
||||||
|
|
@ -111,7 +111,7 @@ pub fn main() !void {
|
||||||
// Footer
|
// Footer
|
||||||
try page.setFont(.helvetica_oblique, 10);
|
try page.setFont(.helvetica_oblique, 10);
|
||||||
page.setFillColor(Color.hex(0x999999));
|
page.setFillColor(Color.hex(0x999999));
|
||||||
try page.drawText(50, 50, "Generated with zpdf - Code128 and QR Code Support");
|
try page.drawText(50, 50, "Generated with zcatpdf - Code128 and QR Code Support");
|
||||||
|
|
||||||
try pdf.save("barcode_demo.pdf");
|
try pdf.save("barcode_demo.pdf");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,20 @@
|
||||||
//! The bookmarks appear in the sidebar of PDF readers for navigation.
|
//! The bookmarks appear in the sidebar of PDF readers for navigation.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Bookmarks Demo\n", .{});
|
std.debug.print("zcatpdf - Bookmarks Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Bookmarks Demo");
|
doc.setTitle("Bookmarks Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// Page 1: Introduction
|
// Page 1: Introduction
|
||||||
|
|
@ -37,7 +37,7 @@ pub fn main() !void {
|
||||||
try page.setFont(.helvetica, 12);
|
try page.setFont(.helvetica, 12);
|
||||||
page.setFillColor(pdf.Color.black);
|
page.setFillColor(pdf.Color.black);
|
||||||
const intro_text =
|
const intro_text =
|
||||||
\\This document demonstrates the bookmark/outline feature of zpdf.
|
\\This document demonstrates the bookmark/outline feature of zcatpdf.
|
||||||
\\
|
\\
|
||||||
\\Bookmarks (also called "outlines") appear in the sidebar of PDF readers
|
\\Bookmarks (also called "outlines") appear in the sidebar of PDF readers
|
||||||
\\and allow quick navigation to different sections of the document.
|
\\and allow quick navigation to different sections of the document.
|
||||||
|
|
@ -50,7 +50,7 @@ pub fn main() !void {
|
||||||
page.setXY(50, 50);
|
page.setXY(50, 50);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.cell(0, 15, "Page 1 of 4 - zpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
try page.cell(0, 15, "Page 1 of 4 - zcatpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
@ -73,7 +73,7 @@ pub fn main() !void {
|
||||||
const chapter1_text =
|
const chapter1_text =
|
||||||
\\This is Chapter 1 of our document.
|
\\This is Chapter 1 of our document.
|
||||||
\\
|
\\
|
||||||
\\In this chapter, we cover the basics of using zpdf to create
|
\\In this chapter, we cover the basics of using zcatpdf to create
|
||||||
\\PDF documents with bookmarks for easy navigation.
|
\\PDF documents with bookmarks for easy navigation.
|
||||||
\\
|
\\
|
||||||
\\Key topics:
|
\\Key topics:
|
||||||
|
|
@ -88,7 +88,7 @@ pub fn main() !void {
|
||||||
page.setXY(50, 50);
|
page.setXY(50, 50);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.cell(0, 15, "Page 2 of 4 - zpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
try page.cell(0, 15, "Page 2 of 4 - zcatpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
@ -125,7 +125,7 @@ pub fn main() !void {
|
||||||
page.setXY(50, 50);
|
page.setXY(50, 50);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.cell(0, 15, "Page 3 of 4 - zpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
try page.cell(0, 15, "Page 3 of 4 - zcatpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
@ -154,7 +154,7 @@ pub fn main() !void {
|
||||||
\\ 3. Each bookmark links to a specific page and position
|
\\ 3. Each bookmark links to a specific page and position
|
||||||
\\
|
\\
|
||||||
\\Use doc.addBookmark() or doc.addBookmarkAt() to add bookmarks
|
\\Use doc.addBookmark() or doc.addBookmarkAt() to add bookmarks
|
||||||
\\to your zpdf documents.
|
\\to your zcatpdf documents.
|
||||||
;
|
;
|
||||||
try page.multiCell(500, null, conclusion_text, pdf.Border.none, .left, false);
|
try page.multiCell(500, null, conclusion_text, pdf.Border.none, .left, false);
|
||||||
|
|
||||||
|
|
@ -162,7 +162,7 @@ pub fn main() !void {
|
||||||
page.setXY(50, 50);
|
page.setXY(50, 50);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.cell(0, 15, "Page 4 of 4 - zpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
try page.cell(0, 15, "Page 4 of 4 - zcatpdf Bookmarks Demo", pdf.Border.none, .center, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,25 @@
|
||||||
//! Curves Demo - Bezier Curves, Circles, Ellipses, and Arcs
|
//! Curves Demo - Bezier Curves, Circles, Ellipses, and Arcs
|
||||||
//!
|
//!
|
||||||
//! Demonstrates the curve drawing capabilities of zpdf including:
|
//! Demonstrates the curve drawing capabilities of zcatpdf including:
|
||||||
//! - Cubic and quadratic Bezier curves
|
//! - Cubic and quadratic Bezier curves
|
||||||
//! - Circles and ellipses
|
//! - Circles and ellipses
|
||||||
//! - Arcs
|
//! - Arcs
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Curves Demo\n", .{});
|
std.debug.print("zcatpdf - Curves Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Curves Demo");
|
doc.setTitle("Curves Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// Page 1: Bezier Curves
|
// Page 1: Bezier Curves
|
||||||
|
|
@ -110,7 +110,7 @@ pub fn main() !void {
|
||||||
// Footer
|
// Footer
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.drawText(250, 50, "Page 1 of 2 - zpdf Curves Demo");
|
try page.drawText(250, 50, "Page 1 of 2 - zcatpdf Curves Demo");
|
||||||
}
|
}
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
@ -235,7 +235,7 @@ pub fn main() !void {
|
||||||
// Footer
|
// Footer
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.drawText(250, 50, "Page 2 of 2 - zpdf Curves Demo");
|
try page.drawText(250, 50, "Page 2 of 2 - zcatpdf Curves Demo");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
//! Demonstrates gradient fills for rectangles, circles and ellipses.
|
//! Demonstrates gradient fills for rectangles, circles and ellipses.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
const Pdf = zpdf.Pdf;
|
const Pdf = zcatpdf.Pdf;
|
||||||
const Color = zpdf.Color;
|
const Color = zcatpdf.Color;
|
||||||
const GradientDirection = zpdf.GradientDirection;
|
const GradientDirection = zcatpdf.GradientDirection;
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -17,7 +17,7 @@ pub fn main() !void {
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
pdf.setTitle("Gradient Demo");
|
pdf.setTitle("Gradient Demo");
|
||||||
pdf.setAuthor("zpdf");
|
pdf.setAuthor("zcatpdf");
|
||||||
|
|
||||||
var page = try pdf.addPage(.{});
|
var page = try pdf.addPage(.{});
|
||||||
|
|
||||||
|
|
@ -28,7 +28,7 @@ pub fn main() !void {
|
||||||
|
|
||||||
try page.setFont(.helvetica, 12);
|
try page.setFont(.helvetica, 12);
|
||||||
page.setFillColor(Color.hex(0x666666));
|
page.setFillColor(Color.hex(0x666666));
|
||||||
try page.drawText(50, 760, "Linear and radial gradients in zpdf");
|
try page.drawText(50, 760, "Linear and radial gradients in zcatpdf");
|
||||||
|
|
||||||
// Section 1: Linear Gradients
|
// Section 1: Linear Gradients
|
||||||
try page.setFont(.helvetica_bold, 16);
|
try page.setFont(.helvetica_bold, 16);
|
||||||
|
|
@ -112,7 +112,7 @@ pub fn main() !void {
|
||||||
// Footer
|
// Footer
|
||||||
try page.setFont(.helvetica_oblique, 10);
|
try page.setFont(.helvetica_oblique, 10);
|
||||||
page.setFillColor(Color.hex(0x999999));
|
page.setFillColor(Color.hex(0x999999));
|
||||||
try page.drawText(50, 50, "Generated with zpdf - Linear and Radial Gradient Support");
|
try page.drawText(50, 50, "Generated with zcatpdf - Linear and Radial Gradient Support");
|
||||||
|
|
||||||
try pdf.save("gradient_demo.pdf");
|
try pdf.save("gradient_demo.pdf");
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
//! Minimal PDF example - Hello World
|
//! Minimal PDF example - Hello World
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Hello World example\n", .{});
|
std.debug.print("zcatpdf - Hello World example\n", .{});
|
||||||
|
|
||||||
// Create document
|
// Create document
|
||||||
var doc = pdf.Document.init(allocator);
|
var doc = pdf.Document.init(allocator);
|
||||||
|
|
@ -25,7 +25,7 @@ pub fn main() !void {
|
||||||
// Subtitle
|
// Subtitle
|
||||||
try page.setFont(.helvetica, 14);
|
try page.setFont(.helvetica, 14);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.drawText(50, 710, "Generated with zpdf - Pure Zig PDF library");
|
try page.drawText(50, 710, "Generated with zcatpdf - Pure Zig PDF library");
|
||||||
|
|
||||||
// Draw a line
|
// Draw a line
|
||||||
try page.setLineWidth(1);
|
try page.setLineWidth(1);
|
||||||
|
|
@ -36,7 +36,7 @@ pub fn main() !void {
|
||||||
try page.setFont(.times_roman, 12);
|
try page.setFont(.times_roman, 12);
|
||||||
page.setFillColor(pdf.Color.black);
|
page.setFillColor(pdf.Color.black);
|
||||||
try page.drawText(50, 670, "This PDF was generated entirely in Zig with zero external dependencies.");
|
try page.drawText(50, 670, "This PDF was generated entirely in Zig with zero external dependencies.");
|
||||||
try page.drawText(50, 655, "The zpdf library supports:");
|
try page.drawText(50, 655, "The zcatpdf library supports:");
|
||||||
try page.drawText(70, 635, "- Multiple fonts (Helvetica, Times, Courier)");
|
try page.drawText(70, 635, "- Multiple fonts (Helvetica, Times, Courier)");
|
||||||
try page.drawText(70, 620, "- Colors (RGB)");
|
try page.drawText(70, 620, "- Colors (RGB)");
|
||||||
try page.drawText(70, 605, "- Lines and rectangles");
|
try page.drawText(70, 605, "- Lines and rectangles");
|
||||||
|
|
@ -63,7 +63,7 @@ pub fn main() !void {
|
||||||
// Footer
|
// Footer
|
||||||
try page.setFont(.courier, 10);
|
try page.setFont(.courier, 10);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.drawText(50, 50, "zpdf v0.1.0 - https://git.reugenio.com/reugenio/zpdf");
|
try page.drawText(50, 50, "zcatpdf v0.1.0 - https://git.reugenio.com/reugenio/zcatpdf");
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
const filename = "hello.pdf";
|
const filename = "hello.pdf";
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,14 @@
|
||||||
//! If no path is provided, creates a simple PDF with text explaining the features.
|
//! If no path is provided, creates a simple PDF with text explaining the features.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Image Demo\n", .{});
|
std.debug.print("zcatpdf - Image Demo\n", .{});
|
||||||
|
|
||||||
// Get command line args
|
// Get command line args
|
||||||
const args = try std.process.argsAlloc(allocator);
|
const args = try std.process.argsAlloc(allocator);
|
||||||
|
|
@ -22,7 +22,7 @@ pub fn main() !void {
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Image Demo");
|
doc.setTitle("Image Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
var page = try doc.addPage(.{});
|
var page = try doc.addPage(.{});
|
||||||
page.setMargins(50, 50, 50);
|
page.setMargins(50, 50, 50);
|
||||||
|
|
@ -223,7 +223,7 @@ pub fn main() !void {
|
||||||
page.setXY(50, 50);
|
page.setXY(50, 50);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.cell(0, 15, "Generated with zpdf - Pure Zig PDF Library", pdf.Border.none, .center, false);
|
try page.cell(0, 15, "Generated with zcatpdf - Pure Zig PDF Library", pdf.Border.none, .center, false);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
const filename = "image_demo.pdf";
|
const filename = "image_demo.pdf";
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
//! Invoice PDF example - Demonstrates a realistic use case
|
//! Invoice PDF example - Demonstrates a realistic use case
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Invoice example\n", .{});
|
std.debug.print("zcatpdf - Invoice example\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Document.init(allocator);
|
var doc = pdf.Document.init(allocator);
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
|
||||||
|
|
@ -6,20 +6,20 @@
|
||||||
//! - Visual link styling (blue underlined text)
|
//! - Visual link styling (blue underlined text)
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Links Demo\n", .{});
|
std.debug.print("zcatpdf - Links Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Links Demo");
|
doc.setTitle("Links Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// Page 1: External URL Links
|
// Page 1: External URL Links
|
||||||
|
|
@ -150,7 +150,7 @@ pub fn main() !void {
|
||||||
\\- /Border: Border style (we use [0 0 0] for invisible borders)
|
\\- /Border: Border style (we use [0 0 0] for invisible borders)
|
||||||
\\
|
\\
|
||||||
\\The visual styling (blue text + underline) is separate from the annotation.
|
\\The visual styling (blue text + underline) is separate from the annotation.
|
||||||
\\zpdf's urlLink() and writeUrlLink() methods combine both automatically.
|
\\zcatpdf's urlLink() and writeUrlLink() methods combine both automatically.
|
||||||
;
|
;
|
||||||
try page2.multiCell(500, null, tech_text, pdf.Border.none, .left, false);
|
try page2.multiCell(500, null, tech_text, pdf.Border.none, .left, false);
|
||||||
|
|
||||||
|
|
@ -161,7 +161,7 @@ pub fn main() !void {
|
||||||
});
|
});
|
||||||
|
|
||||||
// Footer
|
// Footer
|
||||||
try pdf.Pagination.addFooter(&doc, "Generated with zpdf - Links Demo", .{
|
try pdf.Pagination.addFooter(&doc, "Generated with zcatpdf - Links Demo", .{
|
||||||
.alignment = .center,
|
.alignment = .center,
|
||||||
.font_size = 8,
|
.font_size = 8,
|
||||||
.color = pdf.Color.light_gray,
|
.color = pdf.Color.light_gray,
|
||||||
|
|
|
||||||
|
|
@ -3,27 +3,27 @@
|
||||||
//! Run with: zig build markdown_demo && ./zig-out/bin/markdown_demo
|
//! Run with: zig build markdown_demo && ./zig-out/bin/markdown_demo
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("=== zpdf Markdown Demo ===\n\n", .{});
|
std.debug.print("=== zcatpdf Markdown Demo ===\n\n", .{});
|
||||||
|
|
||||||
// Create PDF
|
// Create PDF
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{});
|
var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
pdf.setTitle("Markdown Styled Document");
|
pdf.setTitle("Markdown Styled Document");
|
||||||
pdf.setAuthor("zpdf Markdown Renderer");
|
pdf.setAuthor("zcatpdf Markdown Renderer");
|
||||||
|
|
||||||
var page = try pdf.addPage(.{});
|
var page = try pdf.addPage(.{});
|
||||||
|
|
||||||
// Sample markdown text
|
// Sample markdown text
|
||||||
const markdown_text =
|
const markdown_text =
|
||||||
\\# Welcome to zpdf Markdown
|
\\# Welcome to zcatpdf Markdown
|
||||||
\\
|
\\
|
||||||
\\This is a demonstration of **Markdown-styled** text rendering in PDF.
|
\\This is a demonstration of **Markdown-styled** text rendering in PDF.
|
||||||
\\
|
\\
|
||||||
|
|
@ -40,7 +40,7 @@ pub fn main() !void {
|
||||||
\\### Code and Technical Content
|
\\### Code and Technical Content
|
||||||
\\
|
\\
|
||||||
\\You can write technical documentation with styled text.
|
\\You can write technical documentation with styled text.
|
||||||
\\For example, the *zpdf* library is written in **Zig** and provides
|
\\For example, the *zcatpdf* library is written in **Zig** and provides
|
||||||
\\a simple API for PDF generation.
|
\\a simple API for PDF generation.
|
||||||
\\
|
\\
|
||||||
\\## Numbered Lists
|
\\## Numbered Lists
|
||||||
|
|
@ -56,7 +56,7 @@ pub fn main() !void {
|
||||||
;
|
;
|
||||||
|
|
||||||
// Parse markdown
|
// Parse markdown
|
||||||
var renderer = zpdf.MarkdownRenderer.init(allocator);
|
var renderer = zcatpdf.MarkdownRenderer.init(allocator);
|
||||||
defer renderer.deinit();
|
defer renderer.deinit();
|
||||||
|
|
||||||
try renderer.parse(markdown_text);
|
try renderer.parse(markdown_text);
|
||||||
|
|
@ -94,7 +94,7 @@ pub fn main() !void {
|
||||||
switch (line.line_type) {
|
switch (line.line_type) {
|
||||||
.bullet => {
|
.bullet => {
|
||||||
try page.setFont(.helvetica, base_font_size);
|
try page.setFont(.helvetica, base_font_size);
|
||||||
page.setFillColor(zpdf.Color.black);
|
page.setFillColor(zcatpdf.Color.black);
|
||||||
try page.drawText(x, y, "\xe2\x80\xa2"); // Bullet point (UTF-8)
|
try page.drawText(x, y, "\xe2\x80\xa2"); // Bullet point (UTF-8)
|
||||||
// Note: PDF Type1 fonts don't support UTF-8, so we use a simple dash
|
// Note: PDF Type1 fonts don't support UTF-8, so we use a simple dash
|
||||||
try page.drawText(x, y, "-");
|
try page.drawText(x, y, "-");
|
||||||
|
|
@ -104,7 +104,7 @@ pub fn main() !void {
|
||||||
.numbered => {
|
.numbered => {
|
||||||
list_number += 1;
|
list_number += 1;
|
||||||
try page.setFont(.helvetica, base_font_size);
|
try page.setFont(.helvetica, base_font_size);
|
||||||
page.setFillColor(zpdf.Color.black);
|
page.setFillColor(zcatpdf.Color.black);
|
||||||
var num_buf: [16]u8 = undefined;
|
var num_buf: [16]u8 = undefined;
|
||||||
const num_str = std.fmt.bufPrint(&num_buf, "{d}.", .{list_number}) catch "?.";
|
const num_str = std.fmt.bufPrint(&num_buf, "{d}.", .{list_number}) catch "?.";
|
||||||
try page.drawText(x, y, num_str);
|
try page.drawText(x, y, num_str);
|
||||||
|
|
@ -118,16 +118,16 @@ pub fn main() !void {
|
||||||
// Render spans
|
// Render spans
|
||||||
for (line.spans) |span| {
|
for (line.spans) |span| {
|
||||||
// Set font based on style
|
// Set font based on style
|
||||||
const font = zpdf.MarkdownRenderer.fontForStyle(span.style);
|
const font = zcatpdf.MarkdownRenderer.fontForStyle(span.style);
|
||||||
const font_size = span.font_size orelse base_font_size;
|
const font_size = span.font_size orelse base_font_size;
|
||||||
|
|
||||||
try page.setFont(font, font_size);
|
try page.setFont(font, font_size);
|
||||||
|
|
||||||
// Set color
|
// Set color
|
||||||
if (span.color) |color| {
|
if (span.color) |color| {
|
||||||
page.setFillColor(zpdf.Color.hex(color));
|
page.setFillColor(zcatpdf.Color.hex(color));
|
||||||
} else {
|
} else {
|
||||||
page.setFillColor(zpdf.Color.black);
|
page.setFillColor(zcatpdf.Color.black);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw text
|
// Draw text
|
||||||
|
|
@ -136,7 +136,7 @@ pub fn main() !void {
|
||||||
// Draw underline if needed
|
// Draw underline if needed
|
||||||
if (span.style.underline) {
|
if (span.style.underline) {
|
||||||
const text_width = font.stringWidth(span.text, font_size);
|
const text_width = font.stringWidth(span.text, font_size);
|
||||||
page.setStrokeColor(if (span.color) |c| zpdf.Color.hex(c) else zpdf.Color.black);
|
page.setStrokeColor(if (span.color) |c| zcatpdf.Color.hex(c) else zcatpdf.Color.black);
|
||||||
try page.setLineWidth(0.5);
|
try page.setLineWidth(0.5);
|
||||||
try page.drawLine(x, y - 2, x + text_width, y - 2);
|
try page.drawLine(x, y - 2, x + text_width, y - 2);
|
||||||
}
|
}
|
||||||
|
|
@ -144,7 +144,7 @@ pub fn main() !void {
|
||||||
// Draw strikethrough if needed
|
// Draw strikethrough if needed
|
||||||
if (span.style.strikethrough) {
|
if (span.style.strikethrough) {
|
||||||
const text_width = font.stringWidth(span.text, font_size);
|
const text_width = font.stringWidth(span.text, font_size);
|
||||||
page.setStrokeColor(zpdf.Color.black);
|
page.setStrokeColor(zcatpdf.Color.black);
|
||||||
try page.setLineWidth(0.5);
|
try page.setLineWidth(0.5);
|
||||||
const strike_y = y + font_size * 0.3;
|
const strike_y = y + font_size * 0.3;
|
||||||
try page.drawLine(x, strike_y, x + text_width, strike_y);
|
try page.drawLine(x, strike_y, x + text_width, strike_y);
|
||||||
|
|
|
||||||
|
|
@ -3,20 +3,20 @@
|
||||||
//! Shows how to add page numbers and footers to multi-page documents.
|
//! Shows how to add page numbers and footers to multi-page documents.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Pagination Demo\n", .{});
|
std.debug.print("zcatpdf - Pagination Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Pagination Demo");
|
doc.setTitle("Pagination Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
// Create multiple pages with content
|
// Create multiple pages with content
|
||||||
const num_pages: usize = 5;
|
const num_pages: usize = 5;
|
||||||
|
|
@ -79,7 +79,7 @@ pub fn main() !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add header to all pages (with line separator)
|
// Add header to all pages (with line separator)
|
||||||
try pdf.addHeader(&doc, "zpdf Library - Multi-Page Document Example", .{
|
try pdf.addHeader(&doc, "zcatpdf Library - Multi-Page Document Example", .{
|
||||||
.alignment = .center,
|
.alignment = .center,
|
||||||
.margin = 30,
|
.margin = 30,
|
||||||
.font_size = 9,
|
.font_size = 9,
|
||||||
|
|
|
||||||
|
|
@ -4,20 +4,20 @@
|
||||||
//! alternating colors, and custom styling.
|
//! alternating colors, and custom styling.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Table Demo\n", .{});
|
std.debug.print("zcatpdf - Table Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Table Demo");
|
doc.setTitle("Table Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
var page = try doc.addPage(.{});
|
var page = try doc.addPage(.{});
|
||||||
page.setMargins(50, 50, 50);
|
page.setMargins(50, 50, 50);
|
||||||
|
|
@ -146,7 +146,7 @@ pub fn main() !void {
|
||||||
page.setXY(50, 50);
|
page.setXY(50, 50);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.cell(0, 15, "Generated with zpdf - Table Helper Demo", pdf.Border.none, .center, false);
|
try page.cell(0, 15, "Generated with zcatpdf - Table Helper Demo", pdf.Border.none, .center, false);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
const filename = "table_demo.pdf";
|
const filename = "table_demo.pdf";
|
||||||
|
|
|
||||||
|
|
@ -3,14 +3,14 @@
|
||||||
//! Run with: zig build template_demo && ./zig-out/bin/template_demo
|
//! Run with: zig build template_demo && ./zig-out/bin/template_demo
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("=== zpdf Template Demo ===\n\n", .{});
|
std.debug.print("=== zcatpdf Template Demo ===\n\n", .{});
|
||||||
|
|
||||||
// Create invoice using template
|
// Create invoice using template
|
||||||
try createInvoiceFromTemplate(allocator);
|
try createInvoiceFromTemplate(allocator);
|
||||||
|
|
@ -25,14 +25,14 @@ fn createInvoiceFromTemplate(allocator: std.mem.Allocator) !void {
|
||||||
std.debug.print("Creating invoice from template...\n", .{});
|
std.debug.print("Creating invoice from template...\n", .{});
|
||||||
|
|
||||||
// Get the invoice template
|
// Get the invoice template
|
||||||
var tmpl = try zpdf.Template.invoiceTemplate(allocator);
|
var tmpl = try zcatpdf.Template.invoiceTemplate(allocator);
|
||||||
defer tmpl.deinit();
|
defer tmpl.deinit();
|
||||||
|
|
||||||
std.debug.print(" Template: {s}\n", .{tmpl.name});
|
std.debug.print(" Template: {s}\n", .{tmpl.name});
|
||||||
std.debug.print(" Page size: {d:.0} x {d:.0} points\n", .{ tmpl.page_width, tmpl.page_height });
|
std.debug.print(" Page size: {d:.0} x {d:.0} points\n", .{ tmpl.page_width, tmpl.page_height });
|
||||||
|
|
||||||
// Create PDF based on template
|
// Create PDF based on template
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{});
|
var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
pdf.setTitle("Invoice from Template");
|
pdf.setTitle("Invoice from Template");
|
||||||
|
|
@ -72,10 +72,10 @@ fn createInvoiceFromTemplate(allocator: std.mem.Allocator) !void {
|
||||||
std.debug.print(" Items region: ({d:.0}, {d:.0}) {d:.0}x{d:.0}\n", .{ region.x, region.y, region.width, region.height });
|
std.debug.print(" Items region: ({d:.0}, {d:.0}) {d:.0}x{d:.0}\n", .{ region.x, region.y, region.width, region.height });
|
||||||
|
|
||||||
// Draw table header
|
// Draw table header
|
||||||
page.setFillColor(zpdf.Color.hex(0xE0E0E0));
|
page.setFillColor(zcatpdf.Color.hex(0xE0E0E0));
|
||||||
try page.fillRect(region.x, region.y + region.height - 25, region.width, 25);
|
try page.fillRect(region.x, region.y + region.height - 25, region.width, 25);
|
||||||
|
|
||||||
page.setFillColor(zpdf.Color.black);
|
page.setFillColor(zcatpdf.Color.black);
|
||||||
try page.setFont(.helvetica_bold, 10);
|
try page.setFont(.helvetica_bold, 10);
|
||||||
try page.drawText(region.x + 5, region.y + region.height - 17, "Description");
|
try page.drawText(region.x + 5, region.y + region.height - 17, "Description");
|
||||||
try page.drawText(region.x + 250, region.y + region.height - 17, "Qty");
|
try page.drawText(region.x + 250, region.y + region.height - 17, "Qty");
|
||||||
|
|
@ -100,7 +100,7 @@ fn createInvoiceFromTemplate(allocator: std.mem.Allocator) !void {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw table border
|
// Draw table border
|
||||||
page.setStrokeColor(zpdf.Color.black);
|
page.setStrokeColor(zcatpdf.Color.black);
|
||||||
try page.drawRect(region.x, region.y, region.width, region.height);
|
try page.drawRect(region.x, region.y, region.width, region.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -123,7 +123,7 @@ fn createInvoiceFromTemplate(allocator: std.mem.Allocator) !void {
|
||||||
if (tmpl.getRegion("footer")) |region| {
|
if (tmpl.getRegion("footer")) |region| {
|
||||||
std.debug.print(" Footer region: ({d:.0}, {d:.0})\n", .{ region.x, region.y });
|
std.debug.print(" Footer region: ({d:.0}, {d:.0})\n", .{ region.x, region.y });
|
||||||
try page.setFont(.helvetica, 8);
|
try page.setFont(.helvetica, 8);
|
||||||
page.setFillColor(zpdf.Color.hex(0x666666));
|
page.setFillColor(zcatpdf.Color.hex(0x666666));
|
||||||
try page.drawText(region.x, region.y + 20, "Payment Terms: Net 14 days");
|
try page.drawText(region.x, region.y + 20, "Payment Terms: Net 14 days");
|
||||||
try page.drawText(region.x, region.y + 8, "Thank you for your business!");
|
try page.drawText(region.x, region.y + 8, "Thank you for your business!");
|
||||||
}
|
}
|
||||||
|
|
@ -136,13 +136,13 @@ fn createLetterFromTemplate(allocator: std.mem.Allocator) !void {
|
||||||
std.debug.print("\nCreating letter from template...\n", .{});
|
std.debug.print("\nCreating letter from template...\n", .{});
|
||||||
|
|
||||||
// Get the letter template
|
// Get the letter template
|
||||||
var tmpl = try zpdf.Template.letterTemplate(allocator);
|
var tmpl = try zcatpdf.Template.letterTemplate(allocator);
|
||||||
defer tmpl.deinit();
|
defer tmpl.deinit();
|
||||||
|
|
||||||
std.debug.print(" Template: {s}\n", .{tmpl.name});
|
std.debug.print(" Template: {s}\n", .{tmpl.name});
|
||||||
|
|
||||||
// Create PDF based on template
|
// Create PDF based on template
|
||||||
var pdf = zpdf.Pdf.init(allocator, .{});
|
var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
pdf.setTitle("Letter from Template");
|
pdf.setTitle("Letter from Template");
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,20 @@
|
||||||
//! Text System Demo - Demonstrates cell(), multiCell(), alignment, etc.
|
//! Text System Demo - Demonstrates cell(), multiCell(), alignment, etc.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Text System Demo\n", .{});
|
std.debug.print("zcatpdf - Text System Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Text System Demo");
|
doc.setTitle("Text System Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
var page = try doc.addPage(.{});
|
var page = try doc.addPage(.{});
|
||||||
|
|
||||||
|
|
@ -74,7 +74,7 @@ pub fn main() !void {
|
||||||
page.setFillColor(pdf.Color.rgb(245, 245, 245));
|
page.setFillColor(pdf.Color.rgb(245, 245, 245));
|
||||||
|
|
||||||
const long_text =
|
const long_text =
|
||||||
\\This is a demonstration of the multiCell function in zpdf.
|
\\This is a demonstration of the multiCell function in zcatpdf.
|
||||||
\\It automatically wraps text to fit within the specified width.
|
\\It automatically wraps text to fit within the specified width.
|
||||||
\\
|
\\
|
||||||
\\You can include explicit line breaks using backslash-n, and the
|
\\You can include explicit line breaks using backslash-n, and the
|
||||||
|
|
@ -171,7 +171,7 @@ pub fn main() !void {
|
||||||
page.setXY(50, 50);
|
page.setXY(50, 50);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.cell(0, 15, "Generated with zpdf - Pure Zig PDF Library", pdf.Border.none, .center, false);
|
try page.cell(0, 15, "Generated with zcatpdf - Pure Zig PDF Library", pdf.Border.none, .center, false);
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
const filename = "text_demo.pdf";
|
const filename = "text_demo.pdf";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
//! Transforms Demo - Rotation, Scaling, Skew, and Translation
|
//! Transforms Demo - Rotation, Scaling, Skew, and Translation
|
||||||
//!
|
//!
|
||||||
//! Demonstrates the transformation capabilities of zpdf including:
|
//! Demonstrates the transformation capabilities of zcatpdf including:
|
||||||
//! - Rotation around a point
|
//! - Rotation around a point
|
||||||
//! - Scaling from a point
|
//! - Scaling from a point
|
||||||
//! - Skewing (shearing)
|
//! - Skewing (shearing)
|
||||||
|
|
@ -8,20 +8,20 @@
|
||||||
//! - Combined transformations
|
//! - Combined transformations
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Transforms Demo\n", .{});
|
std.debug.print("zcatpdf - Transforms Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Transforms Demo");
|
doc.setTitle("Transforms Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
// Page 1: Rotation
|
// Page 1: Rotation
|
||||||
|
|
@ -157,7 +157,7 @@ pub fn main() !void {
|
||||||
// Footer
|
// Footer
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.drawText(250, 50, "Page 1 of 2 - zpdf Transforms Demo");
|
try page.drawText(250, 50, "Page 1 of 2 - zcatpdf Transforms Demo");
|
||||||
}
|
}
|
||||||
|
|
||||||
// =========================================================================
|
// =========================================================================
|
||||||
|
|
@ -323,7 +323,7 @@ pub fn main() !void {
|
||||||
// Footer
|
// Footer
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.drawText(250, 50, "Page 2 of 2 - zpdf Transforms Demo");
|
try page.drawText(250, 50, "Page 2 of 2 - zcatpdf Transforms Demo");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,25 @@
|
||||||
//! Transparency Demo - Alpha/Opacity Support
|
//! Transparency Demo - Alpha/Opacity Support
|
||||||
//!
|
//!
|
||||||
//! Demonstrates the transparency capabilities of zpdf including:
|
//! Demonstrates the transparency capabilities of zcatpdf including:
|
||||||
//! - Fill opacity for shapes and text
|
//! - Fill opacity for shapes and text
|
||||||
//! - Stroke opacity for lines and outlines
|
//! - Stroke opacity for lines and outlines
|
||||||
//! - Layered transparent objects
|
//! - Layered transparent objects
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const pdf = @import("zpdf");
|
const pdf = @import("zcatpdf");
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
defer _ = gpa.deinit();
|
defer _ = gpa.deinit();
|
||||||
const allocator = gpa.allocator();
|
const allocator = gpa.allocator();
|
||||||
|
|
||||||
std.debug.print("zpdf - Transparency Demo\n", .{});
|
std.debug.print("zcatpdf - Transparency Demo\n", .{});
|
||||||
|
|
||||||
var doc = pdf.Pdf.init(allocator, .{});
|
var doc = pdf.Pdf.init(allocator, .{});
|
||||||
defer doc.deinit();
|
defer doc.deinit();
|
||||||
|
|
||||||
doc.setTitle("Transparency Demo");
|
doc.setTitle("Transparency Demo");
|
||||||
doc.setAuthor("zpdf");
|
doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
const page = try doc.addPage(.{});
|
const page = try doc.addPage(.{});
|
||||||
|
|
||||||
|
|
@ -198,7 +198,7 @@ pub fn main() !void {
|
||||||
try page.setOpacity(1.0);
|
try page.setOpacity(1.0);
|
||||||
try page.setFont(.helvetica, 9);
|
try page.setFont(.helvetica, 9);
|
||||||
page.setFillColor(pdf.Color.medium_gray);
|
page.setFillColor(pdf.Color.medium_gray);
|
||||||
try page.drawText(250, 50, "zpdf Transparency Demo");
|
try page.drawText(250, 50, "zcatpdf Transparency Demo");
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
const filename = "transparency_demo.pdf";
|
const filename = "transparency_demo.pdf";
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@
|
||||||
//! Demonstrates loading and using TrueType fonts.
|
//! Demonstrates loading and using TrueType fonts.
|
||||||
|
|
||||||
const std = @import("std");
|
const std = @import("std");
|
||||||
const zpdf = @import("zpdf");
|
const zcatpdf = @import("zcatpdf");
|
||||||
const Pdf = zpdf.Pdf;
|
const Pdf = zcatpdf.Pdf;
|
||||||
const Color = zpdf.Color;
|
const Color = zcatpdf.Color;
|
||||||
const TrueTypeFont = zpdf.TrueTypeFont;
|
const TrueTypeFont = zcatpdf.TrueTypeFont;
|
||||||
|
|
||||||
pub fn main() !void {
|
pub fn main() !void {
|
||||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||||
|
|
@ -17,7 +17,7 @@ pub fn main() !void {
|
||||||
defer pdf.deinit();
|
defer pdf.deinit();
|
||||||
|
|
||||||
pdf.setTitle("TrueType Font Demo");
|
pdf.setTitle("TrueType Font Demo");
|
||||||
pdf.setAuthor("zpdf");
|
pdf.setAuthor("zcatpdf");
|
||||||
|
|
||||||
// Try to load a system TTF font
|
// Try to load a system TTF font
|
||||||
const font_paths = [_][]const u8{
|
const font_paths = [_][]const u8{
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
//! Compression module for zpdf
|
//! Compression module for zcatpdf
|
||||||
//!
|
//!
|
||||||
//! Provides zlib/deflate compression and decompression using libdeflate.
|
//! Provides zlib/deflate compression and decompression using libdeflate.
|
||||||
//! Used for PNG image processing and PDF stream compression.
|
//! Used for PNG image processing and PDF stream compression.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
//! zlib compression utilities for zpdf
|
//! zlib compression utilities for zcatpdf
|
||||||
//!
|
//!
|
||||||
//! Provides compression and decompression using libdeflate.
|
//! Provides compression and decompression using libdeflate.
|
||||||
//! Used for PNG image processing and PDF stream compression.
|
//! Used for PNG image processing and PDF stream compression.
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
//! Image module for zpdf
|
//! Image module for zcatpdf
|
||||||
//!
|
//!
|
||||||
//! Provides image parsing and embedding support for PDF generation.
|
//! Provides image parsing and embedding support for PDF generation.
|
||||||
//! Supports JPEG (direct embedding) and PNG (with alpha support).
|
//! Supports JPEG (direct embedding) and PNG (with alpha support).
|
||||||
|
|
|
||||||
|
|
@ -254,7 +254,7 @@ pub const OutputProducer = struct {
|
||||||
try base.writeString(writer, creator);
|
try base.writeString(writer, creator);
|
||||||
try writer.writeByte('\n');
|
try writer.writeByte('\n');
|
||||||
}
|
}
|
||||||
try writer.writeAll("/Producer (zpdf)\n");
|
try writer.writeAll("/Producer (zcatpdf)\n");
|
||||||
try writer.writeAll(">>\n");
|
try writer.writeAll(">>\n");
|
||||||
try self.endObject();
|
try self.endObject();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ const png = @import("images/png.zig");
|
||||||
const images_mod = @import("images/mod.zig");
|
const images_mod = @import("images/mod.zig");
|
||||||
const Outline = @import("outline.zig").Outline;
|
const Outline = @import("outline.zig").Outline;
|
||||||
|
|
||||||
/// Configuration constants for zpdf
|
/// Configuration constants for zcatpdf
|
||||||
pub const Config = struct {
|
pub const Config = struct {
|
||||||
/// Maximum file size for image loading (default: 10MB)
|
/// Maximum file size for image loading (default: 10MB)
|
||||||
pub const max_image_file_size: usize = 10 * 1024 * 1024;
|
pub const max_image_file_size: usize = 10 * 1024 * 1024;
|
||||||
|
|
|
||||||
24
src/root.zig
24
src/root.zig
|
|
@ -1,15 +1,15 @@
|
||||||
//! zpdf - PDF generation library for Zig
|
//! zcatpdf - PDF generation library for Zig
|
||||||
//!
|
//!
|
||||||
//! A pure Zig library for creating PDF documents with zero dependencies.
|
//! A pure Zig library for creating PDF documents with minimal dependencies.
|
||||||
//! Based on fpdf2 (Python) architecture.
|
//! Based on fpdf2 (Python) architecture.
|
||||||
//!
|
//!
|
||||||
//! ## Quick Start
|
//! ## Quick Start
|
||||||
//!
|
//!
|
||||||
//! ```zig
|
//! ```zig
|
||||||
//! const zpdf = @import("zpdf");
|
//! const zcatpdf = @import("zcatpdf");
|
||||||
//!
|
//!
|
||||||
//! pub fn main() !void {
|
//! pub fn main() !void {
|
||||||
//! var pdf = zpdf.Pdf.init(allocator, .{});
|
//! var pdf = zcatpdf.Pdf.init(allocator, .{});
|
||||||
//! defer pdf.deinit();
|
//! defer pdf.deinit();
|
||||||
//!
|
//!
|
||||||
//! var page = try pdf.addPage(.{});
|
//! var page = try pdf.addPage(.{});
|
||||||
|
|
@ -190,7 +190,7 @@ pub const Document = struct {
|
||||||
// Tests
|
// Tests
|
||||||
// =============================================================================
|
// =============================================================================
|
||||||
|
|
||||||
test "zpdf re-exports" {
|
test "zcatpdf re-exports" {
|
||||||
// Test that all types are accessible
|
// Test that all types are accessible
|
||||||
_ = Pdf;
|
_ = Pdf;
|
||||||
_ = Page;
|
_ = Page;
|
||||||
|
|
@ -221,19 +221,19 @@ test "Document backwards compatibility" {
|
||||||
test "new Pdf API" {
|
test "new Pdf API" {
|
||||||
const allocator = std.testing.allocator;
|
const allocator = std.testing.allocator;
|
||||||
|
|
||||||
var zpdf_doc = Pdf.init(allocator, .{
|
var pdf_doc = Pdf.init(allocator, .{
|
||||||
.page_size = .a4,
|
.page_size = .a4,
|
||||||
.orientation = .portrait,
|
.orientation = .portrait,
|
||||||
});
|
});
|
||||||
defer zpdf_doc.deinit();
|
defer pdf_doc.deinit();
|
||||||
|
|
||||||
zpdf_doc.setTitle("Test Document");
|
pdf_doc.setTitle("Test Document");
|
||||||
zpdf_doc.setAuthor("zpdf");
|
pdf_doc.setAuthor("zcatpdf");
|
||||||
|
|
||||||
var pg = try zpdf_doc.addPage(.{});
|
var pg = try pdf_doc.addPage(.{});
|
||||||
try pg.setFont(.helvetica_bold, 24);
|
try pg.setFont(.helvetica_bold, 24);
|
||||||
pg.setFillColor(Color.blue);
|
pg.setFillColor(Color.blue);
|
||||||
try pg.drawText(50, 750, "Hello zpdf!");
|
try pg.drawText(50, 750, "Hello zcatpdf!");
|
||||||
|
|
||||||
pg.setStrokeColor(Color.red);
|
pg.setStrokeColor(Color.red);
|
||||||
try pg.setLineWidth(2);
|
try pg.setLineWidth(2);
|
||||||
|
|
@ -242,7 +242,7 @@ test "new Pdf API" {
|
||||||
pg.setFillColor(Color.light_gray);
|
pg.setFillColor(Color.light_gray);
|
||||||
try pg.fillRect(50, 600, 150, 100);
|
try pg.fillRect(50, 600, 150, 100);
|
||||||
|
|
||||||
const data = try zpdf_doc.output();
|
const data = try pdf_doc.output();
|
||||||
defer allocator.free(data);
|
defer allocator.free(data);
|
||||||
|
|
||||||
try std.testing.expect(std.mem.startsWith(u8, data, "%PDF-1.4"));
|
try std.testing.expect(std.mem.startsWith(u8, data, "%PDF-1.4"));
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue