Foros del Web » Programando para Internet » PHP »

Llenar un PDF desde PHP y XML

Estas en el tema de Llenar un PDF desde PHP y XML en el foro de PHP en Foros del Web. hola: Quisiera saber cuales son las buenas practicas para trabajar con este material (Llenar un PDF desde PHP y XML ) Es sencillo, tengo una ...
  #1 (permalink)  
Antiguo 25/08/2009, 07:31
 
Fecha de Ingreso: agosto-2009
Mensajes: 5
Antigüedad: 14 años, 8 meses
Puntos: 0
Exclamación Llenar un PDF desde PHP y XML

hola:

Quisiera saber cuales son las buenas practicas para trabajar con este material (Llenar un PDF desde PHP y XML)
Es sencillo, tengo una Bd que me almacena todos los datos referentes a unos modelos que están en PDF. Necesito llenarlos automaticamente desde una pagina web. En la web estoy usando PHP, pero quisiera que el llenado de los formularios se realizara haciendo uso de XML, ya que son muchos documentos y por lo que he leido es la mejor manera. De no tener una respuesta acertada acerca de este tema. Me pudieran decir como se puede hacer mejor.

saludos, YO
  #2 (permalink)  
Antiguo 25/08/2009, 07:36
Avatar de Luis207  
Fecha de Ingreso: abril-2009
Mensajes: 52
Antigüedad: 15 años
Puntos: 0
Respuesta: Llenar un PDF desde PHP y XML

Con FPDF, te resultará muy fácil. En fpdf.org tienen muchos y muy buenos.
  #3 (permalink)  
Antiguo 25/08/2009, 15:32
 
Fecha de Ingreso: agosto-2009
Mensajes: 5
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Llenar un PDF desde PHP y XML

Si, fpdf.org tiene muchos como comentas, pero no me deja abrir un fichero ya predefinido. Esa librería te permite construir un PDF, pero no editar cada uno de sus campos si este ya existe.

Muchas gracias colega.

En espera de más respuestas.

Última edición por envipe79; 25/08/2009 a las 15:49
  #4 (permalink)  
Antiguo 26/08/2009, 00:55
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
Puntos: 1517
Respuesta: Llenar un PDF desde PHP y XML

Lo que sucede es que un PDF es un sistema de vectores. PHP no va a poder trabajar con ello, vas a tener que usar un programa que este instalado en ese servidor que pueda leer el archivo de PDF y que ese programa tenga la capacidad de exportar a algun otro formato como texto o que pueda enviarte los datos a traves de HTTP. Y que el programa debe tener la capacidad de recibir comandos a traves de HTTP. Con exec en php vas a poder ejecutar el programa que hayas instalado y enviarle los comandos.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 17/09/2009, 05:04
 
Fecha de Ingreso: agosto-2009
Mensajes: 5
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Llenar un PDF desde PHP y XML

Así lo veo un poco complejo, no sería mejor usar alguna librería o class que me permita hacerlo. saludos y gracias
  #6 (permalink)  
Antiguo 17/09/2009, 05:35
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años, 1 mes
Puntos: 16
Respuesta: Llenar un PDF desde PHP y XML

hola envipe79, yo utilizo la clase ezpdf a la cual le agregue un extends backgroundPDF para generar pdf de los articulos de una web.

hice un archivo crearPDF.php donde le paso por $_GET el id del post a generar el pdf aqui el codigo

