Skip to content

Códigos QR e Códigos de Barras

Gere códigos QR e códigos de barras 1D diretamente como documentos PDF. A geração de codigos de barras esta atras de uma feature flag para manter a biblioteca principal leve.

Requer flag de feature: barcodes

# Cargo.toml
[dependencies]
pdf_oxide = { version = "0.3", features = ["barcodes"] }

Exemplo Rápido

Python

from pdf_oxide import Pdf

# QR code
pdf = Pdf.from_qrcode("https://example.com")
pdf.save("qrcode.pdf")

# Barcode
pdf = Pdf.from_barcode("Code128", "ABC-12345")
pdf.save("barcode.pdf")

Rust

use pdf_oxide::api::Pdf;

// QR code
let pdf = Pdf::from_qrcode("https://example.com")?;
pdf.save("qrcode.pdf")?;

// Barcode
use pdf_oxide::writer::barcode::BarcodeType;
let pdf = Pdf::from_barcode(BarcodeType::Code128, "ABC-12345")?;
pdf.save("barcode.pdf")?;

Referência Completa da API

Geração de Código QR

Pdf::from_qrcode(data) – Padrão QR Code

Cria um PDF de uma única página com um código QR de 300px.

Rust:

use pdf_oxide::api::Pdf;

let pdf = Pdf::from_qrcode("https://example.com")?;
pdf.save("qr.pdf")?;

Python:

from pdf_oxide import Pdf

pdf = Pdf.from_qrcode("https://example.com")
pdf.save("qr.pdf")

Assinatura Python:

Pdf.from_qrcode(data: str) -> Pdf

Pdf::from_qrcode_with_options(data, options) – Custom QR Code

Controle total sobre tamanho, correção de erros, cores e zona silenciosa.

Rust:

use pdf_oxide::api::Pdf;
use pdf_oxide::writer::barcode::{QrCodeOptions, QrErrorCorrection};

let options = QrCodeOptions::new()
    .size(400)
    .error_correction(QrErrorCorrection::High)
    .quiet_zone(6)
    .foreground(0, 0, 128, 255)          // Navy blue
    .background(255, 255, 255, 255);     // White

let pdf = Pdf::from_qrcode_with_options("https://example.com", &options)?;
pdf.save("custom_qr.pdf")?;

QrCodeOptions – QR Configuration

Method Padrão Descrição
.size(px) 200 QR code size in pixels
.error_correction(level) Medium Error correction level
.quiet_zone(modules) 4 Border width in modules
.foreground(r, g, b, a) Black (0,0,0,255) Module color (RGBA)
.background(r, g, b, a) White (255,255,255,255) Background color (RGBA)

QrErrorCorrection Enum

Variant Recovery Capacity Use Case
Low ~7% Maximum data density
Medium ~15% General purpose (default)
Quartile ~25% Labels that may get damaged
High ~30% Industrial / harsh environments

Geração de Código de Barras 1D

Pdf::from_barcode(barcode_type, data) – Padrão Barcode

Cria um PDF de uma única página com um código de barras usando tamanho padrão (200x80).

Rust:

use pdf_oxide::api::Pdf;
use pdf_oxide::writer::barcode::BarcodeType;

let pdf = Pdf::from_barcode(BarcodeType::Ean13, "5901234123457")?;
pdf.save("product.pdf")?;

Python:

from pdf_oxide import Pdf

# Barcode type as string: "code128", "ean13", "upca", "code39", "ean8", "itf"
pdf = Pdf.from_barcode("ean13", "5901234123457")
pdf.save("product.pdf")

Assinatura Python:

Pdf.from_barcode(
    barcode_type: str,  # "code128" | "ean13" | "upca" | "code39" | "ean8" | "itf"
    data: str
) -> Pdf

Pdf::from_barcode_with_options(barcode_type, data, options) – Custom Barcode

Controle total sobre dimensões e cores do código de barras.

Rust:

use pdf_oxide::api::Pdf;
use pdf_oxide::writer::barcode::{BarcodeType, BarcodeOptions};

let options = BarcodeOptions::new()
    .width(400)
    .height(120)
    .foreground(0, 0, 0, 255)
    .background(255, 255, 255, 255);

let pdf = Pdf::from_barcode_with_options(
    BarcodeType::Code128,
    "SHIP-2025-00042",
    &options,
)?;
pdf.save("shipping_label.pdf")?;

BarcodeOptions – 1D Configuration

Method Padrão Descrição
.width(px) 200 Barcode width in pixels
.height(px) 80 Barcode height in pixels
.foreground(r, g, b, a) Black (0,0,0,255) Bar color (RGBA)
.background(r, g, b, a) White (255,255,255,255) Background color (RGBA)
.show_text(bool) false Show human-readable text

BarcodeType Enum

