Foros del Web » Programando para Internet » PHP »

crear editar archivos PDF

Estas en el tema de crear editar archivos PDF en el foro de PHP en Foros del Web. Hola a todos, he estado desarrollando un pequeño proyecto y me veo en la necesidad de imprimir/guardar un archivo que debe llevar datos obtenidos de ...
  #1 (permalink)  
Antiguo 22/09/2010, 15:41
 
Fecha de Ingreso: septiembre-2010
Mensajes: 38
Antigüedad: 14 años, 2 meses
Puntos: 0
Información crear editar archivos PDF

Hola a todos, he estado desarrollando un pequeño proyecto y me veo en la necesidad de imprimir/guardar un archivo que debe llevar datos obtenidos de una consulta (imprimir un pase de abordar, los datos del usuario y del viaje vienen de sus respectivas queries)... he leido sobre PDFLib pero aun no logro echarle a andar, uso win/xampp, y estoy en busqueda de un poco de orientacion al respecto:

Es posible insertar informacion a un PDF ya hecho? Debera este tener campos interactivos o puede ser un documento 'plano' ?

Es posible crear un PDF desde cero, incluyendo el formato deseado? (digamos, cuadros, lineas, logo, etc)

Existe alguna aplicacion u otro modulo conocido y que sea funcional para este asunto en particular?

Estoy indeciso sobre como llevar a cabo esta tarea en su totalidad....


Cualquier consejo se agradece de antemano.

Saludos.
  #2 (permalink)  
Antiguo 22/09/2010, 15:59
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: crear editar archivos PDF

Los archivos PDF, son archivos binarios y cerrados. Eso quiere decir que es bien difícil trabajar con esta clase de archivos con PHP. Lo que te recomiendo que uses alguna librería que lea el archivo, lo convierta a HTML, ahí haces la modificaciones y lo vuelves a construir con alguna librería. En internet hay mucho material de como trabajar con este tipo de librería, sería cuestión de seguir indagando.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 22/09/2010, 16:20
Avatar de Nano_  
Fecha de Ingreso: febrero-2006
Ubicación: Bogotá, Colombia
Mensajes: 1.866
Antigüedad: 18 años, 9 meses
Puntos: 96
Respuesta: crear editar archivos PDF

Saludos

Te recomiendo para la creacion de pdf la clase FPDF


Hasta Pronto!
__________________
:.:Nano.:: @nano_hard - Retornando al foro

Última edición por Nano_; 22/09/2010 a las 16:29
  #4 (permalink)  
Antiguo 22/09/2010, 17:01
 
Fecha de Ingreso: septiembre-2010
Mensajes: 38
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: crear editar archivos PDF

gracias por las prontas aportaciones, he estado considerando el script html2pdf, es recomendable?

actualmente no he podido determinar si me conviene mas crear un pdf tipo template en blanco y dejar espacio para los campos que deseo que se tomen de las consultas o si es mas conveniente crear todo el pdf de cero con alguna libreria?

igual estaba considerando hacer una escritura a un "nuevo pdf" (blank) pero que imprima lo que deseo en las coordenadas deseadas, y tener mi "boleto" impreso con anterioridad o desde otro proceso totalmente independiente al sitio, podria considerar esta una opcion viable?

de antemano se agradece cualquier observacion,

saludos.

Última edición por MXM450; 22/09/2010 a las 17:12
  #5 (permalink)  
Antiguo 22/09/2010, 17:40
 
Fecha de Ingreso: septiembre-2010
Mensajes: 8
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: crear editar archivos PDF

Como mencionaba el amigo anteriormente, FPF, es una excelente opcion, sencillo, gratis, pero eficaz, de hecho yo lo utilizo para la creación de reportes, y podrías crear el pdf cada vez que quieras imprimir un boleto, eso no tiene mayor complicacion pues para la creación del mismo utilizas siempre el mismo algoritmo y solo modificas la consulta sql y listo. Te envio un ejemplo de la creacion de un reporte en php. Solo tienes que modificarlo para tus requerimientos ya que este es una hoja tamaño carta y una bd especifica. Espero te sirva de algo