Código php:
Ver original
  1. function HexToRGB($hex) {
  2.  
  3. $hex = ereg_replace("#", "", $hex);
  4.  
  5. $color = array();
  6.  
  7.  
  8.  
  9.     if(strlen($hex) == 3) {
  10.  
  11.         $color['r'] = hexdec(substr($hex, 0, 1) . $r);
  12.        
  13.         $color['g'] = hexdec(substr($hex, 1, 1) . $g);
  14.        
  15.         $color['b'] = hexdec(substr($hex, 2, 1) . $b);
  16.    
  17.     }
  18.    
  19.     else if(strlen($hex) == 6) {
  20.    
  21.         $color['r'] = hexdec(substr($hex, 0, 2));
  22.        
  23.         $color['g'] = hexdec(substr($hex, 2, 2));
  24.        
  25.         $color['b'] = hexdec(substr($hex, 4, 2));
  26.    
  27.     }
  28.    
  29.      $color['r'] = round(($color['r']/255)*100)/100;
  30.      $color['g'] = round(($color['g']/255)*100)/100;
  31.      $color['b'] = round(($color['b']/255)*100)/100;
  32.    
  33.     return $color ;
  34.  
  35. }
  36.  
  37. function RGBToHex($r, $g, $b) {
  38.  
  39.     $hex = "#";
  40.    
  41.     $hex.= dechex($r);
  42.    
  43.     $hex.= dechex($g);
  44.    
  45.     $hex.= dechex($b);
  46.    
  47.      
  48.    
  49.     return $hex;
  50.  
  51. }
  52.  
  53.  
  54. class Creport extends backgroundPDF {
  55.    
  56.     var $reportContents = array();
  57.    
  58.     function Creport($p,$o,$type = 'none', $options = array()){
  59.       $this->backgroundPDF($p,$o,$type,$options);
  60.     }
  61.    
  62.     function rf($info){
  63.       // this callback records all of the table of contents entries, it also places a destination marker there
  64.       // so that it can be linked too
  65.       $tmp = $info['p'];
  66.       $lvl = $tmp[0];
  67.       $lbl = rawurldecode(substr($tmp,1));
  68.       $num=$this->ezWhatPageNumber($this->ezGetCurrentPageNumber());
  69.       $this->reportContents[] = array($lbl,$num,$lvl );
  70.       $this->addDestination('toc'.(count($this->reportContents)-1),'FitH',$info['y']+$info['height']);
  71.     }
  72.    
  73.     function dots($info){
  74.       // draw a dotted line over to the right and put on a page number
  75.       $tmp = $info['p'];
  76.       $lvl = $tmp[0];
  77.       $lbl = substr($tmp,1);
  78.       $xpos = 520;
  79.    
  80.       switch($lvl){
  81.         case '1':
  82.           $size=16;
  83.           $thick=1;
  84.           break;
  85.         case '2':
  86.           $size=12;
  87.           $thick=0.5;
  88.           break;
  89.       }
  90.    
  91.       $this->saveState();
  92.       $this->setLineStyle($thick,'round','',array(0,10));
  93.       $this->line($xpos,$info['y'],$info['x']+5,$info['y']);
  94.       $this->restoreState();
  95.       $this->addText($xpos+5,$info['y'],$size,$lbl);
  96.    
  97.    
  98.     }
  99.  
  100.     function setEstilo($info){
  101.         switch($info['p']){
  102.             case 'titulo':
  103.                 $color = HexToRGB('717C7E');
  104.                 $this->setColor($color['r'],$color['g'],$color['b']);
  105.                 $cS = HexToRgb("e8efdb");
  106.                 $this->setStrokeColor($cS['r'],$cS['g'],$cS['b']);
  107.                 $this->setLineStyle(0.1);
  108.                 $this->line($info['x'],($info['y']-($info['height']/2)),550,($info['y']-($info['height']/2)));
  109.                 $this->ezSetY(($info['y']-($info['height']/2)));
  110.             break;
  111.             case 'texto':
  112.                 $color = HexToRGB('999999');
  113.                 $this->setColor($color['r'],$color['g'],$color['b']);
  114.             break; 
  115.         }
  116.    
  117.     }
  118.    
  119.     function img($info){
  120.        
  121.        
  122.         $tam = getimagesize($info['p']);
  123.                    
  124.         $ext = substr(strrchr($info['p'],"."),1);
  125.        
  126.         if($ext=='jpg'){
  127.             $this->addJpegFromFile($info['p'],$info['x'],($info['y']-($info['height']/2)),($tam[0]/2),($tam[1]/2));
  128.             $this->ezSetY($info['y']-($info['height']*2));
  129.         }else{
  130.             $this->addPngFromFile($info['p'],$info['x'],$info['y'],($tam[0]/2),($tam[1]/2));
  131.         }
  132.        
  133.     }
  134.  
  135.  
  136. }
  137.  
  138.  
  139.  
  140. if(isset($_GET['idPost'])){
  141.     global $DbConn;
  142.    
  143.     //Buscamos la informacion del post
  144.         $sql = 'SELECT * FROM post WHERE id='.$_GET['idPost'];
  145.         $Post = $DbConn->fetchAssoc($DbConn->query($sql));
  146.    
  147.     //limpiamos
  148.         $Post['contenido']= $Post['contenido'];
  149.         $Post['contenido']= str_replace('<br />','',$Post['contenido']);
  150.         $Post['contenido']= str_replace('<li>',' <c:img:../img/estilos/liPag.jpg></c:img>',$Post['contenido']);
  151.         $Post['contenido']= str_replace('</li>','',$Post['contenido']);
  152.         $Post['contenido']= str_replace('<h1>','<b>',$Post['contenido']);
  153.         $Post['contenido']= str_replace('</h1>','</b>',$Post['contenido']);
  154.    
  155.     //instanciamos la clase Cezpdf
  156.         $c = HexToRgb("#FFFFFF");
  157.         $pdf = new Creport('a4','portrait','color',array('r'=>$c['r'],'g'=>$c['g'],'b'=>$c['b']));
  158.         $pdf->selectFont('../include/fonts/Helvetica.afm');
  159.  
  160.     //Configuramos los margenes
  161.         $pdf -> ezSetMargins(50,70,50,50);
  162.    
  163.     // Generamos las cabeceras
  164.         $all = $pdf->openObject();
  165.         $pdf->saveState();
  166.         $cS = HexToRgb("e8efdb");
  167.         $pdf->setStrokeColor($cS['r'],$cS['g'],$cS['b']);
  168.         $tam = getimagesize("../img/png/logo.jpg");
  169.         $pdf->addJpegFromFile('../img/png/logo.jpg',($pdf->ez['pageWidth']-(($tam[0]/2)+5)),($pdf->ez['pageHeight']-($tam[1]/2)),$tam[0]/2,$tam[1]/2);
  170.         $pdf->line(20,40,578,40);
  171.         $pdf->addText(50,34,6,'http://www.xxxx.xxx.xx - Portal de Ecología');  $pdf->restoreState();
  172.        
  173.         $pdf->closeObject();
  174.         $pdf->addObject($all,'all');
  175.    
  176.  
  177.  
  178.     $pdf->ezStartPageNumbers(500,28,5,'','{PAGENUM} de {TOTALPAGENUM}',1);
  179.    
  180.    
  181.     //recorremos los datos
  182.    
  183.         $pdf->ezText("<C:setEstilo:titulo>".$Post['titulo']."</c:setEstilo>\n",10);
  184.         $pdf->ezText("<C:setEstilo:texto>".$Post['contenido']."</c:setEstilo>\n",5.5,array('justification'=>'full'));
  185.        
  186.        
  187.        
  188.     //prueba callback
  189.         //$pdf->ezText("<C:img:></c:img>\n",5.5,array('justification'=>'full'));   
  190.    
  191.    
  192.     $pdf->output();
  193.     $pdf->ezStream();
  194. }
  #7 (permalink)  
