2012-02-27 4 views
12

Lavoro con TCPDF da alcuni mesi; spento e acceso. Ha funzionato abbastanza bene per la maggior parte dei miei modelli HTML, ma ho sempre avuto problemi nel collocare le immagini nei PDF. Le immagini sono di solito collocate nel corpo, non nell'intestazione. Il mio posizionamento è o una posizione fissa dall'angolo in alto a sinistra o è relativa alla parte inferiore del documento. In entrambi i casi, ho avuto problemi. Quando il testo cambia nell'HTML, devo riposizionare l'immagine. Più tabelle di colonne possono rendere le cose ancora più difficili. Nota: "classe pdf estende TCPDF".TCPDF: Come posso inserire un'immagine in un blocco 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'); 

Qualcuno conosce un modo infallibile di collocare un'immagine in un PDF generato da HTML. Ho pensato di dividere l'HTML in due parti, ma non sono sicuro che funzionerebbe bene.

risposta

20

Sto usando il tag html img e funziona bene.

$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

Purtroppo, sto aggiungendo un'immagine sensibile al contenuto (una firma) al documento PDF. Non riesco a far entrare l'immagine nel documento con un percorso. – jjwdesign

+0

anche se l'immagine è generata al volo, è possibile includere in pdf. Ho un pdf in cui alcune immagini sono sempre presenti e alcune appena generate prima della creazione del pdf e vengono eliminate una volta generato il pdf. Non ti capisco - "Non riesco a far entrare l'immagine nel documento con un percorso". dove esiste l'immagine allora? – henna

+3

Non può essere un percorso di riferimento basato sul web. Sto tirando l'immagine da un percorso di file locale. Relativo alla parte inferiore della scrittura html precedente sembra essere il migliore per la mia situazione. – jjwdesign

7

Scusa, so che hai una risposta accettata. Tuttavia, non sembra che risponda effettivamente alla tua domanda, per quanto riguarda un'immagine che è NON a livello web.

Avete considerato l'utilizzo di file_get_contents(); e il semplice rendering della stringa base_64. In questo modo puoi usare un'immagine da qualsiasi livello, senza preoccuparti che sia pubblicamente accessibile.

es:

$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'>"); 

Oppure, senza fare affidamento sul parser HTML. Quale da esperienza rallenta il rendering del PDF risultante di gran lunga il più possibile:

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

nice, grazie, questa era la risposta che stavo cercando – ling

+0

o riscrivilo su 'SplFileObject'? Quindi non c'è bisogno di 'explode()' solo a causa dell'estensione del file. – Roland

+0

Qui, il mio PDF contiene un tag ' quindi, non posso fare la seconda opzione. Tuttavia, non voglio che TCPDF appaia nelle statistiche web ed è comunque stupido. – Roland