Soporte » WordPress Avanzado » Como resover este problema de dompdf (creador de pdfs) dentro de un plugin

  • Hola, como estan?

    Les comento. Estaba tratanto de editar un plugin que sirve para mostrar un catalogo de productos en un pdf. Yo no lo usaría para eso, sino para crear etiquetas para pegar en el empaquetado de productos vendidos. Usé de referencia este plugin porque me servia para entender como funcionaba dompdf, ya que es un plugin sencillo y bastante facil de entender su codigo.

    El problema es que en una parte del codigo que es para armar el HTML que irá en el pdf, yo ya armé todo como quiero que se vea en la etiqueta, pero hay un elemento al principio que estaba en el codigo original, que si lo saco me rompe todo el pdf. Es extraño porque no veo la razon por la que no se lo pueda sacar. Es una simple imagen con una ruta a la imagen.

    Dejo el codigo:

    <?php
    
    use Dompdf\Dompdf as Dompdf;
    
    class IMPRESIONES_PDF {
        
    	public function __construct () {
    		add_action( 'init', array( $this, 'woo_comman_single_button' )); 
    	}
    	
    	
    	public function woo_comman_single_button(){
    	    
    		if (isset($_REQUEST['action']) && $_REQUEST['action']=='pedido') {
    			include_once(IMPRESIONES_PLUGINDIR.'dompdf-master/vendor/autoload.php');
    			$dompdf = new Dompdf(array('enable_remote' => true));
    			$dompdf->getOptions()->setChroot(ABSPATH);
    			ob_start(); 
    			$style_path = IMPRESIONES_PLUGINDIR.'css/print-style.css';
    			
    			?>
    			<!DOCTYPE html>
    			<html>
    			<head>
    				<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    				<style type="text/css">
    					<?php
    					ob_start();
    					if (file_exists($style_path)) {
    						include($style_path);
    					}
    					echo $style_path = ob_get_clean();
    					?>
    				</style>
    				<?php
    				echo $this->impresiones_css();
    				?>
    			</head>
    			<body>
    				<main>
        				<?php 
        			
    					$args = array(
    						'post_type' => 'product',
    						'posts_per_page' => -1
    					);
        			
        				$query1 = new WP_Query( $args );
        				while ( $query1->have_posts() ) {
        				   $query1->the_post();
        				   global $post;
        				   $this->impresiones_pedido_pdf($post->ID);
        				}
        				?>
    				</main>
    			</body>
    			</html>
    			<?php
    			$output = ob_get_clean();
    			$dompdf->set_option('defaultFont', 'Helvetica');
    			$dompdf->setPaper('A4');
    			$dompdf->loadHtml($output);
    			$dompdf->render();
    			// Output the generated PDF to Browser
    			$dompdf->stream("relatorio.pdf", array("Attachment" => false));
    			exit;
    		}
    		
                    public function impresiones_pedido_pdf($product_id){
    		$impresiones_show_hide = get_option( 'impresiones_show_hide' );
    		$product = wc_get_product( $product_id );
    		$attachment_id = $product->get_image_id();
    		$url = wp_get_attachment_image_url( $attachment_id,'mediaum' );
    		$uploads   = wp_upload_dir();
    		$url = str_replace( $uploads['baseurl'], $uploads['basedir'], $url );
    		$fullsize_path = $url;
    		
    		$url_img = get_home_url() . '/wp-content/uploads/2022/12/LOGO.png';
    	    $ID = '';
    		if (isset($_GET["id"])) {
    		    $ID = $_GET["id"];
    		}
    		$wp_pedido = new WC_Order($ID);  
    		$first_name = strtoupper($wp_pedido->get_billing_first_name());
            $last_name = strtoupper($wp_pedido->get_billing_last_name());
    	    $phone = strtoupper($wp_pedido->get_billing_phone());
    	    $address = strtoupper($wp_pedido->get_billing_address_1());
    	    $state = strtoupper($wp_pedido->get_billing_state());
    	    $city = strtoupper($wp_pedido->get_billing_city());
    	    $post_code = strtoupper($wp_pedido->get_billing_postcode());
    	
    		?>
    		
    		<div class="main">
    				
    			<img src="<?php echo $fullsize_path;?>" class="leftimage_img" widht="50px" height="50px">
    			
    			<div class="spacear"></div>
    			<section>
                                 //MI CODIGO HTML Y PHP PARA EL PDF
                            </section>
                <div class="spacea"></div>
    		</div>
    		<?php 
    	}

    La primera funcion arma el DOCTYPE con la etiqueta html, head, body; tambien inicia el dompdf; y tambien llama a la segunda funcion que es la que contiene el HTML con los datos. En esta primer funcion tambien se ve que usa un WP_Query que servirá para recorrer el total de productos que haya en la tienda, y por cada producto que haya llama a la segunda funcion para que arme el HTML con los datos del respectivo producto iterado. Esto es algo que tambien quiero sacar porque no me sirve, pero tambien me tira error al cargar el PDF.

    Aparte de eso, de por sí intentando sacar el » class=»leftimage_img» widht=»50px» height=»50px»> de la segunda funcion, ya con solo eso me rompe todo el pdf.

    Estos son los 2 problemas que necesito resolver:
    – Por un lado que no se itere, ya que no necesito varias etiquetas impresas de acuerdo a la cantidad de productos que tenga en la tienda.
    – Y por otro que no se vea ese elemento , ya que esa imagen del producto no necesito tampoco.

    Si logran saber por que pueden ser estos problemas se los agradeceria mucho. Saludos.

Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • Luis Alberto

    (@etilico1981)

    Hola @diegosanchez93

    Cuando te refieres a que quieres modificar el plugin, estás realizando modificaciones dentro de WordPress en la carpeta /plugins/nombre_del_plugin?

    Saludos
    Luis Alberto Jiménez Vara

    Iniciador del debate diegosanchez93

    (@diegosanchez93)

    @etilico1981 Hola Luis, exacto. En realidad hice una copia y cambie el nombre y demas cosas, para ir teniendo las dos comparaciones. Pero es un plugin sencillo, no tiene tantos archivos. Por eso, lo analizé y no veo que pueda estar mal, por que es que no me deja eliminar esa imagen.

    Luis Alberto

    (@etilico1981)

    Hola Diego,

    Antes de nada, comentar que si modificas un plugin dentro de su carpeta suceden 2 cosas:

    • Si sale una nueva actualización del plugin no podrás actualizar normalmente porque has modificado los archivos de este. En caso de que saliera una actualización de seguridad estarías poniendo en riesgo tu proyecto.
    • Si actualizas el plugin accidentalmente, es posible que pierdas los cambios que realizaste al sobreescribirse el archivo que has modificado.
    • Podrías hacer las actualizaciones a mano y volver a pasar las modificaciones del archivo, y si este cambia tendrías que readaptar las modificaciones que estás haciendo ahora.

    Teniendo esto en cuenta, la pregunta es ¿quieres seguir por este camino asumiendo el riesgo?

    Saludos

    Moderador jose64

    (@jose64)

    Hola @diegosanchez93.

    ¿Por qué no indicas el nombre y URL del plugin para poder revisarlo?

    Cuanta más información des más probabilidades tienes de que un voluntario te ayude, todo lo demás son elucubraciones.

Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • El debate ‘Como resover este problema de dompdf (creador de pdfs) dentro de un plugin’ está cerrado a nuevas respuestas.