1º Instalamos ZEND o lo colocamos en un directorio determindo:
En el ejemplo se situa en el subdiretorio zend dentro del directorio de trabajo de php:
require_once 'Zend/Pdf.php';
$pdf = Zend_Pdf::load($Archivo_a_modificar);
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA_BOLD);
$page->setFont($font,14);
$page->drawText($y_expediente, 450, 733);
$page2 = $pdf->pages[2];
$image = Zend_Pdf_Image::imageWithPath("/xxxx.png");
$font2 = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page2->setFont($font2,14);
$page2->drawText($variableString, 262, 734);
$page2->drawImage($image, $xx,$yy,$ancho,$alto);
… etc …
// $pdf->save("/destino.pdf");
$pdfData = $pdf->render();
header("Content-Disposition: inline; filename=result.pdf");
header("Content-type: application/x-pdf");
echo $pdfData;
LOS PROBLEMAS DE ZEND AL ABRIR ALGUNOS ARCHIVOS PDF
<?php
...
$pdf1 = new Zend_Pdf();
$pdf2 = Zend_Pdf::load($archivo_pdf);
...
?>
LOS PROBLEMAS DE ZEND AL ABRIR ALGUNOS ARCHIVOS PDF
A veces, el framework de Zend tiene algún problema al abrir un archivo pdf. En nuestro programa de php:
<?php
...
$pdf1 = new Zend_Pdf();
$pdf2 = Zend_Pdf::load($archivo_pdf);
...
?>
No voy a preguntarme el motivo por lo que esto ocurre pero el caso es que es así. Por otra parte, si volvemos a imprimir el pdf en cualquier editor de pdf de nuevo en pdf (perdón por las redundancias) sí admite sin problemas el nuevo archivo. La idea que se ocurre es reimprimir el fichero pdf que da problemas en pdf y así eliminar el problema con el pdf original.
¿Cómo lo hacemos?
Como todo va a ser en línea de comandos lo mejor es disponer de una impresora y una impresión accesible en línea de comandos.
1º Impresora: ¿tenemos alguna impresora que emita pdfs?
ejecutamos:
lpstat -p -d
y el resultado es algo así:
la impresora XXXXX está inactiva. activada desde jue 20 oct 2011 12:01:46 CEST
destino predeterminado del sistema: XXXXX
En ese caso no tenemos algo reconocible en pdf.
2º Instalamos la impresora en pdf
sudo apt-get -y install cups-pdf
Después:
lpstat -p -d
la impresora XXXXX está inactiva. activada desde lun 04 mar 2013 12:46:05 CET
la impresora Generic-CUPS-PDF-Printer está inactiva. activada desde lun 04 mar 2013 12:42:31 CET
destino predeterminado del sistema: Generic-CUPS-PDF-Printer
3º Tenemos que controlar donde imprimirá el nuevo pdf:
sudo gedit /etc/cups/cups-pdf.conf
el alguna línea estará:
Out ${HOME}/PDF
se cambia por
#Out ${HOME}/PDF
Out $/directorio/salida/PDF
La razón es porque muchas veces no se tiene controlado cual el el directorio {home} para www-data (usuario de apache).
4º Modificamos nuestro programa
<?php
...
$pdf1 = new Zend_Pdf();
exec("lp -d Generic-CUPS-PDF-Printer $archivo_pdf");
$nuevo_pdf="/directorio/salida/PDF".basename($archivo_pdf);
sleep(10);
$pdf2 = Zend_Pdf::load($nuevo_pdf);
...
unlink($nuevo);
?>
Expliquemos la modificación del programa:
Tomamos el archivo que da problemas ($archivo_pdf). Lo imprimimos (comando lp) en la impresora CUPS-PDF. Le hacemos esperar 10 segundos (sleep) al programa para darle tiempo a crearlo y guardarlo en /directorio/salida/PDF/ con el mismo nombre (sin las coletillas de directorios). Abre el nuevo archivo ($nuevo_pdf) que no dará problemas y al final borramos el archivo que nos sirvió de puente(unlink).
para más seguridad se puede poner (en vez de sleep(10)):
do{sleep(1);}while (not is_file($nuevo));
No hay comentarios:
Publicar un comentario