Vou mostrar-te como criar uma página Web para enviar um ficheiro PDF do meu computador para uma impressora utilizando o serviço de impressão remota Expedy Print.
Neste exemplo, estou a utilizar uma impressora de etiquetas para imprimir etiquetas de transporte autocolantes no formato padrão 4×6 (10x15cm). Por exemplo, estou a criar etiquetas para um site de venda a retalho que pretendo enviar para uma impressora localizada noutra sala do meu armazém ou para um parceiro de dropship no outro extremo do planeta.
Ao mesmo tempo, podes introduzir texto num campo para gerar um ficheiro PDF. As duas funções podem ser utilizadas independentemente ou ao mesmo tempo.
Código fonte completo: https: //github.com/ExpedyDev/pdftoprinter
Requisitos de hardware
- Impressora de etiquetas, neste exemplo estou a usar uma Netum(NT-LP110F), mas podes usar outros modelos térmicos 4×6 como Zebra, Brother, BeePRT ou outro formato (A3, A4, postal fotográfico, etc.) dependendo das tuas necessidades.
- Expedy Cloud Print Adapter
- Ligação clássica à Internet
Requisitos da Web
Pré-visualização do resultado da página

1. Criar o formulário
Cria um formulário para introdução de texto e/ou carregamento de ficheiros.
Utiliza o primeiro campo para gerar um PDF a partir da introdução de texto e o botão de pesquisa para carregar um ou mais ficheiros PDF.
<!DOCTYPE html>
<html>
<head>
<title>Créer un PDF et imprimer</title>
</head>
<body>
<h1>Créer un PDF et imprimer</h1>
<form method="post" action="" enctype="multipart/form-data">
<label for="text">Saisissez le texte à imprimer en PDF :</label><br>
<input type="text" id="text" name="text"><br><br>
<label for="files">Envoyer des fichiers PDF :</label><br>
<input type="file" id="files" name="files[]" multiple><br><br>
<button type="submit" name="submit">Imprimer</button>
</form>
</body>
</html>2. Criação de PHP
Aqui está o código PHP completo:
<?php
// Si le formulaire est soumis
if (isset($_POST['submit'])) {
// Vérifier si le champ texte est rempli
if (!empty($_POST['text']) || !empty($_FILES['files']['tmp_name'][0])) {
// Récupérer le texte saisi par l'utilisateur
$text = $_POST['text'];
// Générer le nom du fichier PDF avec la date actuelle
$pdfName = "pdf_" . date('Ymd_His') . ".pdf";
// Inclure la bibliothèque FPDF et FPDI
require('fpdf/fpdf.php');
require('fpdi/src/autoload.php');
// Créer un objet FPDI (PDF étendu) avec FPDF
$pdf = new \setasign\Fpdi\Fpdi('P', 'mm', array(105, 148));
// Gérer les fichiers PDF téléversés
if (!empty($_FILES['files']['tmp_name'][0])) {
foreach ($_FILES['files']['tmp_name'] as $file) {
if (!empty($file) && file_exists($file)) {
// Ajouter les pages du fichier PDF au PDF en cours
$pageCount = $pdf->setSourceFile($file);
for ($pageNumber = 1; $pageNumber <= $pageCount; $pageNumber++) {
$tplIdx = $pdf->importPage($pageNumber);
$pdf->AddPage();
$pdf->useTemplate($tplIdx);
}
}
}
}
// Ajouter une page au PDF si le champ texte est rempli
if (!empty($text)) {
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40, 10, $text);
}
// Générer le fichier PDF
$pdf->Output('F', $pdfName);
// Envoyer la requête à l'API Expedy pour imprimer le PDF
$file_url = 'https://' . $_SERVER['HTTP_HOST'] . '/' . $pdfName;
sendToExpedyPrinter($file_url);
echo "<p>Vos fichiers ont été envoyés à l'imprimante !</p>";
} else {
echo "<p>Aucun texte ou fichier PDF spécifié.</p>";
}
}
function sendToExpedyPrinter($file_url) {
// Printer UID API Expedy.com
$printer_uid = 'SAISIR UID PRINTER';
// Message à imprimer
$data = array(
'usb_msg' => $file_url,
'origin' => 'Your defined origin tag.. a uri, a name ..'
);
// Infos API
$options = array(
CURLOPT_URL => "https://www.expedy.fr/api/v2/devices/" . $printer_uid . "/usb/4/print",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_HTTPHEADER => array(
"Accept: application/json",
// Vos identifiants API sid:token
"Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"Content-Type: application/json"
),
);
$curl = curl_init();
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
}
?>Não vou entrar em detalhes sobre cada ponto, pois os comentários falam por si, mas aqui estão alguns detalhes:
As bibliotecas FPDF e FPDI são essenciais para a criação de PDF e para a fusão de diferentes ficheiros PDF num único ficheiro PDF.
Esta fusão de PDFs é importante porque será mais rápido e mais eficiente para a impressora ter um único ficheiro PDF contendo várias páginas para processar, do que enviar um único ficheiro PDF, um a um, para a API.
Texto gerado em PDF
Se o campo de texto for introduzido (opcional), será adicionada uma primeira página ao PDF gerado. A tipografia do texto impresso pode ser definida aqui.
$pdf->SetFont('Arial','B',16);Dimensões PDF
Neste exemplo, preciso de imprimir algumas etiquetas de transporte, pelo que especificamos valores em mm para criar um documento de formato 4×6 (10x15cm). Mas podes personalizar os valores de altura e largura para imprimir em qualquer tipo de formato.
$pdf = new \setasign\Fpdi\Fpdi('P', 'mm', array(105, 148));Impressora UID
Recupera o identificador único da impressora da conta Expedy na consola, na secção Impressoras. Não incluas o #. Por exemplo, GSEPOHGEIO.
function sendToExpedyPrinter($file_url) {
// Printer UID API Expedy.com
$printer_uid = 'SAISIR UID PRINTER';Chave API
Recupera as chaves API na conta Expedy a partir da consola no menu da esquerda na secção Chaves Api.
Introduz as chaves por esta ordem: sid:token
"Authorization: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",Definições da porta USB
Neste exemplo, é utilizada a porta USB número 4.
Para saber qual é a porta USB, na consola do Expedy, vai a Machines (Máquinas) e depois faz um USB SCAN (Análise de USB), obtendo um resultado como este:

CURLOPT_URL => "https://www.expedy.fr/api/v2/devices/" . $printer_uid . "/usb/4/print",Testa uma impressão
Se a instalação tiver sido feita corretamente, deves ter um PDF criado na tua pasta principal e um pedido de devolução, como se mostra abaixo.
Tem em atenção que os ficheiros PDF não são eliminados, pelo que podem ocupar muito espaço em disco no teu alojamento.

Français (Francês)
Español (Espanhol)
Deutsch (Alemão)
Italiano
Português