PHP:¿Como desplegar Texto en varias columnas(parametrizable), justificado, con FPDF sin librerías extras

De Foros del Web

El problema surge cuando uno desea imprimir un texto en PDF en varias columnas y justificado con la ayuda de FPDF, ya que no existe la funcionalidad de crear varias columnas y justificarlas, para eso se puede utilizar la siguiente función:

//*******************************************************************************************
//*******************************************************************************************
//*******************************************************************************************
// César Ríos Granados - México 10/01/2012
// infected_artillery@hotmail.com 
// 
// Parámetros: Cadena original, Numero de columnas a imprimir la cadena, Variable del FPDF para imprimir devuelta 
function textIntoCols($strOriginal,$noCols,$pdf) 
{ 
    $iAlturaRow = 4; //Altura entre renglones 
    $iMaxCharRow = 190; //Número máximo de caracteres por renglón 
    $iSizeMultiCell = $iMaxCharRow / $noCols; //Tamaño ancho para la columna 
    $iTotalCharMax = 9957; //Número máximo de caracteres por página 
    $iCharPerCol = $iTotalCharMax / $noCols; //Caracteres por Columna 
    $iCharPerCol = $iCharPerCol - 290; //Ajustamos el tamaño aproximado real del número de caracteres por columna 
    $iLenghtStrOriginal = strlen($strOriginal); //Tamaño de la cadena original 
    $iPosStr = 0; // Variable de la posición para la extracción de la cadena. 
    // get current X and Y 
    $start_x = $pdf->GetX(); //Posición Actual eje X 
    $start_y = $pdf->GetY(); //Posición Actual eje Y 
    $cont = 0; 
    while($iLenghtStrOriginal > $iPosStr) // Mientras la posición sea menor al tamaño total de la cadena entonces imprime 
    { 
        $strCur = substr($strOriginal,$iPosStr,$iCharPerCol);//Obtener la cadena actual a pintar 
        if($cont != 0) //Evaluamos que no sea la primera columna 
        { 
            // seteamos a X y Y, siendo el nuevo valor para X 
            // el largo de la multicelda por el número de la columna actual, 
            // más 10 que sumamos de separación entre multiceldas 
            $pdf->SetXY(($iSizeMultiCell*$cont)+10,$start_y); //Calculamos donde iniciará la siguiente columna 
        } 
        $pdf->MultiCell($iSizeMultiCell,$iAlturaRow,$strCur); //Pintamos la multicelda actual 
        $iPosStr = $iPosStr + $iCharPerCol; //Posicion actual de inicio para extracción de la cadena 
        $cont++; //Para el control de las columnas 
    }     
    return $pdf; 
}
//*******************************************************************************************
//*******************************************************************************************
//*******************************************************************************************

y se manda a llamar de la siguiente manera:

//........ 
            $Apriv = 'dsadsadasdsaddsadsadasdsaddsadsadasdsaddsadsadasdsaddsadsadasdsaddsadsadasdsaddsadsadasdsaddsadsadasdsaddsadsadasdsaddsadsadasdsad'; 
 
            // se pasa como parametros la variable con el texto, el número de columnas deseado y la variable con la que imprimes el pdf 
            textIntoCols($Apriv,3,$pdf); 
//....... 
            $pdf->Output(); 

-- totobycrg 11 Enero 2012

No tengo como dejarles un ejemplo ahorita, pero ya subire uno en cuanto pueda =)

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales