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:
reugenio 2025-12-09 02:10:57 +01:00
parent 3826cbaed4
commit f09922076f
27 changed files with 188 additions and 188 deletions

View file

@ -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*

View file

@ -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*

View file

@ -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(.{}){};

View file

@ -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

View file

@ -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 },
}, },
}), }),
}); });

View file

@ -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");

View file

@ -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

View file

@ -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

View file

@ -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");

View file

@ -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";

View file

@ -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";

View file

@ -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();

View file

@ -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,

View file

@ -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);

View file

@ -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,

View file

@ -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";

View file

@ -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");

View file

@ -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";

View file

@ -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

View file

@ -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";

View file

@ -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{

View file

@ -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.

View file

@ -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.

View file

@ -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).

View file

@ -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();

View file

@ -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;

View file

@ -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"));