La Terminal

Formato de pagina Personalizado en fpdf

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

20 comentarios para "Formato de pagina Personalizado en fpdf"

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

De nada es un gusto leer que la información es útil para otras personas.

Saludos y feliz año nuevo 2008

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

Que tal mediasur, antes que nada serviría de mucho que comentarás que script estas utilizando si el más básico que corresponde al Tutorial No5.

O algún otro de los que existen en la página. Según el script son los cambios que tendrás que hacer. De hecho revisando el tutorial 5 te darás cuenta que la propiedad de posición del texto se determina en el momento en que se crea la tabla.

En tu caso, si pretendes cambiar el tamaño del texto tendrás que hacer pruebas para comprobar que no hay problemas.

Saludos.

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

Mmm.. pues si es “demasiado básico” porque no sigues haciendo pruebas ¬_¬U

La información se encuentra en el manual. Para ser más exactos en la siguiente dirección:
http://www.fpdf.org/es/tutorial/tuto2.htm

Después de leerlo y modificar el ejemplo (nada más la ruta de la clase) obtengo lo siguiente:
http://laterminal.files.wordpress.com/2008/05/epc.pdf

Vamos que intentarlo no ha tomado a nadie :P
Si después de intentarlo no te sale deja un post con tú código para ver que tienes mal. O si tengo tiempo te mando el código del ejemplo.

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..

El visitante Wynec en este mensaje explica una forma de solucionar el problema.

De todas formas te envió un correo con su email, ojalá te pueda responder y solucionar tu problema. De ser así espero tu respuesta en el blog para compartirla con los visitantes.

Saludos.

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

Escribe un comentario

 

Noviembre 2007
L M X J V S D
« Oct   Dic »
 1234
567891011
12131415161718
19202122232425
2627282930  

a

Blog Stats

  • 543,845 hits

FeedBurner

Flickr Photos

Torre Pemex

Miercoles Jarocho2

Miercoles Jarocho

Los músicos

Jaraneros y Arpa

More Photos