Ancho de las columnas de cuadros al generar PDF

Tengo el problema de que aveces al generar PDFs de cuadros, algunas columnas quedan muy angostas.

¿Cómo puedo controlar el ancho de las columnas en la generación del PDF?

Gracias!

Hola Diego,

La libreria que se usa va a intentar hacer entrar todo lo que pueda en una linea por lo tanto va a achicar las columnas siempre que pueda, de todas maneras se puede pasar una serie de opciones a la tabla de la libreria para que la misma intente en la medida de lo posible mantener un tamaño minimo, aunque desde ya te digo que si los datos sobrepasan el ancho de la tabla… seguramente algo te achique.

Esto implica que tenes conocimiento tanto de la estructura interna de toba_ei_cuadro como asi tambien de la libreria EzPdf lo cual no esta muy bueno pero por ahora es lo mejor que te puedo recomendar para intentar lograr tu objetivo.

En la clase toba_ei_cuadro existe una propiedad de clase llamada ‘_pdf_tabla_opciones’ la idea es que sea un arreglo con todas las opciones extra que podria recibir un pdf, podes usar dicha variable para pasarle a la clase Ezpdf los anchos para las columnas. El formato que deberias pasarle es el siguiente:

 $opciones['options'] = array(<colname>=>array('justification'=>'left','width'=>100,'link'=>linkDataName),<colname>=>....); 

Para hacer esto te recomiendo hagas una subclase del cuadro (si es que aun no lo extendiste) y dentro coloques un metodo para fijar los valores en la propiedad _pdf_tabla_opciones.

Saludos

Ricardo,

Te cuento que extendí el cuadro con la siguiente clase, pero el PDF sigue saliendo tal cual lo hacía antes. ¿Qué puedo estar haciendo mal?

class cuadro_impresion_PDF extends toba_ei_cuadro
{
//protected $_pdf_tabla_opciones = array();
protected $_pdf_tabla_opciones = array(

            'nombre_objetivo'       =>      array('justification'=>'left',      'width'=>300) ,
            'tipo_producto_nombre'  =>      array('justification'=>'left',        'width'=>20)  ,
            'nombre_producto'       =>      array('justification'=>'left',       'width'=>300) ,
            'meta_fisica'           =>      array('justification'=>'left',        'width'=>10)  ,
            'unidad'                =>      array('justification'=>'left',        'width'=>10)
    );

}

Hola Diego,

pareciera que te falta un nivel de indireccion para el arreglo, creo que deberia ser asi:


protected $_pdf_tabla_opciones = array(
                           'options' => array(
                                               'nombre_objetivo'       =>      array('justification'=>'left',      'width'=>300) ,
                                               'tipo_producto_nombre'  =>      array('justification'=>'left',        'width'=>20)  ,
                                               'nombre_producto'       =>      array('justification'=>'left',       'width'=>300) ,
                                               'meta_fisica'           =>      array('justification'=>'left',        'width'=>10)  ,
                                               'unidad'                =>      array('justification'=>'left',        'width'=>10)
                                              ));

Saludos

Richard, estamos cerca, pero algo falta, porque sigue sin tomar el ancho para las columnas.

Si bien no genera error, las columnas salen del mismo ancho que antes.

¿Vos lo probaste?

Saludos!

Diego

Hola Diego,

por lo que pude ver aparentemente la libreria recalcula el ancho de las columnas dinamicamente en base a los datos que tiene la tabla… osea que por mas que le especificas un ancho aparentemente puede ignorarlo, no se cual sea el conjunto de datos que estes usando… yo probe con un ejemplo de toba_referencia… cuando la tabla es mas ancha de lo que necesita se estira todo… pero cuando restringis el ancho de la tabla aparentemente toma eso como maximo y redistribuye… osea en definitiva pareciera ser que el valor para el parametro esta, el codigo esta… pero algoritmagicamente no sirve para nada.

Saludos

Estimados, intenté lo siguiente…

Extendí el toba_ei cuadro: “ei_altas_patrimoniales.php”.
Incluí un metodo: “vista_pdf”

	function vista_pdf(toba_vista_pdf $salida)
	{

		$salida->set_papel_orientacion('landscape');
		$salida->inicializar();
		$salida->titulo('Altas de...');        
		$salida->set_nombre_archivo('reporte_de_alta.pdf');
		//$opciones = array(
		//	'cols' => array(
		//			    'catalogo_codigo' => array('justification'=>'left', 'width'=>40) ,
		//			    'numero_patrimonial' => array('justification'=>'left', 'width'=>40) ,
		//			    'cant'=> array('justification' =>'left', 'width'=>40) ,
		//			    'catalogo_descripcion' => array('justification'=>'left', 'width'=>250) ,
		//			    'fecha_incorporacion' => array('justification'=>'left', 'width'=>40) ,
		//			    'valor_bien' => array('justification'=>'left', 'width'=>50) ,
		//			    'documento_numero' => array('justification'=>'left', 'width'=>50) ,
		//			    'responsable' => array('justification'=>'left', 'width'=>200) ,
		//			   
		//			   ));
		//$salida->tabla($datos, true, 8, $opciones);
		              

		$pdf = $salida->get_pdf();
		$formato = 'Pagina {PAGENUM} de {TOTALPAGENUM}';
		$pdf->ezStartPageNumbers(580, 20, 8, 'center', $formato, 1);        //x, y, size, pos, texto, pagina inicio
		$this->generar_salida('pdf', $salida);
		
	}

