Skip to content

API Fluida de PdfBuilder

PdfBuilder ofrece una API de configuración fluida para la creación de PDF. Encadena métodos para establecer el tamaño de página, los márgenes, el tamaño de fuente, los metadatos y más, y luego llama a un método from_* para generar el PDF.

Cobertura por binding. El PdfBuilder / WasmPdfBuilder fluido está disponible en Python, Rust y WASM. Los bindings de Go y C# exponen los puntos de entrada abreviados (FromMarkdown, FromHtml, FromImage / Pdf.FromMarkdown, Pdf.FromHtml, Pdf.FromText), pero no la superficie de configuración del builder. Para márgenes o tamaños de página personalizados desde Go o C#, llama a la CLI de Rust con flags o envuelve un helper de Rust que exponga el builder mediante FFI.

Ejemplo Rápido

Python

from pdf_oxide import Pdf

# Python uses optional keyword arguments on Pdf static methods
pdf = Pdf.from_markdown(
    "# Report\n\nContent here.",
    title="Quarterly Report",
    author="Finance Team"
)
pdf.save("report.pdf")

WASM

import { WasmPdf } from "pdf-oxide-wasm";

// JavaScript uses optional title and author parameters
const pdf = WasmPdf.fromMarkdown(
  "# Report\n\nContent here.",
  "Quarterly Report",
  "Finance Team"
);
writeFileSync("report.pdf", pdf.toBytes());

Rust

use pdf_oxide::api::PdfBuilder;
use pdf_oxide::writer::PageSize;

let pdf = PdfBuilder::new()
    .title("Quarterly Report")
    .author("Finance Team")
    .page_size(PageSize::A4)
    .margin(54.0)
    .font_size(11.0)
    .line_height(1.5)
    .from_markdown("# Report\n\nContent here.")?;

pdf.save("report.pdf")?;

Referencia Completa de la API

Constructor

PdfBuilder::new() -> PdfBuilder

Crea un nuevo builder con la configuración predeterminada:

Ajuste Predeterminado
Tamaño de página Letter (8.5" x 11")
Todos los márgenes 72pt (1 pulgada)
Tamaño de fuente 12pt
Altura de línea 1.5

Métodos de Metadatos

.title(title) – Establece el Título del Documento

PdfBuilder::new().title("My Document")

.author(author) – Establece el Autor del Documento

PdfBuilder::new().author("Jane Smith")

.subject(subject) – Establece el Asunto del Documento

PdfBuilder::new().subject("Annual Performance Review")

.keywords(keywords) – Establece las Palabras Clave del Documento

PdfBuilder::new().keywords("report, annual, 2025")

Métodos de Maquetación

.page_size(size) – Establece el Tamaño de Página

use pdf_oxide::writer::PageSize;

PdfBuilder::new().page_size(PageSize::A4)

Enum PageSize:

Variante Dimensiones
PageSize::Letter 612 x 792 pt (8.5" x 11")
PageSize::A4 595 x 842 pt (210 x 297 mm)
PageSize::Legal 612 x 1008 pt (8.5" x 14")
PageSize::A3 842 x 1190 pt (297 x 420 mm)
PageSize::Custom(w, h) Ancho x alto personalizados en puntos

.margin(margin) – Establece Márgenes Uniformes

Establece los cuatro márgenes (izquierdo, derecho, superior, inferior) con el mismo valor en puntos.

PdfBuilder::new().margin(54.0)  // 0.75 inch margins

.margins(left, right, top, bottom) – Establece Márgenes Individuales

PdfBuilder::new().margins(72.0, 72.0, 54.0, 54.0)

Métodos de Tipografía

.font_size(size) – Establece el Tamaño de Fuente Predeterminado

PdfBuilder::new().font_size(11.0)

.line_height(height) – Establece el Multiplicador de Altura de Línea

Controla el espaciado entre líneas. Un valor de 1.5 significa 1,5 veces el tamaño de fuente.

PdfBuilder::new().line_height(1.6)

Métodos de Generación

Cada método de generación consume el builder y devuelve un objeto Pdf.

.from_markdown(content) – Genera a partir de Markdown

let pdf = PdfBuilder::new()
    .title("Notes")
    .from_markdown("# Notes\n\n- Item one\n- Item two")?;

