1. ¿Cuál es exactamente el tipo de licencia de FPDF? ¿Existen restricciones de uso?
FPDF es freeware (tal y como se afirma al principio del fichero fuente). No hay limitaciones de uso. Puede usarlo libre y gratuitamente en su aplicación (comercial o no), con o sin modificaciones.2. Cuando intento crear un PDF, aparecen un montón de caracteres raros. ¿Por qué?
Esos caracteres "raros" constituyen de hecho el contenido del PDF. Este comportamiento es un fallo de Internet Explorer (IE). Cuando recibe una página en HTML y después un PDF de la misma URL, lo muestra directamente sin lanzar Acrobat. Esto ocurre con frecuencia durante la fase de desarrollo: al menor fallo en el script, se envía una página HTML y, después de corregirlo, se envía el PDF.3. Intento generar un PDF y IE muestra una página en blanco. ¿Qué pasa?
Antes de nada, compruebe que no envía nada al navegador después del PDF (ni siquiera un espacio o un salto de línea). Puede incluir una instrucción exist justo después de llamar al método Output() para asegurarse.<INPUT TYPE="HIDDEN" NAME="ext" VALUE=".pdf"> |
//Determinar un nombre temporal de fichero en el directorio actual $file=basename(tempnam(getcwd(),'tmp')); //Guardar el PDF en el fichero $pdf->Output($file); //Redirección por JavaScript echo "<HTML><SCRIPT>document.location='getpdf.php?f=$file';</SCRIPT></HTML>"; |
<?php $f=$HTTP_GET_VARS['f']; //Comprobar el fichero (¡no lo pase por alto!) if(substr($f,0,3)!='tmp' or strpos($f,'/') or strpos($f,'\\')) die('Nombre incorrecto de fichero'); if(!file_exists($f)) die('El fichero no existe'); //Gestionar peticiones especiales de IE si es necesario if($HTTP_ENV_VARS['USER_AGENT']=='contype') { Header('Content-Type: application/pdf'); exit; } //Devolver el PDF Header('Content-Type: application/pdf'); Header('Content-Length: '.filesize($f)); readfile($f); //Eliminar el fichero unlink($f); exit; ?> |
//Determinar un nombre temporal de fichero en el directorio actual $file=basename(tempnam(getcwd(),'tmp')); rename($file,$file.'.pdf'); $file.='.pdf'; //Guardar el PDF en un fichero $pdf->Output($file); //Redirección con JavaScript echo "<HTML><SCRIPT>document.location='$file';</SCRIPT></HTML>"; |
function CleanFiles($dir) { //Borrar los ficheros temporales $t=time(); $h=opendir($dir); while($file=readdir($h)) { if(substr($file,0,3)=='tmp' and substr($file,-4)=='.pdf') { $path=$dir.'/'.$file; if($t-filemtime($path)>3600) @unlink($path); } } closedir($h); } |
4. Mando parámetros mediante el método POST y los valores no aparecen en el PDF.
Es un problema que afecta a algunas versiones de IE (especialmente a los primeros 5.5). Véase la pregunta anterior para algunas soluciones.5. Cuando uso una sesión PHP, IE no me muestra el PDF, pero me pregunta si deseo descargarlo.
Se trata de un problema con algunas versiones de IE. Para solucionarlo, añada la siguiente línea antes de session_start();session_cache_limiter('private'); |
6. Cuando estoy en SSL, IE no puede abrir el PDF.
El problema puede solucionarse añadiendo esta línea:Header('Pragma: public'); |
7. Cuando ejecuto un script me da un error "FPDF error: Don't alter the locale before including class file".
Cuando el separador de decimales se configura para que se una coma antes de incluir un fichero, existe un fallo en PHP, y los números decimales se truncan. Por tanto, no debería hacer ninguna llamada a setlocale() antes de incluir la clase. En Unix, no debería tampoco establecer la variable de entorno LC_ALL, ya que es equivalente a una llamada a setlocale().8. Intento insertar un PNG y Acrobat dice "There was an error processing a page. A drawing error occurred".
Acrobat 5 tiene un fallo y no puede mostrar imágenes monocromas transparentes (1 bit por píxel). Elimine la transparencia o guarde su imagen en 16 colores (4 bits por píxel) o más.9. Encuentro el siguiente error cuando intento generar un PDF: Warning: Cannot add header information - headers already sent by (output started at script.php:X)
No puede enviar nada al navegador excepto el PDF mismo: ni HTML, ni espacios, ni saltos de línea, ni antes ni después. El script está enviando algo en la línea X.10. Intento mostrar una variable en el método Header pero no se imprime nada.
Debe usar la directiva global, por ejemplo:
function Header() { global $title; $this->SetFont('Arial','B',15); $this->Cell(0,10,$title,1,1,'C'); } |
11. He definido los métodos Header y Footer en mi clase PDF, pero no se muestra nada.
Tiene que crear un objeto de la clase PDF, no de la FPDF:$pdf=new PDF(); |
12. No consigo que los saltos de línea funcionen. Pongo \n en la cadena para MultiCell, pero no funciona.
Debe usted utilizar comillas dobles ("), no simples ('), para la cadena.13. Intento incluir el símbolo del euro, pero no funciona.
Las fuentes estándares tiene el carácter euro en la posición 128. Puede definir una constante como esta para su comodidad:define('EURO',chr(128)); |
14. Dibujo un marco con dimensiones muy precisas pero, cuando lo imprimo, noto algunas diferencias.
Para que se respeten las dimensiones, debe desmarcan la casilla "Ajustar a página" en la ventana de impresión de Acrobat.15. Me gustaría usar toda la superficie de la página, pero cuando imprimo siempre aparecen márgenes. ¿Cómo puedo deshacerme de ellos?
Todas las impresoras tienen márgenes físicos (dependiendo del modelo). Por tanto, es imposible quitarlos e imprimir en la totalidad del papel.16. ¿Cuál es el límite de tamaño de los ficheros que puedo generar con FPDF?
No hay ningún límte en particular. Sin embargo, hay ciertas limitaciones:17. ¿Puedo modificar un PDF con FPDF?
No.18. Me gustaría hacer un motor de búsqueda en PHP e indexar ficheros PDF. ¿Puedo hacerlo con FPDF?
No. Pero existe una utilidad GPL escrita en C, pdftotext, que es capaz de extraer el texto de un PDF. Viene con el paquete Xpdf:19. ¿Puedo convertir una página HTML en PDF con FPDF?
No. Pero existe una utilidad GPL escrita en C. htmldoc, que le permite hacerlo y da buen resultado:20. ¿Puedo concatenar ficheros PDF con FPDF?
No. Pero existe un programa gratuito escrito en C para hacerlo: