Posted by: Alberto on: Noviembre 24, 2007
Después de leer el comentario de Luis me puse a probar unas cosas que tenía ganas de agregarle a la clase y el resultado fue este pequeño post, que espero sirva de algo, aunque sea de referencia xD.
El ejemplo básico de fpdf es el siguiente:
<?php
require(’fpdf.php’);$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont(’Arial’,'B’,16);
$pdf->Cell(40,10,’¡Hola, Mundo!’);
$pdf->Output();
?>
Si deseamos cambiar la orientación del papel, tamaño o unidad de medida solo tenemos que indicarlo en los parametros que se pasan al constructor.
FPDF([string orientation [, string unit [, mixed format]]])
Por defecto el constructor tiene los siguientes valores:
FPDF($orientation=’P',$unit=’mm’,$format=’A4′)
Si queremos generar un pdf en forma horizontal con una hoja tamaño legal y con dimensiones en centímetros tendríamos que pasar los siguientes parámetros:
$pdf=new FPDF(’L',’cm’,'Legal’);
Orientación:
* P o Portrait (normal) por defecto
* L o Landscape (apaisado)
Unidad
* pt: punto
* mm: milimetro por defecto
* cm: centimetro
* in: pulgada
Un punto es igual a 1/72 de pulgada, es decir cerca de 0.35 mm (siendo una pulgada 2.54 cm). Esta es una unidad muy común en tipografía; los tamaños de fuentes son expresados en esa unidad.
Formato (texto sensible a minúscula/mayúscula)
* A3
* A4
* A5
* Letter
* Legal
Un formato personalizado en la forma de un array de dos elementos conteniedo el ancho y el alto (expresado en la unidad dada por unit).
La clase tiene por defecto una serie de opciones, pero eso no es una limitante para ampliarlas =) Por ejemplo si quisieramos manejar un tamaño no contemplado en la clase tendremos que agregar la descripción y luego comparar el valor recibido.
La sección es Formato de Página:
//Page format
if(is_string($format))
{
$format=strtolower($format);
if($format==’letter’)
$format=array(612,792);
elseif($format==’a4′)
$format=array(595.28,841.89);
…
elseif($format==’mcarta‘) //media carta
$format=array(311,396);
…
$this->fwPt=$format[0];//ancho del formato de página en puntos
$this->fhPt=$format[1];//alto del formato de página en puntos
}
Con eso debería bastar para tener otra formato de página, en el caso que se desee pasar un tamaño personalizado, el constructor tendría que alterarse un poco más.
Recibiendo los valores de ancho, alto de la página y válidando el formato con la cadena recibida como en el caso de arriba, asignado al Array los valores de ancho y alto.
FPDF($orientation=’P',$unit=’mm’,$format=’A4′, $wcustom=0, $hcustom=0)
elseif($format==’custom’) //Personalizado
$format=array($wcustom,$hcustom);
y lo demás es historia je, je.. Por lo tanto el código al inicio del post solo cambiara en una línea: $pdf=new FPDF(’P',’cm’,'mcarta’);
Fuente: fpdf.org, tutorial constructor.
P.D. Obtención de medidas
Pulgada – 2.54 cm
Punto – 1/72 pulgada
Punto – 0.35 mm – 0.03527 7777 (valor tomado en los calculos)
Por defecto es mm
Ejemplo Tamaño Carta medidas w 21.59| h 27.94.
612 x 72 = 44064
792 x 72 = 57024
21.59 / 612 = 0.03527 7777
27.94 / 792 = 0.03527 7777
21.59 / 0.03527 7777 = 612.0000135
27.94 / 0.03527 7777 = 792.0000175
Tomando el valor en mm las medidas aumentan un poco, queda a criterio de cada uno
21.59 / 0.035 = 616.86
27.94 / 0.035 = 798.29
Media Carta
10.79 / 0.03527 7777 = 311 – 310.9606368
13.97 / 0.03527 7777 = 396
Hola, me sirvio de mucho tu manual, se agradece mucho, solo tengo un problema al querer imprimir un reporte, y es que no logro cambiar el tamaño de los textos que estan dentro de una tabla, fuera de la tabla puedo hacerlo, pero dentro no se que pasa.
Saludos desde chile, y haber si me puedes hechar una manito con eso.
Chauuz
Amigos esto es demasiado básico, mi urgencia es referente a generar el PDF desde una consulta de MYSQL en PHP, con su respectivo encabezado, pie de pág y contador de pág (1 de 90) por ejemplo; en cada pág. actualmente logre algo pero solo me coloca el encabezado en la 1ra. pág y el pie en la última y no hayo la manera de colocarle el contador de pág. Ayuda por favor
la respuesta a la media carta es dejar la parte horizontal intacta , es decir que quede en 612 y solo dejar a la mitad la parte verticar en el caso de portrait y claro esta, hacerlo de manera inversa en Landscape
Buen post, muy útil. Gracias.
Gracias por los comentarios Víctor y Alfabravo, entiendo lo que comentas Víctor.
Sin embargo fue solo un ejemplo, escogí media carta porque fue el más rápido de postear =P
Pero con las medidas puedes hacer cualquier tamaño para la salida =)
Saludos.
Hola Alberto, estoy trabajando con fpdf, hice varios reportes sin problema, ahora necesito imprimir recibos (papel continuo), la pagina personalizo con array() de acuerdo al ancho y alto de mi recibo, al generar el pdf no hay ningún problema pero al darle imprimir la impresora me toma otra medida que no tiene nada que ver con las medidas que definí(impresora de impacto epson FX-2160) y cualquier otra impresora, lo curioso que en la notebook donde programo me toma bien las medidas pero en cualquier otra pc nada que ver, no habría alguna manera o algun codigo que tenga que agregar el pdf para que me tome las medidas correctas??, se lo agredecería mucho si me respondieras……
Veamos, las pruebas las haz realizado desde el notebook con la impresora mencionada.
O las pruebas se realizaron con otra impresora pero con el papel del tamaño deseado.
No debería tener problemas el script ya que envía la salida (pdf) en el tamaño indicado. Sin embargo si la impresora esta mal configurada en el tamaño de papel simplemente la impresión saldrá desajustada.
Espero te sirva de algo el comentario, saludos
P.D Ojalá puedas volver a comentar para saber que paso.
Alberto, te explico con array(200,202) defino exactamente el tamaño de cada recibo, en la notebook cuando le doy en la propiedad de la impresora que me tome el tamaño definido por el pdf me da lo siguiente 201.70 x 209.97 que sería ancho alto, en cualquier otra maquina cuando hago lo mismo me da 215,9 x 279,4, todo en mm, con el mismo tipo de impresora con la diferencia q en la notebook tengo SO Win UE y las otras Win XP normal digamos, el PDF genera con el tamaño deseado pero al darle imprimir es el problema, ya no se donde tocar y veo que tendré que optar x un lenguaje cliente para hacer esta parte por que no puedo hallar la solución, en otros foros veo que suguieren generar pdf para este tipo de acción pero a mi no me funciona, gracias por responder, si de repente se te ocurre alguna solución te lo agredeceré mucho..
para imprimir un solo recibo funcio chevere, imprimo en donde necesito los datos, pero cuando debo imprimir mas de uno se presenta el problema ya que la altura que me da la impresora no coincide con la altura de mi recibo..
Alberto, gracias amigo por responder, ahora me fijare su mensaje a ver si encuentro la solución y luego la comento, un abrazo
buenas, alberto y los demas integrantes del foro, ya resolví mi problema, como soy tan novato en impresión de recibos y facturas no sabía que tenía que crear un nuevo formulario en la propiedad del servidor de la impresora con las medidas deseadas para que al imprimir pueda tomar el tamaño de papel definido, si a alguien le pasa lo mismo ya saben que deben accede en Impresoras y faxes—>Archivo—>Propiedad del servidor, y ahí cran un nuevo formulario con el tamaño deseado, espero le sirva a laguien yo lo que he ignorado… suerte a todos…
Mmm.. no entendí bien eso del formulario.
Lo que entiendo (aunque tal vez lo este malinterpretando) es que en la impresora se debe configurar el tamaño de papel como personalizado y guardarlo.
De todas formas voy a revisar lo que comentas porque tampoco lo sabía =P
Saludos y muchas gracias.
P.D. Ojalá sigas visitando el blog y comentando.
saludos libres, ante todo gracias por cualquier tipo de ayuda, nesecitaba un programa que imprimiera cheques y que fuera SL pero no lo consegui me dispuse a hacerlo y todo bien el caso es que los cheques deben ser impresos en las hp injeck y por tanto deben salir en foprma vertical no se en realida como aqui les pando el codigo que tengo de salida con fpdf:
AddPage();
$pdf->Image(’imagen/chh.jpg’,20,8,178,80,”,”);
$pdf->SetFont(’Arial’,'B’,10);
$pdf->ln(1);
$pdf->Cell(105);
$pdf->Cell(100,10,$monto,0,2,’C');
$pdf->SetFont(’Arial’,'B’,8);
$pdf->ln(1);
$pdf->Cell(90);
$pdf->Cell(40,10,”Caduca a los 120 Dias”,0);
$pdf->SetFont(’Arial’,'B’,10);
$pdf->ln(8);
$pdf->Cell(30);
$pdf->Cell(35,10,$beneficiario,0,2,’C');
$pdf->ln(4);
$pdf->Cell(30);
$pdf->Cell(60,-5,$cantidad,0,2,’C');
$pdf->ln(3);
$pdf->Cell(30);
$pdf->Cell(20,25,$fecha,0,2,’C');
$pdf->Cell(125,-25,$ano,0,0,’C');
$pdf->Cell(125,-25,$ano,0,0,’C');
$pdf->ln(3);
$pdf->Cell(130);
$pdf->Cell(45,10,”NO ENDOSABLE”,0);
$pdf->Output();
?>
hermano un consejo .. un buen programador siempre comenta su script.. Para ve cual son los procesesos y poderte ayudar..
necesito ayuda
tengo todo mi codigo pero cuando lo mando a generar en pdf
o me sale a montonado o separado o no se extiende o me sale en dos hojas o m as, yo lo q quiero es q salga en una sola hoja tamaño carta y q okupe el ancho y largo de la hoja….
ayudaaaaaa
Diciembre 29, 2007 a 11:54 pm
Un saludo desde Tlaxcala, y pues aprovechando para agradecerte no sabes cuando me ayudaste en un problema que tenia. muchas gracias y sigues escribiendo. y cualquier cosa que necesites si pude cuentas con un servidor, Y gracias otra vez