.from_html(content) – Genera a partir de HTML

let pdf = PdfBuilder::new()
    .title("Report")
    .from_html("<h1>Report</h1><p>Summary of findings.</p>")?;

.from_text(content) – Genera a partir de Texto Plano

let pdf = PdfBuilder::new()
    .font_size(10.0)
    .from_text("Line 1\nLine 2\nLine 3")?;

.from_image(path) – Genera a partir de una Sola Imagen

let pdf = PdfBuilder::new()
    .page_size(PageSize::A4)
    .from_image("photo.jpg")?;

.from_image_bytes(data) – Genera a partir de Bytes de Imagen

let data = std::fs::read("chart.png")?;
let pdf = PdfBuilder::new().from_image_bytes(&data)?;

.from_images(paths) – Genera a partir de Múltiples Imágenes

let pdf = PdfBuilder::new()
    .title("Photo Album")
    .from_images(&["img1.jpg", "img2.jpg", "img3.jpg"])?;

.from_qrcode(data) – Genera un PDF con Código QR

Requiere la feature barcodes.

let pdf = PdfBuilder::new()
    .title("QR Code")
    .from_qrcode("https://example.com")?;

.from_barcode(barcode_type, data) – Genera un PDF con Código de Barras

Requiere la feature barcodes.

use pdf_oxide::writer::barcode::BarcodeType;

let pdf = PdfBuilder::new()
    .from_barcode(BarcodeType::Code128, "ABC-12345")?;

Ejemplos Avanzados

Cadena de Configuración Completa

use pdf_oxide::api::PdfBuilder;
use pdf_oxide::writer::PageSize;

let content = r#"
# Technical Specification

## Overview

This document defines the interface contract for the v2 API.

## Endpoints

- `GET /api/v2/users` - List users
- `POST /api/v2/users` - Create user
- `GET /api/v2/users/:id` - Get user by ID

## Authentication

All endpoints require a Bearer token in the Authorization header.
"#;

let pdf = PdfBuilder::new()
    .title("API Specification v2")
    .author("Platform Team")
    .subject("REST API Technical Specification")
    .keywords("api, rest, specification, v2")
    .page_size(PageSize::A4)
    .margins(72.0, 72.0, 54.0, 72.0)
    .font_size(11.0)
    .line_height(1.5)
    .from_markdown(content)?;

pdf.save("api_spec.pdf")?;

Tamaño de Página Personalizado

use pdf_oxide::api::PdfBuilder;
use pdf_oxide::writer::PageSize;

// Create a half-letter page (5.5" x 8.5")
let pdf = PdfBuilder::new()
    .page_size(PageSize::Custom(396.0, 612.0))
    .margin(36.0)
    .font_size(10.0)
    .from_markdown("# Pocket Guide\n\nCompact reference card.")?;

pdf.save("pocket_guide.pdf")?;

Equivalente en JavaScript

En JavaScript/WASM, los métodos estáticos de WasmPdf aceptan parámetros opcionales title y author, proporcionando la misma funcionalidad que los metadatos de PdfBuilder:

import { WasmPdf } from "pdf-oxide-wasm";

const pdf = WasmPdf.fromMarkdown("# Notes\n\n- Item one\n- Item two", "Notes");
const html = WasmPdf.fromHtml("<h1>Report</h1><p>Summary.</p>", "Report", "Author");
const text = WasmPdf.fromText("Line 1\nLine 2", "Plain Text Doc");
const img = WasmPdf.fromImageBytes(imageData);

La configuración del tamaño de página, los márgenes, el tamaño de fuente y la altura de línea no está disponible en la API de WASM: usa los ajustes de maquetación predeterminados.

Métodos de Salida

Una vez que tengas un objeto Pdf / WasmPdf, usa estos métodos para generarlo:

Método Lenguaje Descripción
.save(path) Python, Rust Escribe el PDF en un archivo
.to_bytes() (Python) Python Obtiene los bytes sin procesar del PDF
.into_bytes() (Rust) Rust Consume el Pdf y devuelve Vec<u8>
.toBytes() (JS) JavaScript Obtiene el PDF como Uint8Array

Páginas Relacionadas