Corto
Lo que quiero hacer es preparar resultados generados por PHP para imprimir con reglas estrictas.Trabajar con PDF en PHP
Intenté todas las formas posibles con css + html: establecer las dimensiones en px, mm, cm. Nada ayudó. Cada navegador, incluso cada impresora imprimió resultados de papel absolutamente diferentes (probó ambos con & sin impresión de borde. Tampoco obtuvo el resultado). Después de una larga investigación, descubrió que CSS no es la mejor manera para este fin y mejor manera: utilizar la funcionalidad de creación de PDF con PHP. Entonces, instaló TCPDF. Pero no puedo hacer que funcione con la parte lógica que creé para HTML.
Lo que yo quiero conseguir margen de la parte superior e inferior caras del papel deben ser 11 mm
- del Cuadro primera y última fila 0 mm
- Tabla de las filas deben estar en 4 mm de izquierda y derecha lados del papel
- 2 mm entre cada altura ancho x 21,2 mm de columna
- 38 mm cada célula
- 13 x filas, 5 x columnas, 13x5 = 65 células
- Cada tabla en página nueva. En otras palabras - después de cada página de la tabla ruptura
- En cada celda 39 Código de barras (valor debe ser
$id
) - Sólo las tablas en consecuencia PDF - sin cabecera, sin pie de página, sin título, etc ...
Aquí es una explicación más detallada en la imagen:
Lo que estoy recibiendo
Después del envío del formulario, el procesamiento en el lado php lleva demasiado tiempo, aproximadamente un minuto, y abre una página en blanco en lugar de un resultado en PDF.
Código:
(Código no es tan grande, los comentarios están haciendo que parezca tan :)
<?php
require_once('tcpdf/config/lang/eng.php');
require_once('tcpdf/tcpdf.php');
// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetPrintHeader(false);
$pdf->SetPrintFooter(false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('John Smith');
$pdf->SetTitle(false);
$pdf->SetSubject(false);
$pdf->SetKeywords(false);
// set default header data.set all false because don't want to output header footer
$pdf->SetHeaderData(false, false, false, false);
// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
//set margins
$pdf->SetMargins(4, 11, 4);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
//set some language-dependent strings
$pdf->setLanguageArray($l);
// ---------------------------------------------------------
// set font
$pdf->SetFont('helvetica', '', 10);
// add a page
$pdf->AddPage();
// define barcode style
$style = array(
'position' => '',
'align' => 'C',
'stretch' => false,
'fitwidth' => true,
'cellfitalign' => '',
'border' => true,
'hpadding' => 'auto',
'vpadding' => 'auto',
'fgcolor' => array(0, 0, 0),
'bgcolor' => false, //array(255,255,255),
'text' => true,
'font' => 'helvetica',
'fontsize' => 8,
'stretchtext' => 4
);
ob_start();
?>
<style type="text/css">
table {
width: 100%;
border-collapse: collapse;
}
td img {
height:10mm;
}
td {
padding: 0 1mm 0 1mm;
vertical-align:middle;
}
.cell {
width: 38mm;
height:21mm;
font-style: bold;
text-align: center;
}
tr {
height:21mm;
margin:0;
padding:0;
}
</style>
<?php
$i = 0;
$item = new item($db);
foreach ($_POST['checkbox'] as $id) {
$details = $item->getDetails($id);
$qt = (isset($_POST['qt'])) ? $_POST['qt'] : $details['qt'];
for ($cnt = 1; $cnt <= $qt; $cnt++) {
// check if it's the beginning of a new table
if ($i % 65 == 0)
echo '<table>';
// check if it's the beginning of a new row
if ($i % 5 == 0)
echo '<tr>';
echo '<td><div class="cell">www.fety.fr<br/>';
$pdf->Cell(0, 0, 'CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9', 0, 1);
$pdf->write1DBarcode($id, 'C39', '', '', '', 18, 0.4, $style, 'N');
$pdf->Ln();
echo '<br/>' . $details['hcode'] . '</div></td>';
// check if it's the end of a row
if (($i + 1) % 5 == 0)
echo '</tr>';
// check if it's the end of a table
if (($i + 1) % 65 == 0)
echo '</tr></table>';
$i++;
}
}
// if the last table isn't full, print the remaining cells
if ($i % 65 != 0) {
for ($j = $i % 65; $j < 65; $j++) {
if ($j % 65 == 0)
echo '<table>';
if ($j % 5 == 0)
echo '<tr>';
echo '<td></td>';
if (($j + 1) % 5 == 0)
echo '</tr>';
if (($j + 1) % 65 == 0)
echo '</table>';
}
}
$markup = ob_get_clean();
// output the HTML content
$pdf->writeHTML($markup, true, false, true, false, '');
// reset pointer to the last page
$pdf->lastPage();
// ---------------------------------------------------------
//Close and output PDF document
$pdf->Output('bcsheet.pdf', 'I');
?>
script funciona así:
- El usuario selecciona las casillas de verificación artículos
- Después del envío del formulario, PHP obtiene los valores de las casillas marcadas a través de Ajax
- En f oreach loop, PHP obtiene cantidades de cada elemento de la base de datos.
- tabla generada
listo para dar el 100 representante para resolver este problema – heron
¿Ha considerado el uso de crudos PostScript? Es una tarea desafiante, pero tendría un control total sobre su lienzo de representación. También puede encontrar bibliotecas/tutoriales para renderizar códigos de barras. – Tibo
@Tibo Necesito dar como resultado el resultado como PDF o como HTML. HTML da diferentes resultados. Así que tengo 1 y único camino - PDF. Entonces, necesito hacer que funcione – heron