1D- en 2D-barcodes genereren in een PDF
In een oogopslag
Sectie met titel “In een oogopslag”Dit recept tekent eendimensionale (1D) en tweedimensionale (2D) barcodes rechtstreeks op een PDF-pagina (Portable Document Format). De Core-trait HasBarcodes biedt u de methoden write1DBarcode() en write2DBarcode(). Beide methoden tekenen het symbool als native PDF-padoperatoren op de huidige pagina, zodat de uitvoer eenvoudige, deterministische vectorinhoud blijft. Het recept is gebaseerd op examples/10-barcodes.php.
Installeren
Sectie met titel “Installeren”composer require nextpdf/core:^3U hebt geen extra extensie nodig. De barcode-encoders zijn puur PHP en NextPDF tekent de symbolen met de standaard PDF-rechthoekoperator (ISO 32000-2 §8.5).
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”Een barcode wordt getekend en niet als afbeelding ingesloten. De payload bestaat uit de gegevens die u codeert, zoals een productnummer of een webadres.
write1DBarcode() codeert de payload in een bar/space-patroon voor het gekozen BarcodeType en produceert daarna een reeks gevulde rechthoeken. write2DBarcode() bouwt een matrix met modules voor het gekozen Barcode2DType en produceert één gevulde rechthoek voor elke donkere module. Data Matrix en QR Code gebruiken Reed-Solomon-foutcorrectie, zodat een scanner de gegevens kan herstellen, zelfs wanneer een deel van het symbool beschadigd is.
Elke module is een deterministisch re … f-pad zonder entropiebron, zodat de barcode-inhoud op zichzelf volledig reproduceerbaar is. Het reproduceerbaarheidsprofiel is structural omdat het omringende document nog steeds atomen bevat die bij elke opslagactie worden gegenereerd: de trailer /ID, plus de tijdstempels /CreationDate en /ModDate. De harness vergelijkt de qpdf-genormaliseerde structuur nadat die atomen zijn verwijderd.
API-oppervlak
Sectie met titel “API-oppervlak”NextPDF\Core\Concerns\HasBarcodes (gemengd in Document):
write1DBarcode(string $code, BarcodeType $type, ?float $x = null, ?float $y = null, float $w = 0, float $h = 30, float $barWidth = 0.4, bool $skipZeroWidthBars = true): staticwrite2DBarcode(string $code, Barcode2DType $type, ?float $x = null, ?float $y = null, float $w = 0, float $h = 0, float $moduleSize = 1.0, string $ecLevel = 'L', ?int $mask = null, ?int $version = null, bool $gs1 = false, bool $dmre = false, bool $rectangular = false): static
Een symbologie is een barcodestandaard die bepaalt hoe gegevens worden omgezet in balken of modules. BarcodeType bevat de 1D-symbologieën (C128, EAN13, UPCA, I25, CODABAR, ISBN, GS1_128, …) en Barcode2DType bevat de 2D-symbologieën (QRCode, DataMatrix, PDF417, HanXin, MicroQR, …).
Codevoorbeeld — Snel aan de slag
Sectie met titel “Codevoorbeeld — Snel aan de slag”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Barcode\Barcode2DType;use NextPDF\Barcode\BarcodeType;use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->setTitle('Barcode Quick Start');$doc->addPage();
$doc->write1DBarcode('NEXTPDF-2026', BarcodeType::C128, x: 15, y: 30, w: 80, h: 20);$doc->write2DBarcode('https://nextpdf.dev', Barcode2DType::QRCode, x: 15, y: 60, w: 40, h: 40);
$doc->save(__DIR__ . '/barcodes.pdf');echo "Wrote barcodes.pdf\n";Codevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”Het volledige voorbeeld hieronder, dat door de harness kan worden uitgevoerd, komt overeen met examples/10-barcodes.php. Het schrijft de PDF naar het pad dat de harness aanlevert via NEXTPDF_COOKBOOK_OUTPUT en valt terug op een lokaal bestand wanneer u het handmatig uitvoert. De reproduceerbaarheidsharness kan het daarna twee keer uitvoeren en structurele identiteit afdwingen. De structuur is qpdf-genormaliseerd, met de bij elke opslagactie gegenereerde atomen /ID en tijdstempels verwijderd.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Barcode\Barcode2DType;use NextPDF\Barcode\BarcodeType;use NextPDF\Core\Document;
$doc = Document::createStandalone();$doc->setTitle('Barcode Examples');$doc->addPage();
$doc->setFont('helvetica', 'B', 18);$doc->cell(0, 12, 'Barcode Examples', newLine: true);$doc->ln(5);
// --- 1D barcodes ---$doc->setFont('helvetica', 'B', 14);$doc->cell(0, 10, '1D Barcodes', newLine: true);$doc->ln(3);
$doc->setFont('helvetica', '', 10);$doc->cell(0, 6, 'Code 128:', newLine: true);$doc->write1DBarcode('NEXTPDF-2026', BarcodeType::C128, x: 15, y: null, w: 80, h: 20);$doc->ln(28);
$doc->cell(0, 6, 'EAN-13:', newLine: true);$doc->write1DBarcode('4006381333931', BarcodeType::EAN13, x: 15, y: null, w: 60, h: 20);$doc->ln(28);
// --- 2D barcodes ---$doc->setFont('helvetica', 'B', 14);$doc->cell(0, 10, '2D Barcodes', newLine: true);$doc->ln(3);
$doc->setFont('helvetica', '', 10);$doc->cell(0, 6, 'QR Code (URL):', newLine: true);$doc->write2DBarcode('https://nextpdf.dev', Barcode2DType::QRCode, x: 15, y: null, w: 40, h: 40);$doc->ln(48);
$doc->cell(0, 6, 'DataMatrix:', newLine: true);$doc->write2DBarcode('NextPDF-DM-2026', Barcode2DType::DataMatrix, x: 15, y: null, w: 30, h: 30);
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT');$doc->save($out !== false ? $out : __DIR__ . '/barcodes.pdf');
echo "Wrote barcodes PDF (Code 128, EAN-13, QR Code, DataMatrix)\n";Verwachte uitvoer:
Wrote barcodes PDF (Code 128, EAN-13, QR Code, DataMatrix)Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- De geldigheid van de payload is symbologiespecifiek.
EAN13verwacht 12 of 13 cijfers. Een ongeldige payload veroorzaakt een fout voordat NextPDF inhoud schrijft.UPCA,ISBNenISSNhebben hun eigen lengte- en controlecijferregels. x/yzijn optioneel. Als u ze weglaat, wordt de barcode op de huidige cursorpositie geplaatst. Geef expliciete coördinaten op voor een voorspelbare lay-out.w = 0past de grootte automatisch aan. Bij een breedte van nul kiest de encoder een natuurlijke modulebreedte. Geef een positieve breedte op om binnen een vast vak te passen.- 2D-foutcorrectieniveau.
write2DBarcode()gebruikt standaardecLevel: 'L', het laagste niveau. Verhoog het ('M','Q','H') voor QR Codes die bestand moeten zijn tegen printbeschadiging. Hogere niveaus vergroten de matrix. - GS1-toepassingsidentificatoren. Geef
gs1: truedoor aanwrite2DBarcode(), of gebruikBarcodeType::GS1_128, voor GS1-gestructureerde gegevens met de FNC1-prefix. - Een pagina wordt impliciet aangemaakt. Als u een barcodemethode aanroept vóór
addPage(), voegt NextPDF eerst een pagina toe. Dat is handig, maar roepaddPage()expliciet aan wanneer de paginageometrie van belang is.
Prestaties
Sectie met titel “Prestaties”Coderen is O(payload-lengte) voor 1D en O(matrixoppervlak) voor 2D, en beide verlopen op microsecondeschaal. Elke module is één re … f-padoperator, dus een dichte QR Code voegt een paar kilobytes aan de content stream toe. Er is geen rasterisatiestap, dus het geheugengebruik blijft constant ongeacht de symboolgrootte. Het recept blijft ruim binnen het budget van 1500 ms / 64 MB.
Beveiligingsopmerkingen
Sectie met titel “Beveiligingsopmerkingen”Een barcode bevat de payload die u doorgeeft, dus behandel de barcodewaarde aan de verwerkende kant als elke andere niet-vertrouwde invoer. De bibliotheek ondertekent of authenticeert de payload niet. Een 2D-symbool is geen encryptie: iedereen met een scanner kan het lezen.
Conformiteit
Sectie met titel “Conformiteit”| Verklaring | Specificatie | Clausule | reference_id |
|---|---|---|---|
| Barcodemodules worden getekend met de rechthoekoperator voor padconstructie. | ISO 32000-2 | §8.5 | |
| Symbooltekens van Code 128 gebruiken de gedefinieerde bar/space-elementstructuur. | ISO/IEC 15417 | §4.3.1 | |
| Data Matrix-symbolen gebruiken Reed-Solomon-foutcorrectie. | ISO/IEC 16022 | §7.6.1 | |
| QR Code-gegevens worden opgesplitst in foutcorrectieblokken. | ISO/IEC 18004 | §7.5.2 |
NextPDF implementeert de aangehaalde symbologiecoderingen, maar claimt geen formele certificering volgens de barcodestandaarden. De corpusdocumenten over barcodesymbologie zijn licentietechnisch beperkt tot Tier C. Citaten gebruiken uitsluitend clause-id- en reference_id-verwijzingen, en er wordt geen standaardtekst gereproduceerd.