Antiguo 17/09/2009, 06:13
 
Fecha de Ingreso: mayo-2005
Mensajes: 188
Antigüedad: 19 años
Puntos: 6
Respuesta: Llenar un PDF desde PHP y XML

envipe79, creo que sé lo que quieres hacer, pero no sé como hacerlo en PHP, no sé si existirá alguna librería para ello (yo no la he encontrado). Busca por FDF (Forms Data Format), es un formato similar al PDF que se usa para rellenar PDFs que se utilizan como plantillas.

Cada fichero FDF contiene una referencia (URL) al fichero PDF que se usará como plantilla. Eso sí, para generar la plantilla necesitas un editor PDF de escritorio que te permita crear formularios. Además de la referencia, el FDF también tiene una lista de campos con los valores a rellenar.

El Acrobat Reader, por ejemplo, es capaz de hacer la "fusión" si cargas un fichero FDF, pero entiendo que tu intención es que sea el servidor quien haga la fusión. Yo en java lo he visto con la librería iText, pero cuando he buscado alguna solución similar en PHP no la he encontrado :(

Si lo consigues, por favor, avísanos al foro ;)

Gracias.
  #8 (permalink)  
Antiguo 19/01/2010, 15:22
 
Fecha de Ingreso: agosto-2009
Ubicación: Caracas
Mensajes: 7
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Llenar un PDF desde PHP y XML

buenas , amigo este codigo que usted muestra me servira para generar un PDF de una factrura, donde la descripcion de los productos son bastante largas, y en muchos casos me ocuparan mas de una pagina????????? sera que me puede facilitar el codigo completo, por que estaba probando y me da un error de re declaracion de class Creport extends backgroundPDF {
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 11:41.