El array lo comenté porque, al intentar imprimir dicho array que recibe el método ezTable desde la clase Cezpdf, veo que se lo invoca 2 veces.

Probé definir el mismo array en el método tabla de la clase toba_vista_pdf y me funcionó perfectamente.

	function tabla( $datos, $ver_titulos_col=false, $tamanio=8, $opciones=array() ){
			$opciones = array(
                           'cols' => array(
                                               'catalogo_codigo' => array('justification'=>'left', 'width'=>40) ,
                                               'numero_patrimonial' => array('justification'=>'left', 'width'=>40) ,
                                               'cant'=> array('justification' =>'left', 'width'=>40) ,
                                               'catalogo_descripcion' => array('justification'=>'left', 'width'=>250) ,
                                               'fecha_incorporacion' => array('justification'=>'left', 'width'=>40) ,
					       'valor_bien' => array('justification'=>'left', 'width'=>50) ,
					       'documento_numero' => array('justification'=>'left', 'width'=>50) ,
					       'responsable' => array('justification'=>'left', 'width'=>200) ,
                                              
					      ));
		//ei_arbol($opciones);die();
		$ver_tit_col = $ver_titulos_col? 1 : 0;
		$texto_tit_col = isset($datos['titulos_columnas'])? $datos['titulos_columnas'] : '';
		$texto_titulo_tabla = isset($datos['titulo_tabla'])? $datos['titulo_tabla'] : '';
		$opciones_def = array(
						'splitRows'=>0,
						'rowGap' => 1,
						'showHeadings' => $ver_tit_col,	
						'titleFontSize' => 9,
						'fontSize' => $tamanio,
						'shadeCol' => array(0.9,0.9,0.9),
						'outerLineThickness' => 0.7,
						'innerLineThickness' => 0.7,
	                	'xOrientation' => 'center',
	                	'maxWidth' => $this->get_ancho(100)
		            );
		
		$opciones = array_merge($opciones_def, $opciones);
		$this->pdf->ezTable($datos['datos_tabla'], $texto_tit_col, $texto_titulo_tabla, $opciones);
	}

Alguien me puede decir si se puede pasar ese array al método tabla? ya que de la forma que me funció, obviamente va a fectar a todas las salidas PDF que tenga en la aplicación.

Desde ya gracias!!!

Hola Luis,

estoy mirando el metodo generar_cuadro de la clase toba_ei_cuadro_salida_pdf y en el metodo pdf_cuadro me encuentro con lo siguiente:


$opciones = $this->get_opciones_columnas();
$opciones['width'] = $ancho;
$opciones['cols'] = $estilos;

Es probable que se esten pisando tus seteos para el caso de la generacion comun, ahora si redefinis el metodo en tu subclase, eso no deberia estar pasando.
Yo probaria redefiniendo el metodo pdf_cuadro, no el vista_pdf que es de mas alto nivel y para otros seteos.

Por otro lado, esto deberia estar a nivel de toba_ci::vista_pdf


$salida->set_papel_orientacion('landscape');
$salida->inicializar();
$salida->set_nombre_archivo('reporte_de_alta.pdf');
$pdf = $salida->get_pdf();
$formato = 'Pagina {PAGENUM} de {TOTALPAGENUM}';
$pdf->ezStartPageNumbers(580, 20, 8, 'center', $formato, 1);        //x, y, size, pos, texto, pagina inicio

Igualmente voy a ver que pasa con esos settings, no se deberian estar pisando, sino mergeando.

Saludos

Hola Diego:
Estoy con el mismo problema y no encuentro solución, por ello, te pregunto si pudiste encontrar como cambiar el ancho de las columnas al crear el pdf.

Saludos. Sergio

Con el mismo problema. Hay alguna solucion al dia de hoy ? Estamos con la version 3.16.2. Gracias

Hola Juan,

necesito la version de Toba para poder orientarte y un poco mas de detalle del problema.

Saludos

La version de Toba es 3.0.31
Gracias

Saludos!