Foros del Web » Programando para Internet » PHP »

Librería dompdf

Estas en el tema de Librería dompdf en el foro de PHP en Foros del Web. Buenas noches. Tengo una aplicación que genera PDFs con la librería dompdf. Dibujo una tabla con divs que tiene dos columnas, descripción y precio. Los ...
  #1 (permalink)  
Antiguo 28/03/2022, 14:09
 
Fecha de Ingreso: enero-2011
Ubicación: Zaragoza
Mensajes: 98
Antigüedad: 13 años, 2 meses
Puntos: 1
Librería dompdf

Buenas noches. Tengo una aplicación que genera PDFs con la librería dompdf. Dibujo una tabla con divs que tiene dos columnas, descripción y precio. Los datos los paso de MySQL. El problema está en que muchas veces el texto del campo descripción es muy largo y me lo hace en varias páginas, hasta aquí bien. El problema está en que la columna precio no me la imprime al principio del registro sino al final. Una ayuda por favor. Gracias y un saludo
  #2 (permalink)  
Antiguo 29/03/2022, 08:56
Avatar de teslas  
Fecha de Ingreso: febrero-2013
Ubicación: Barcelona
Mensajes: 106
Antigüedad: 11 años, 2 meses
Puntos: 1
Respuesta: Librería dompdf

Hay una manera muy sencilla de acotar el volumen del texto al que te refieres, y así yo lo he utilizado mucho en mis scrpts.

Simplemente con la funcion de PHP strlen. Yo te he puesto como ejemplo un maximo de 500 letras, y ha partir de ahi aparecerá (...)

$num =0
$num = strlen($description);

if ($num >500){
echo " (...)";
}

En cuanto al problema de que te imprime mal el precio no puedo aconsejarte porque no veo el codigo.
  #3 (permalink)  
Antiguo 29/03/2022, 10:13
 
Fecha de Ingreso: enero-2011
Ubicación: Zaragoza
Mensajes: 98
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Librería dompdf

Buenas tardes. Os pongo el código

Código PHP:
<?php

//use Mpdf\Mpdf;

if (session_status() == PHP_SESSION_NONE) {
    
session_start();
}

if(isset(
$_POST['idpre'])){
    
// conectare la base de datos
    
include "../clases/conexion.php";
    
//require "scripts.php";
    
if($_SESSION['conectar'] == "conectar"){
           
$obj= new conectar();
           
$conexion $obj->conexion();
        }else{
           
$obj= new conectar();
           
$conexion $obj->conexion_1();
        }
}
//Necesitamos recuperar los datos del presupuesto
$id_pre $_POST['idpre'];
$sql_pre "SELECT * FROM presupuestos WHERE id_presupuesto = '".$id_pre."'";
$result_pre mysqli_query($conexion$sql_pre);
$fila_pre mysqli_fetch_assoc($result_pre);

//Necesitamos los datos del cliente
$sql_cli "SELECT * FROM clientes WHERE id_cliente = '".$fila_pre['id_cliente_pre']."'";

$result_cli mysqli_query($conexion$sql_cli);
$fila_cli mysqli_fetch_assoc($result_cli);

//También los datos de la empresa

$sql_empresa "SELECT * FROM empresa";
$resul_empresa mysqli_query($conexion$sql_empresa);
$fila_empresa mysqli_fetch_assoc($resul_empresa);
$ruta_logo ="../img/";
ob_start();

?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!--<link rel="stylesheet" type="text/css" href="../css/bootstrap.css">-->
    <!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">-->

<!-- Optional theme -->
<!--<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap-theme.min.css">-->
    <link rel="stylesheet" href="../css/bs/bootstrap.min.css">


<!-- Optional theme -->
<link rel="stylesheet" href="../css/bs/bootstrap-theme.min.css">


    <title>Imprimir presupuesto</title>
    <style>
        hr {
           height: 3px;
           background-color: red;
           margin-left: 10px;
           margin-right: 10px;
}
    </style>
