QR コードとバーコード
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) – Default 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
| Method | Default | 説明 |
|---|---|---|
.size(px) |
200 | QRコードサイズ(ピクセル) |
.error_correction(level) |
Medium |
エラー訂正レベル |
.quiet_zone(modules) |
4 | モジュール単位の境界幅 |
.foreground(r, g, b, a) |
Black (0,0,0,255) | モジュール色(RGBA) |
.background(r, g, b, a) |
White (255,255,255,255) | 背景色(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) – Default 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) – Custom Barcode
バーコードの寸法と色を完全に制御します。
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 | Default | 説明 |
|---|---|---|
.width(px) |
200 | バーコード幅(ピクセル) |
.height(px) |
80 | バーコード高さ(ピクセル) |
.foreground(r, g, b, a) |
Black (0,0,0,255) | バーの色(RGBA) |
.background(r, g, b, a) |
White (255,255,255,255) | 背景色(RGBA) |
.show_text(bool) |
false | 人間が読めるテキストを表示 |
BarcodeType Enum
| Variant | Name | Data Format |
|---|---|---|
Code128 |
Code 128 | 英数字(A/B/Cを自動選択) |
Code39 |
Code 39 | 大文字英数字 + 記号 |
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 | 数字ペア(偶数桁数) |
Code93 |
Code 93 | 英数字(コンパクト) |
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")
フィーチャーフラグ
バーコード機能は2つの追加依存関係を追加します:
barcoders– 1D barcode encodingqrcode– QR code encoding
フィーチャーフラグなしでは、すべてのバーコードメソッドは機能が必要であることを示すエラーメッセージを返します。
// Without the barcodes feature enabled:
let result = Pdf::from_qrcode("test");
// Returns Err("QR code generation requires the 'barcodes' feature")
関連ページ
- PdfBuilder Fluent API – バーコードPDF用のページサイズとメタデータを設定
- Create from Images – 複数コンテンツPDFにバーコードPNGを埋め込み
- Graphics, Patterns and Shadings – カスタムラベルレイアウト用の低レベル描画
- Types & Enums – BarcodeType列挙型の詳細