<?php

require('fpdf/fpdf.php');
require('conexion.php');
class PDF extends FPDF
{
var $widths;
var $aligns;

function SetWidths($w)
{
//Set the array of column widths
$this->widths=$w;
}

function SetAligns($a)
{
//Set the array of column alignments
$this->aligns=$a;
}

function Row($data)
{
//Calculate the height of the row
$nb=0;
for($i=0;$i<count($data);$i++)
$nb=max($nb,$this->NbLines($this->widths[$i],$data[$i]));
$h=4*$nb;
//Issue a page break first if needed
$this->CheckPageBreak($h);
//Draw the cells of the row
for($i=0;$i<count($data);$i++)
{
$w=$this->widths[$i];
$a=isset($this->aligns[$i]) ? $this->aligns[$i] : 'L';
//Save the current position
$x=$this->GetX();
$y=$this->GetY();
//Draw the border
//$this->Rect($x,$y,$w,$h);
//Print the text
$this->MultiCell($w,4,$data[$i],0,$a);
//Put the position to the right of the cell
$this->SetXY($x+$w,$y);
}
//Go to the next line
$this->Ln($h);
}

function CheckPageBreak($h)
{
//If the height h would cause an overflow, add a new page immediately
if($this->GetY()+$h>$this->PageBreakTrigger)
$this->AddPage($this->CurOrientation);
}

function NbLines($w,$txt)
{
//Computes the number of lines a MultiCell of width w will take
$cw=&$this->CurrentFont['cw'];
if($w==0)
$w=$this->w-$this->rMargin-$this->x;
$wmax=($w-2*$this->cMargin)*1000/$this->FontSize;
$s=str_replace("\r",'',$txt);
$nb=strlen($s);
if($nb>0 and $s[$nb-1]=="\n")
$nb--;
$sep=-1;
$i=0;
$j=0;
$l=0;
$nl=1;
while($i<$nb)
{
$c=$s[$i];
if($c=="\n")
{
$i++;
$sep=-1;
$j=$i;
$l=0;
$nl++;
continue;
}
if($c==' ')
$sep=$i;
$l+=$cw[$c];
if($l>$wmax)
{
if($sep==-1)
{
if($i==$j)
$i++;
}
else
$i=$sep+1;
$sep=-1;
$j=$i;
$l=0;
$nl++;
}
else
$i++;
}
return $nl;
}

function Header()
{

$this->SetFont('Arial','',25);
$this->Text(70,20,'Souvenir My Beach',0,'C', 0);
$this->SetFont('Arial','',15);
$this->Text(20,35,'CIERRE DE CAJA DETALLADO',0,'C', 0);
$this->Ln(25);
}

function Footer()
{
$this->SetY(-15);
$this->SetFont('Arial','B',8);
$this->Cell(100,10,'Creado por Roberto Guerrero / Tel.: (506)8749-3842. / [email protected]',0,0,'L');

}

}



$fecha=time()-21600;
if (isset($_POST['hoy']))
{
$fechai=date("Y-m-d",$fecha);
}
else
{
$fechai=$_POST['year']."-".$_POST['mes']."-".$_POST['dia'];
}

if (isset($_POST['quickr']))
{
if ($_POST['quickr']==2)
{
$fechai=date("Y-m-d",$fecha-86400);
}
if ($_POST['quickr']==3)
{
$fechai=date("Y-m-d",$fecha-172800);
}
if ($_POST['quickr']==4)
{
$fechai=date("Y-m-d",$fecha-259200);
}
}



//$product= $_POST['codigo'];
$con = new DB;
$products = $con->conectar();

//$strConsulta = "SELECT * from products WHERE code = '$product'";

//$products = mysql_query($strConsulta);

//$fila = mysql_fetch_array($products);