</head>
<body>
    <!-- Comenzamos diseñando el prespuesto -->
    <div class="container-fluid" style="font-size: 12px;">
    
        <div class="row">
            <img style="width: 300px; height: 100px;" src="<?php echo $ruta_logo.$fila_empresa['logo'];?>">
        </div>
            <div class="row" style="margin-right: 10px; margin-top: 20px; width: 100%;">
                <div class="col-xs-12" style="margin-left: 0px !important;">
                    <table  class="table mt-3" style="border-style: solid;">
                        <tr>
                            <td>
                                <span><?php echo $fila_empresa['nombre'];?></span>
                                <br>
                                <span>Cif: <?php echo $fila_empresa['cif'];?></span>
                                <br>
                                <span><?php echo $fila_empresa['direccion'];?></span>
                                <br>
                                <span><?php echo $fila_empresa['tel'];?></span>
                                <br>
                                <span><?php echo $fila_empresa['email'];?></span>
                            </td>
                            <td class="text-right">
                                <span><?php echo $fila_cli['nombre'];?></span>
                                <br>
                                <span><?php echo $fila_cli['direccion'];?></span>
                                <br>
                                <span><?php echo $fila_cli['telefono'];?></span> 
                            </td>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
       
        <!-- Aquí va el número de presupuesto y la fecha -->
        <div class="row" style="margin-right: 20px; margin-left: 20px; text-align:center;">
            <div class="col-xs-4 col-xs-offset-4" style="border-style: solid; text-align:center;">
                <span>Número presupuesto: <span class="font-weight-bold"><?php echo $fila_pre['numero_presupuesto'];?></span></span>
                <br>
                <span>Fecha Presupuesto: <span class="font-weight-bold"><?php echo $fila_pre['fecha_presupuesto'];?></span></span>
            </div>
        </div>
        <!-- vamos ha hacerlo con rows y cols -->
        <!-- Primero los encabezados -->
       
            <div class="row" style="margin-top: 10px; margin-right: 10px; margin-left: 10px; background-color: blue; color: white; 
            font-size: 14px; font-weight:bold; line-height: 30px;">
                <div class="col-xs-10">
                    <span>Descripción</span>
                </div>
                <div class="col-xs-2">
                    <span>Precio</span>
                </div>
            </div>
            <?php 
                $sql_detalles 
"SELECT * FROM detalles_presupuesto WHERE id_presupuesto = '".$fila_pre['id_presupuesto']."'";
                
$resul_detalles mysqli_query($conexion$sql_detalles);
                while(
$fila_detalle mysqli_fetch_assoc($resul_detalles)){
                    
?>
                    <div class="row" style="margin-top: 10px; margin-right: 10px; margin-left: 10px; font-size: 12px;">
                        <div class="col-xs-10"><p><?php echo nl2br($fila_detalle['descripcion']);?></p></div>
                        <div class="col-xs-2" style="page-break-inside:avoid !important;"><span style="page-break-inside:avoid !important;"><?php echo number_format($fila_detalle['precio'], 2',''.').'€'?></span></div>
                    </div>
                    <hr style=" height: 3px; background-color: red; margin-left: 10px; margin-right: 10px;">
                <?php    
                
}    
            
            
?>
        <!-- Fin -->
    
        <!-- Aquí va la tabla con los detalles de presupuesto -->
          
        <!-- Aquí los totales -->  

        <div class="row" style="margin-right: 45px;">
            <div class="col-xs-4 col-xs-offset-8" style="font-size: 14px; font-weight: bold; border-style:solid;">
                <table class="table">
                    <tr style="padding: 5px;">
                        <td>Total Presupuesto:</td>
                        <td style="color:red; text-align:right;"><?php echo number_format($fila_pre['total_presupuesto'], 2,',''.').'€';?></td>
                    </tr>
                    <tr>
                        <td>Iva:</td>
                        <td style="color:red; text-align:right;"><?php echo $fila_pre['iva'].'%';?></td>
                    </tr>
                    <tr>
                        <td>Total Iva:</td>
                        <td style="color:red; text-align:right;"><?php echo number_format($fila_pre['total_iva'], 2,',''.').'€';?></td>
                    </tr>
                    <tr>
                        <td>Total Con Iva:</td>
                        <td style="color:red; text-align:right;"><?php echo number_format($fila_pre['total_con_iva'], 2,',''.').'€';?></td>
                    </tr>
                </table>
            </div>
        </div>
    </div>
    
</body>
</html>
<?php
    $html 
ob_get_clean();
    
//echo $html;
    
require_once "../dompdf/autoload.inc.php";
    
$numero_presupuesto $fila_pre['numero_presupuesto'];
    
$nombre_archivo "Presupuesto-" .$numero_presupuesto.".pdf";
    use 
DompdfDompdf;
    
    
$dompdf = new dompdf();
    
$options $dompdf->getOptions();
    
$options->set(array('isRemoteEnabled' => true));
    
$dompdf->setOptions($options);
    
$html .= '<style>
'
.file_get_contents("../css/bs/bootstrap.min.css").'
</style>'
;
    
$dompdf->loadhtml($html);
    
$dompdf->setPaper('A4'"portrait");
    
$dompdf->render();
    
$pdfContent $dompdf->output();
    
$salida= array(
        
'name' => $nombre_archivo,
        
'file' => "data:application/pdf;base64," base64_encode($pdfContent)
    );
    
header('Content-type: application/json');
    echo 
json_encode($salida);

?>
Entonces, al imprimir un registro muy largo, tendría que imprimir descripción y a la derecha el precio, pero no lo hace así, imprime toda la descripción y cuando pasa de página sí imprime a la derecha el precio de ese registro y yo quiero que lo haga al comienzo del registro. Gracias.

Última edición por sergiodueso; 29/03/2022 a las 10:22
  #4 (permalink)  
Antiguo 30/03/2022, 12:59
 
Fecha de Ingreso: enero-2011
Ubicación: Zaragoza
Mensajes: 98
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Librería dompdf

Buenas noches. Necesito vuestra ayuda. Por favor. ¿Por qué al hacer salto de página en dompdf, me pasa el campo precio a la otra página? Gracias. Un saludo

Etiquetas: dompdf, mysql, 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 14:51.