1C-Bitrix Integration with Brother Label Printers
When switching to self-adhesive labels, many online stores face a problem: Zebra printers are expensive and overkill for small volumes. Brother offers a budget-friendly alternative, but integration with Bitrix requires a non-standard approach—via the system printer rather than a direct data stream. We have experience of over 10 projects integrating Brother into the 1C-Bitrix ecosystem and guarantee stable printing in office and light warehouse scenarios.
Brother is an alternative to Zebra for office and light warehouse tasks. The QL series (thermal printing on DK tapes) and PT series (label printers) are used where small batches of labels are needed: packaging marking, address labels for shipments, shelf labels. The key difference from Zebra: Brother works primarily through system printer (GDI/CUPS), not through RAW TCP/IP with ZPL. Brother is 30–50% faster to set up for small businesses—no need to learn ZPL, basic PHP knowledge is enough.
Why Brother instead of Zebra for starters?
Brother is significantly more cost-effective for volumes up to 500 labels per day: the printer cost is 2–3 times lower, and integration setup takes 3–5 days less. For an online store with 50–200 orders per day, this is the optimal solution. If volumes grow, we can scale the system to Zebra without data loss.
Interaction methods with Brother printer
Option 1: Via system printer (recommended for office)
Brother is installed as a system printer in Windows or macOS. Bitrix generates a PDF or PNG of the required size and sends it to print via a system command:
function printLabelViaCups(string $pdfPath, string $printerName): bool { $cmd = escapeshellcmd("lp -d " . escapeshellarg($printerName) . " " . escapeshellarg($pdfPath)); exec($cmd . ' 2>&1', $output, $returnCode); return $returnCode === 0; } For Windows — similarly via SumatraPDF -print-to or mspaint /pt. Option 2: Brother SDK / b-PAC (Windows only)
Brother provides a COM object b-PAC for working with .lbx templates in P-touch Editor. Integration via PHP COM interface:
$doc = new COM('bpac.Document'); $doc->Open('C:\\Labels\\price_label.lbx'); $doc->GetObject('barcode')->Text = $barcode; $doc->GetObject('price')->Text = number_format($price, 2, ',', ' ') . ' rub.'; $doc->GetObject('name')->Text = $productName; $doc->StartPrint('', 0); $doc->PrintOut(1, 0); $doc->EndPrint(); $doc->Close(); This approach works only if PHP runs on a Windows server with Brother P-touch Editor installed. Not applicable for production servers under Linux.
Option 3: Brother Web API (QL-820NWB and newer models)
Some network Brother models have a web API. Documentation is model-specific, but the general principle: HTTP POST with base64-encoded image or PDF. This method is faster than system printing but requires additional development on the Bitrix side.
How to organize a print queue for Brother?
Unlike Zebra (where TCP sending is fast), printing via system printer takes time. We use the same queue architecture bl_brother_print_queue:
CREATE TABLE bl_brother_print_queue ( id SERIAL PRIMARY KEY, printer_name VARCHAR(128) NOT NULL, -- name in CUPS template VARCHAR(64) NOT NULL, product_id INT, data_json JSONB, copies SMALLINT DEFAULT 1, status VARCHAR(20) DEFAULT 'pending', created_at TIMESTAMP DEFAULT NOW(), processed_at TIMESTAMP ); A Bitrix agent takes jobs from the queue, renders a PNG via BrotherLabelRenderer, and sends it to CUPS. For large volumes, you can scale by using multiple printers and running several agents in parallel.
Label generation on the Bitrix side
For Linux servers (Option 1), generate the label image via GD or Imagick:
class BrotherLabelRenderer { public function renderPriceLabel(array $product, int $widthMm = 62, int $heightMm = 29): string { $dpi = 300; $wPx = (int)($widthMm / 25.4 * $dpi); $hPx = (int)($heightMm / 25.4 * $dpi); $image = imagecreatetruecolor($wPx, $hPx); $white = imagecolorallocate($image, 255, 255, 255); $black = imagecolorallocate($image, 0, 0, 0); imagefill($image, 0, 0, $white); // Product name (use TTF font) $fontPath = $_SERVER['DOCUMENT_ROOT'] . '/local/fonts/DejaVuSans.ttf'; imagettftext($image, 14, 0, 20, 60, $black, $fontPath, mb_substr($product['NAME'], 0, 35)); // Price large $price = number_format($product['PRICE'], 2, ',', ' ') . ' rub.'; imagettftext($image, 28, 0, 20, 120, $black, $fontPath, $price); // Barcode via library (picqer/php-barcode-generator) $barcodeGenerator = new \Picqer\Barcode\BarcodeGeneratorPNG(); $barcodePng = $barcodeGenerator->getBarcode($product['BARCODE'], $barcodeGenerator::TYPE_EAN_13, 2, 60); $barcodeImg = imagecreatefromstring($barcodePng); imagecopy($image, $barcodeImg, 20, 150, 0, 0, imagesx($barcodeImg), imagesy($barcodeImg)); $tmpPath = sys_get_temp_dir() . '/label_' . $product['ID'] . '_' . time() . '.png'; imagepng($image, $tmpPath); imagedestroy($image); return $tmpPath; } } Imagick gives sharper fonts and supports vector elements. We recommend using it on servers with PHP 8.1+.
Method comparison
| Method | Print speed | Setup complexity | Linux compatibility | SDK required |
|---|---|---|---|---|
| System printer (CUPS) | Medium | Low | Yes | No |
| COM object b-PAC | High | High | No | Yes |
| Brother Web API | High | Medium | Yes | No |
Integration with the administrative interface
In the Bitrix product card, we add a "Print label" button—it adds a job to the queue with printer selection from the list (bl_brother_printers). When bulk-selecting products in a list, a group action "Print labels" is available.
A "Print labels for shipment" button is added to the order admin card: it generates an address label (name, address, order number) and picking labels. All templates are easily customizable to your company's design—we provide SVG sources.
Scope of work
- Label renderer with barcode, price, name support (GD/Imagick) — 2 days
- Print queue + agent with error handling and retries — 1 day
- System printer integration (CUPS/Windows) — 1 day
- Print buttons in product and order cards — 2 days
- Testing with a real Brother printer — 1 day
- Installation and setup documentation — included
- 2 weeks of post-launch support — free of charge
Timeline
| Stage | Duration |
|---|---|
| Label renderer (GD/Imagick + TTF) | 2 days |
| Print queue + agent | 1 day |
| CUPS / system printer integration | 1 day |
| Buttons in product and order cards | 2 days |
| Testing with real Brother printer | 1 day |
| Total | 7–9 days |
We will evaluate your project for free—just describe the task. We will perform a turnkey integration in 7–9 business days with a guarantee of stable operation.







