2012-02-27 131 views
12

He estado trabajando con TCPDF durante algunos meses; de vez en cuando. Funcionó bastante bien para la mayoría de mis plantillas HTML, pero siempre tuve problemas para colocar imágenes en los PDF. Las imágenes generalmente se colocan en el cuerpo, no en el encabezado. Mi ubicación es una posición fija desde la esquina superior izquierda o está relacionada con la parte inferior del documento. En cualquier caso, he tenido problemas. Cuando el texto cambia en el HTML, tengo que reposicionar la imagen. Múltiples tablas de columnas pueden hacer las cosas aún más difíciles. Nota: "clase pdf extiende TCPDF".TCPDF: ¿Cómo puedo colocar una imagen en un bloque de HTML?

$this->pdf->AddPage(); 
$this->pdf->writeHTML($pdf_html); 
$cur_page = $this->pdf->getPage(); 
$x_pos = $this->pdf->GetX(); 
$y_pos = $this->pdf->GetY(); 
// Place image relative to end of HTML 
$this->pdf->SetXY($x_pos, $y_pos - 54); 
$this->pdf->Image('myimage.png'); 

¿Alguien sabe una forma infalible de colocar una imagen en un PDF que se genera desde HTML. Pensé en dividir el HTML en dos partes, pero no estoy seguro si funcionaría bien.

Respuesta

20

Estoy usando la etiqueta html img y está funcionando bien.

$toolcopy = ' my content <br>'; 
$toolcopy .= '<img src="/images/logo.jpg" width="50" height="50">'; 
$toolcopy .= '<br> other content'; 

$pdf->writeHTML($toolcopy, true, 0, true, 0); 
+0

Lamentablemente, estoy agregando una imagen sensible al contenido (una firma) al documento PDF. No puedo hacer que la imagen aparezca en el documento con una ruta. – jjwdesign

+0

incluso si la imagen se genera sobre la marcha, puede incluirla en pdf. Tengo un pdf en el que algunas imágenes están siempre allí y otras simplemente se generan justo antes de que se cree el pdf y se eliminan una vez que se genera el pdf. No te entiendo: "No puedo hacer que la imagen aparezca en el documento con una ruta". donde la imagen existe entonces? – henna

+3

No puede ser una ruta de referencia basada en web. Estoy sacando la imagen de una ruta de archivo local. Relativo a la parte inferior de la escritura html anterior parece ser el mejor para mi situación. – jjwdesign

7

Lo siento, sé que tienes una respuesta aceptada. Sin embargo, no parece responder realmente a su pregunta, con respecto a una imagen que es NO a nivel de la web.

¿Ha considerado usar file_get_contents(); y simplemente renderizando la cadena base_64. De esta forma puede usar una imagen desde cualquier nivel, sin preocuparse de que sea de acceso público.

por ejemplo:

$imageLocation = '/var/www/html/image.png'; 
$ext = end(explode(".", $imageLocation); 
$image = base64_encode(file_get_contents($imageLocation)); 
$pdf->writeHTML("<img src='data:image/$ext;base64,$image'>"); 

O, sin depender del analizador HTML. Que de la experiencia ralentiza mucho la renderización del PDF resultante hasta mucho que podría usar:

$image = file_get_contents('/var/www/html/image.png'); 
$pdf->Image('@'.$image); 
+0

nice, gracias, esa fue la respuesta que estaba buscando – ling

+0

¿O reescribo esto a 'SplFileObject'? Entonces no hay necesidad de 'explotar()' solo por la extensión del archivo. – Roland

+0

Aquí, mi PDF contiene una etiqueta '', así que no puedo hacer la segunda opción. Aún así, no quiero que TCPDF aparezca en las estadísticas web y de todos modos es una tontería. – Roland

Cuestiones relacionadas