$pdf=new PDF('P','mm','Letter');
$pdf->Open();
$pdf->AddPage();
$pdf->SetMargins(15,15,15);
$pdf->Ln(10);
$pdf->SetFont('Arial','',12);
$pdf->Cell(0,6,'Fecha: '.$fechai,0,1);
$pdf->Ln(10);
$pdf->SetFont('Arial','',10);
$pdf->SetWidths(array(20, 13, 15, 60, 15, 15, 25, 20));
$pdf->SetAligns(array('C','C','C','L',0,0,0,0));
$pdf->Row(array("HORA","FAC","COD","PRODUCTO","CANT","% DSC","MONTO","TC"));
$listado = $con->conectar();
$strConsulta = "SELECT transactions.time, transactionitems.transaction_id, transactionitems.product_id, transactions.date,
products.name, transactionitems.qty, transactions.disc, transactionitems.price, transactions.paymethod, transactions.amount
FROM transactionitems
Inner Join transactions ON transactionitems.transaction_id = transactions.id
Inner Join products ON transactionitems.product_id = products.code
WHERE transactions.date = '$fechai'";
$queryventas = mysql_query($strConsulta);
$numfilas = mysql_num_rows($queryventas);
$totalcash=0;
$totalfila=0;
$totaltarjeta=0;
$pdf->Cell(0,6,'','T',1);

for ($i=0; $i<$numfilas; $i++)
{
$fila = mysql_fetch_array($queryventas);
$tarjeta="";
if($fila['paymethod']=="2"){$tarjeta="*".'$'.$fila['amount'];}
if($fila['transaction_id']==465){$fila['disc']=0;}
$totalfila=$fila['price']*$fila['qty']-
(($fila['price']*$fila['qty']/100)*$fila['disc']);
if($fila['transaction_id']==465){$totalfila=10;}
$pdf->Row(array($fila['time'],$fila['transaction_id'],$fila['product_id'],
$fila['name'],$fila['qty'],$fila['disc'],number_format($totalfila,2),$tarjeta));
if($fila['paymethod']=="2"){$totaltarjeta=$totaltarjeta+$totalfila;}
else{$totalcash=$totalcash+$totalfila;}

//number_format($totalfila,2);

}
//$pdf->Cell(0,0,"number_format($totalfila,2)",0,0,'R',fa lse);
$pdf->Cell(0,6,'',0,1);
$pdf->SetFont('Arial','',10);
$pdf->SetX(150);
$pdf->Cell(40,8,'TOTAL TC : $ '.number_format($totaltarjeta,2),0,1,'R');
$pdf->SetX(140);
$pdf->Cell(50,8,'TOTAL EFECTIVO: $ '.number_format($totalcash,2),'B',1,'R');
$pdf->SetX(130);
$pdf->SetFont('Arial','',12);
$pdf->Cell(60,10,'TOTAL VENDIDO : $ '.number_format($totalcash+$totaltarjeta,2),0,1,'R ');

$pdf->Output();
?>
  #6 (permalink)  
Antiguo 23/09/2010, 08:43
 
Fecha de Ingreso: septiembre-2010
Mensajes: 38
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: crear editar archivos PDF

^ agradezco el aporte. solo quisiera hacerte la observacion que en el codigo dejaste por ahi algunos datos personales, no se si sean reales o no pero quiza sea conveniente (o no) editar y borrarlos, por aquello del spam.

ayer estuve viendo el TCPDF y el FPDF y al parecer la opcion del FPDF parece mas sencilla/viable.

otra vez gracias, sigo en esto....... ahora con tu codigo me facilitas mucho entender el tema de los pdf en php.

saludos.
  #7 (permalink)  
Antiguo 23/09/2010, 12:39
 
Fecha de Ingreso: septiembre-2010
Mensajes: 38
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: crear editar archivos PDF

Estoy haciendo algunas pruebas y no logro poder incluir los valores de una busqueda.... Alguien podria orientarme como poder imprimir valores extraidos de una consulta?

