1.¿Cuál es exactamente el tipo de licencia de FPDF? ¿Existen restricciones de uso?
FPDF es liberado bajo una licencia permisiva: no hay restricción de uso. Usted puede integrarlo
libremente 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 IE6. 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.
Para resolver el problema, simplemente reinicie IE. También puede irse a otra URL y volver.
Para evitar estas molestias durante el desarrollo, puede generar el PDF directamente a un fichero
y abrirlo mediante el navegador.
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. Si esto no funciona, significa que es usted víctima del "síndrome de
la página en blanco". IE usado con la extensión de Acrobat tiene numerosos fallos.
Para evitar todos estos problemas de manera fiable, existen dos técnicas fundamentalmente:
- Deshabilite la extensión y use Acrobat como una aplicación auxiliar. Para esto, abra Acrobat;
en el menú Archivo, Preferencias, General, desmarque la casilla "Integración con el navegador" (para
Acrobat 5: Edición, Preferencias, Opciones, "Mostrar PDF en el navegador"). La próxima vez que
cargue un PDF en IE, se le mostrará un mensaje "Abrir" o "Guardar en disco". Desmarque la casilla
"Preguntar siempre antes de abrir este tipo de archivo" y escoja Abrir. A partir de ahora, los
ficheros PDF se abrirán automáticamente en una ventana externa de Acrobat.
El inconveniente de este método es que necesita alterar la configuración del cliente, que es algo
viable en una intranet, pero imposible para Internet.
- Use una técnica de redirección. Consiste en generar el PDF en un fichero temporal en el servidor
y redireccionar al cliente al fichero. Por ejemplo, al final del script, puede añadir lo siguiente:
//Determinar un nombre temporal de fichero en el directorio actual
$file = basename(tempnam('.', 'tmp'));
rename($file, $file.'.pdf');
$file .= '.pdf';
//Guardar el PDF en un fichero
$pdf->Output($file, 'F');
//Redirección
header('Location: '.$file);
Este método convierte el PDF dinámico en estático y evita todos los problemas. Pero
debe hacer limpieza de los ficheros temporales. Por ejemplo:
Esta función borra todos los ficheros de la forma tmp*.pdf más antiguos de una hora en el
directorio especificado. Puede ser llamada donde usted quiera como, por ejemplo, en el script
que genera el PDF.
4.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.
5.Intento mostrar una variable en el método Header pero no se imprime nada.
Tienes que utilizar la palabra clave global para acceder a las variables globales, por ejemplo:
function Header()
{
global $title;
$this->SetFont('Arial', 'B', 15);
$this->Cell(0, 10, $title, 1, 1, 'C');
}
$title = 'Mi Título';
Alternativamente, puede utilizar una propiedad del objeto:
No utilice codificación UTF-8. La codificación estándar de fuentes en FPDF es ISO-8859-1 o windows-1252.
Es posible realizar una conversión a la norma ISO-8859-1 con utf8_decode():
$str = utf8_decode($str);
Sin embargo, algunos caracteres, tales como Euro no serán traducidos correctamente. Si la extensión iconv está disponible, la
forma correcta de hacerlo es la siguiente:
$str = iconv('UTF-8', 'windows-1252', $str);
8.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));
9.Encuentro el siguiente error cuando intento generar un PDF: Some data has already been output, can't send PDF file
Usted no debe enviar nada al navegador, excepto el propio PDF: ningún HTML, espacio o retorno de carro. Un caso común
es tener una línea o espacio en blanco extra al final del script incluido.
Si usted no puede averiguar de donde proviene el problema, este otro mensaje que aparece justo abajo puede ayudarlo:
Warning: Cannot modify header information - headers already sent by (output started at script.php:X)
Esto significa que script.php envía algo en la línea X. Vaya a esta línea y arréglelo.
En caso de que el mensaje no aparece, en primer lugar compruebe que usted no haya desactivado las advertencias, a continuación, agregue esto
al comienzo de su script:
ob_end_clean();
Si todavía no lo ve, deshabilite zlib.output_compression en su php.ini y debería aparecer.
10.Dibujo un marco con dimensiones muy precisas pero, cuando lo imprimo, noto algunas diferencias.
Respecto a las dimensiones, seleccione "Ninguno" para el ajuste de escala de página en lugar de "Reducir al área de impresión" en el cuadro de diálogo Imprimir.
11.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.
12.¿Cómo puedo poner un fondo en mi PDF?
Para una imagen, invoque Image() en el método Header(), antes que cualquier otra salida. Para configurar un color de fondo, use Rect().
13.¿Cómo puedo establecer una cabecera o pie de página en la primera página?
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:
- El máximo de memoria reservada para los scripts en PHP es, por defecto, de 8 MB. Para documentos
muy extensos, especialmente si contienen imágenes, este límite puede alcanzarse (ya que el fichero
se construye en memoria). El límite se define en el fichero php.ini.
- El tiempo máximo de ejecución es por defecto de 30 segundos. Este límite puede ser fácilmente
sobrepasado. Se define en php.ini y puede ser modificado dinámicamente mediante set_time_limit().
- Los navegadores tienen por lo general un límite de 5 minutos de inactividad. Si envía directamente
el PDF al navegador y sobrepasa el límite, se perderá el documento. Por tanto, en el caso de documentos
muy grandes, se aconseja generarlos en un fichero y enviar información al navegador de tanto en tanto (por
ejemplo, la página 1, la 2... con flush(), que fuerza la salida). Cuando el documento esté terminado,
puede redireccionar a él con JavaScript o crear un enlace.
Nota: incluso si el navegador agota su tiempo, el script puede continuar ejecutándose en el servidor.
17.¿Puedo modificar un PDF con FPDF?
Es posible importar páginas de un documento PDF existente gracias a la extensión FPDI: