¿Cómo crear tablas FPDF?

Tengo un problema al crear tablas con fpdf.

¿Alguien puede ayudarme a hacer esta página (o al menos decirme cómo hacerlo)?

¿O puede mostrar cómo convertir Tablas HTML a tablas FPDF y poner el código aquí?

También tengo esto (junto con la conexión a la base de datos):

$person = mysql_fetch_array($result);

Me gustaría que esto funcione cuando se agrega dentro de las tablas con esto = (ejemplo)

$pdf->Cell(0,260,''.$person["CA"],'C',0 ,1); --- .$person["CA"]

¿Alguien puede ayudarme?

preguntado el 09 de enero de 11 a las 04:01

¿Cuál es el problema específico que tienes? -

Parece que no puedo hacer las tablas ... como, por ejemplo, si sigo el tutorial proporcionado por fpdf, muestran el texto extraído de countries.txt ... pero quiero extraer el texto de la función $ _POST ... tengo esto puertoricohoops.net/invoicestimate/pdf/pdf8.php - y el texto dentro de las tablas se extrae de un archivo .txt, pero quiero que esos lugares se llenen con mi función $ _POST .. gracias por ayudar -

1 Respuestas

Bueno, FPDF funciona como una máquina de escribir, ya que tiene un punto X, Y itinerante en el que escribe, que puede mover manualmente o dejar que lo haga por usted.

No sé si se requiere el enorme espacio en blanco de la izquierda. Si es así, tendría que llamar $ this-> SetX ($ coordenada) antes de cada escritura.

Deberías hacer algo como esto:

class InvoicePDF extends FPDF //Create a new class to contain the header/footer/etc. which extends FPDF
{
    public function Header()
    {
    //Header stuff goes here, like the big Invoice
        $this->SetY(10); //SetY 10 units down from the top, experiment with distance to get appropriate distance
        $this->SetFont('Arial','',20); //Set Font to Arial/Helvetica 20 pt font
        $this->SetTextColor(0,0,0); //Set Text Color to Black;
        $this->Cell(0,9,"INVOICE",0,0,'R');  //Write the word INVOICE Right aligned in a box the width of the page, will put it at the far right of the page
     }

     public function Footer()
     {
       //any footer stuff goes here
     }
     
     public function FillHeadInfo($info) //$info would be an array of the stuff to fill the small table at the top
     {
          $this->SetY(0); //reset the Y to the original, since we moved it down to write INVOICE
          $this->SetFont('Arial','',12);
          $this->SetFillColor(224,224,224); //Set background of the cell to be that grey color
          $this->Cell(20,12,"Order #",1,0,'C',true);  //Write a cell 20 wide, 12 high, filled and bordered, with Order # centered inside, last argument 'true' tells it to fill the cell with the color specified
          $this->Cell(20,12,"Coding",1,0,'C',true);
          $this->Cell(20,12,"Sales Code",1,1,'C',true); //the 1 before the 'C' instead of 0 in previous lines tells it to move down by the height of the cell after writing this
          
          $this->Cell(20,12,$info['ordernum'],1,0,'C');
          $this->Cell(20,12,$info['coding'],1,0,'C');
          $this->Cell(20,12,$info['salescode'],1,1,'C');
          
          $this->Cell(40,12,"Name & Address",1,0,'C',true);
          $this->Cell(20,12,"Date",1,1,'C',true);
          $y = $this->GetY(); //Need the current Y value to reset it after the next line, as multicell automatically moves down after write
          $x = $this->GetX(); // Might need the X too
          $this->MultiCell(40,12,$info['customername'] . "\n" . $info['address'] . "\n" . $info['city'] . ', ' . $info['state'] . ' ' . $info['zip'],1,'L',false); //I assume the customer address info is broken up into multiple different pieces
          $this->SetY($y);  //Reset the write point
          $this->SetX($x + 40); //Move X to $x + width of last cell

          $this->Cell(20,36,date("format",strtotime($info['date'])),1,1,'C');  //Might be easier to use $this->Rect() to draw rectangles for address and date and then write the address and date into them without borders using SetX and SetY, if the borders don't line up or whatever

     }

     public function fillItems($items)
     {
          //You'd build the items list much the same way as above, using a foreach loop or whatever
          //Could also easily combine this function and the one above
     }
}

Luego, al crear el pdf, haría algo como esto:

require_once('fpdf.php');
require_once('class.invoicepdf.php');
//Get whatever info you need to fill the pdf
$pdf = new InvoicePDF('P','mm','Letter');
$pdf->AddPage();
$pdf->FillHeadInfo($info);  //Could also pass $_POST and rely on the keys of the $_POST array
$pdf->FillItems($items);
$pdf->Output('filename.pdf','I');

Por cierto, sugeriría que en lugar de intentar escribirlo desde $ _POST, guarde el pedido en la base de datos, luego pase la ID del pedido al script para escribir el pdf a través de un enlace y $ _GET, y tenga el script recuperar la información de la base de datos, de esta manera puede seleccionar solo la información que necesita.

respondido 11 nov., 20:16

gracias por responder. ¿Probaste el código? php da este error: Parse error: syntax error, inesperado '{', esperando '(' (debajo del encabezado de la función pública) - tampoco entiendo la lista de elementos de compilación, digo, en mi caso,. $ person ["CA "] = dirección ?? - NORMA

da este error: Parse error: error de sintaxis, T_OBJECT_OPERATOR inesperado .. en las líneas donde esto es: $ y = this-> GetY (0); y $ x = this-> GetX (0); .. si los elimino me distorsiono: puertoricohoops.net/invoicestimate/pdf/pdf9.php - Si pudiera proporcionar un ejemplo de su código en un enlace, sería bueno ... ¡gracias! - NORMA

¿Dónde obtengo esta información de ----- $ info ['ordernum'] es ordernum y $ _POST name = "" value? - NORMA

Oh, oops, olvidé el () después de las declaraciones de funciones de encabezado y pie de página. class.invoicepdf.php sería simplemente el archivo que contiene el código de clase InvoicePDF. Además, eso debería ser $ y = $ this-> GetY () y $ x = $ this-> GetX (), tenga en cuenta que tampoco hay 0 en ellos. 'ordernum' podría ser un nombre de campo de entrada $ _POST o podría ser el nombre de la columna en una fila de MySQL obtenida asociativamente, o podría ser una clave completamente arbitraria en una matriz ensamblada de cualquier fuente. - Fénix

@Phoenix: La función de celda no envuelve el contenido de la celda, si la longitud del contenido excede el ancho de la celda, fluye. Afecto feo si tiene una dirección y muestra el uso de la celda, entonces se escapará de la página. ¿Sabías cómo solucionar esto? - una pregunta

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.