tengo mi archivo que va aimprimir el pdf asi:
hellow.php (crea/muestra el pdf):
Código PHP:
<?php
require('textbox.php');//script para imprimir cuadros de texto
$pdf=new PDF_TextBox();
$pdf->AddPage();
$pdf->SetFont('Arial','',15);
$pdf->rect(10,10,180,230);//cuadro principal
$pdf->Image('logo.jpg',15,15,80);

$pdf->SetXY(95,15);
$pdf->drawTextBox('Contrato No. S050322'9040'C''T');
$folio $_POST['pfolio'];
$texto="texo";
$pdf->Cell(40,50,$folio);
$pdf->Cell(40,55,$texto);
$pdf->Output();
?>
mi idea es que en un formulario el user intrudice el folio, si este existe que se imrprima lo correspondiente al folio, eso de alguna manera lo tengo, pero mi archivo que valida lo submitido en el formulario tiene el vinculo hacia el que imprimiria el PDF (el codigo que pegue arriba) y lo estoy abriendo en una _BLANK para que no se pasen encabezados (segun ¿?) y no logro hacer que se imprima el valor de mi consulta...

efolio.php (busca el folio y si lo encuentra muestra el link al que crea el pdf):
Código PHP:
$folio $_POST['pfolio'];
$sql_tabla="evento";//tabla de registros generales
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass") or die("No se pudo conectar a la Base de datos");
mysql_select_db("$sql_db");
//consulta
$result mysql_query("SELECT * FROM $sql_tabla WHERE folio='$folio'") or die(mysql_error());
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe)
 
if (mysql_num_rows($result) != 0) {
echo 
"El folio es: " .$folio"<br>";
echo 
"<a href='hellow.php' target='_BLANK'>...</a>";

al dar click se abre la ventana nueva con el PDF pero no se imprime la cadena $folio (me refiero ya en el PDF) pero si la otra que puse de prueba ($texto) ....... y en este archivo (efolio.php) el echo con el valor .$folio. si me muestra lo que previamente se introdujo en un form (siempre y cuando exista en mi tabla $sql_tabla)

no se si exista una manera de hacer la llamada al pdf de forma automatica y evitar el hipervinculo o como hacer para poder tener los valores extraidos de las consultas ya que no se como incluir consultas sql en mi archivo que imprime el pdf ya que necesito previamente buscar un valor (user input) en la tabla y de existir que se imprima lo referente..... no se si me haga falta algun include o requiere o si de plano no se hace asi.......??

cualquier orientacion, info, link, tip, idea sera apreciada y muy agradecida.

saludos.
  #8 (permalink)  
Antiguo 24/09/2010, 08:11
 
Fecha de Ingreso: septiembre-2010
Mensajes: 38
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: crear editar archivos PDF

solo para comentarlo, resolvi mi problema de una forma que aunque no se si sea lo indicado, me dio resultado: en mi pag con el formulario, cambie el target a _blank y el action a la pagina que imprime/muestra el pdf (lo tenia sin target y el action hacia referencia a php_self etc)... de esta manera lo que mando del formulario lo puedo tomar con $_POST y hacer mis consultas previo a la creacion del pdf pero en ese mismo archivo.... espero que esto le sirva a alguien algun dia.

Saludos.
  #9 (permalink)  
Antiguo 24/09/2010, 10:30
 
Fecha de Ingreso: septiembre-2010
Mensajes: 8
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: crear editar archivos PDF

Hola MX, gracias por el detalle de la info personal... por otro lado lo poco que conozco de php, lo manejo de la siguiente manera: en un html hago un formulario, con method post o get, segun te convenga yo uso post, y en action simplemente apuntas al archivo php que crea el pdf, y eso lo que hace es que te genera el pdf autmonaticamente, segun el browser te lo abre automaticamente... Saludos...

Etiquetas: crear, editar, pdf
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:16.