Variant Name Data Format
Code128 Code 128 Alphanumeric (auto-selects A/B/C)
Code39 Code 39 Uppercase alphanumeric + symbols
Ean13 EAN-13 13 digits (European Article Number)
Ean8 EAN-8 8 digits (compact EAN)
UpcA UPC-A 11-12 digits (Universal Product Code)
Itf Interleaved 2 of 5 Numeric pairs (even digit count)
Code93 Code 93 Alphanumeric (compact)
Codabar Codabar Digits + special chars (A-D start/stop)

Low-Level BarcodeGenerator

Para generating barcode images without creating a full PDF (e.g., to embed in an existing document):

use pdf_oxide::writer::barcode::{BarcodeGenerator, BarcodeType, BarcodeOptions, QrCodeOptions};

// Generate QR code as PNG bytes
let qr_png = BarcodeGenerator::generate_qr(
    "https://example.com",
    &QrCodeOptions::default().size(256),
)?;

// Generate QR code with simple API
let qr_png = BarcodeGenerator::generate_qr_simple("https://example.com", 200)?;

// Generate 1D barcode as PNG bytes
let barcode_png = BarcodeGenerator::generate_1d(
    BarcodeType::Code128,
    "ABC123",
    &BarcodeOptions::default().width(300).height(100),
)?;

// Convenience methods
let code128_png = BarcodeGenerator::generate_code128("DATA", 200, 80)?;
let ean13_png = BarcodeGenerator::generate_ean13("5901234123457", 200, 80)?;

Using PdfBuilder with Barcodes

PdfBuilder provides a fluent interface for setting página size and document metadata before generating barcode PDFs.

use pdf_oxide::api::PdfBuilder;
use pdf_oxide::writer::PageSize;
use pdf_oxide::writer::barcode::{BarcodeType, QrCodeOptions, QrErrorCorrection};

// QR code with custom page size
let pdf = PdfBuilder::new()
    .title("WiFi Access")
    .page_size(PageSize::Custom(300.0, 300.0))
    .from_qrcode("WIFI:T:WPA;S:MyNetwork;P:secret123;;")?;
pdf.save("wifi_qr.pdf")?;

// Barcode with metadata
let pdf = PdfBuilder::new()
    .title("Product Label")
    .author("Warehouse System")
    .from_barcode(BarcodeType::Ean13, "5901234123457")?;
pdf.save("label.pdf")?;

Exemplos Avançados

Shipping Label with Multiple Barcodes

use pdf_oxide::writer::barcode::{BarcodeGenerator, BarcodeType, BarcodeOptions, QrCodeOptions};
use pdf_oxide::writer::{PdfWriter, PdfWriterConfig};
use pdf_oxide::geometry::Rect;

// Generate barcode images
let tracking_barcode = BarcodeGenerator::generate_code128(
    "1Z999AA10123456784",
    300,
    80,
)?;

let qr_bytes = BarcodeGenerator::generate_qr(
    "https://track.example.com/1Z999AA10123456784",
    &QrCodeOptions::new().size(200).error_correction(QrErrorCorrection::Medium),
)?;

// These PNG bytes can then be embedded in a PDF using the image APIs

Batch Generate Product Labels

use pdf_oxide::api::Pdf;
use pdf_oxide::writer::barcode::BarcodeType;

let products = vec![
    ("5901234123457", "Widget A"),
    ("4006381333931", "Widget B"),
    ("0012345678905", "Widget C"),
];

for (ean, name) in products {
    let pdf = Pdf::from_barcode(BarcodeType::Ean13, ean)?;
    pdf.save(format!("label_{}.pdf", name.to_lowercase().replace(' ', "_")))?;
}

Python: Generate and Save QR Codes

from pdf_oxide import Pdf

urls = [
    "https://example.com/product/1",
    "https://example.com/product/2",
    "https://example.com/product/3",
]

for i, url in enumerate(urls):
    pdf = Pdf.from_qrcode(url)
    pdf.save(f"qr_product_{i + 1}.pdf")

Python: Batch Barcode Generation

from pdf_oxide import Pdf

items = [
    ("code128", "SHIP-00001"),
    ("code128", "SHIP-00002"),
    ("ean13", "5901234123457"),
    ("upca", "012345678905"),
]

for barcode_type, data in items:
    pdf = Pdf.from_barcode(barcode_type, data)
    pdf.save(f"barcode_{data}.pdf")

Feature Flag

A feature barcodes adiciona duas dependências adicionais:

  • barcoders – 1D barcode encoding
  • qrcode – QR code encoding

Without the feature flag, all barcode methods return an error message indicating the feature is required.

// Without the barcodes feature enabled:
let result = Pdf::from_qrcode("test");
// Returns Err("QR code generation requires the 'barcodes' feature")

Páginas Relacionadas