zcatpdf/examples/hello.zig
reugenio 0e17e8790b Initial commit: zpdf - PDF generation library for Zig
- Pure Zig implementation, zero dependencies
- PDF 1.4 format output
- Standard Type1 fonts (Helvetica, Times, Courier)
- Text rendering with colors
- Graphics primitives (lines, rectangles)
- Hello world and invoice examples

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 16:55:28 +01:00

74 lines
2.3 KiB
Zig

//! Minimal PDF example - Hello World
const std = @import("std");
const pdf = @import("zpdf");
pub fn main() !void {
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
defer _ = gpa.deinit();
const allocator = gpa.allocator();
std.debug.print("zpdf - Hello World example\n", .{});
// Create document
var doc = pdf.Document.init(allocator);
defer doc.deinit();
// Add a page
var page = try doc.addPage(.a4);
// Title
try page.setFont(.helvetica_bold, 36);
page.setFillColor(pdf.Color{ .r = 0, .g = 100, .b = 200 });
try page.drawText(50, 750, "Hello, PDF!");
// Subtitle
try page.setFont(.helvetica, 14);
page.setFillColor(pdf.Color.gray);
try page.drawText(50, 710, "Generated with zpdf - Pure Zig PDF library");
// Draw a line
try page.setLineWidth(1);
page.setStrokeColor(pdf.Color.light_gray);
try page.drawLine(50, 700, 545, 700);
// Body text
try page.setFont(.times_roman, 12);
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, 655, "The zpdf library supports:");
try page.drawText(70, 635, "- Multiple fonts (Helvetica, Times, Courier)");
try page.drawText(70, 620, "- Colors (RGB)");
try page.drawText(70, 605, "- Lines and rectangles");
try page.drawText(70, 590, "- Multiple pages");
// Draw some shapes
try page.setLineWidth(2);
page.setStrokeColor(pdf.Color.blue);
page.setFillColor(pdf.Color{ .r = 230, .g = 240, .b = 255 });
try page.drawFilledRect(50, 500, 200, 60);
try page.setFont(.helvetica_bold, 14);
page.setFillColor(pdf.Color.blue);
try page.drawText(60, 540, "Shapes work too!");
// Red rectangle
page.setStrokeColor(pdf.Color.red);
page.setFillColor(pdf.Color{ .r = 255, .g = 230, .b = 230 });
try page.drawFilledRect(280, 500, 200, 60);
page.setFillColor(pdf.Color.red);
try page.drawText(290, 540, "Multiple colors!");
// Footer
try page.setFont(.courier, 10);
page.setFillColor(pdf.Color.gray);
try page.drawText(50, 50, "zpdf v0.1.0 - https://git.reugenio.com/reugenio/zpdf");
// Save
const filename = "hello.pdf";
try doc.saveToFile(filename);
std.debug.print("Created: {s}\n", .{filename});
std.debug.print("Done!\n", .{});
}