Skip to content

QR Codes & Barcodes

QR 코드 및 1D 바코드를 PDF 문서로 직접 생성합니다. 코어 라이브러리를 경량으로 유지하기 위해 바코드 생성은 기능 플래그 뒤에 있습니다.

기능 플래그 필요: barcodes

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

빠른 예제

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

전체 API 레퍼런스

QR 코드 생성

Pdf::from_qrcode(data) – 기본값 QR Code

300px QR 코드가 있는 단일 페이지 PDF를 생성합니다.

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

Python Signature:

Pdf.from_qrcode(data: str) -> Pdf

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

크기, 오류 수정, 색상, 여백 영역에 대한 완전한 제어.

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

메서드 기본값 설명
.size(px) 200 QR code size in pixels
.error_correction(level) Medium 오류 수정 수준
.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% 최대 데이터 밀도
Medium ~15% 범용(기본값)
Quartile ~25% Labels that may get damaged
High ~30% Industrial / harsh environments

1D 바코드 생성

Pdf::from_barcode(barcode_type, data) – 기본값 Barcode

기본 크기(200x80)로 바코드가 있는 단일 페이지 PDF를 생성합니다.

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

Python Signature:

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

Pdf::from_barcode_with_options(barcode_type, data, options) – 사용자 정의 바코드

바코드 크기와 색상에 대한 완전한 제어.

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

메서드 기본값 설명
.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)

저수준 BarcodeGenerator

전체 PDF를 생성하지 않고 바코드 이미지를 생성합니다 (예: 기존 문서에 임베드):

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

PdfBuilder로 바코드 사용

PdfBuilder는 바코드 PDF 생성 전 페이지 크기와 문서 메타데이터를 설정하기 위한 플루언트 인터페이스를 제공합니다.

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

고급 예제

여러 바코드가 있는 배송 라벨

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

제품 라벨 일괄 생성

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

기능 플래그

barcodes 기능은 두 개의 추가 종속성을 가져옵니다:

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

기능 플래그 없이 모든 바코드 메서드는 기능이 필요하다는 오류 메시지를 반환합니다.

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

관련 페이지