come utilizzare PHP per includere un'immagine in un file word?
-
27-09-2019 - |
Domanda
Qualcuno mi ha chiesto di fare un app in php che genererà un file .doc con un'immagine e un paio di tabelle in esso. Il mio primo approccio è stato:
<?php
function data_uri($file, $mime)
{
$contents = file_get_contents($file);
$base64 = base64_encode($contents);
return ('data:' . $mime . ';base64,' . $base64);
}
$file = 'new.doc';
$fh = fopen($file,'w');
$uri = data_uri('pic.png','image/png');
fwrite($fh,'<table border="1"><tr><td><b>something</b></td><td>something else</td></tr><tr><td></td><td></td></tr></table>
<br/><img src="'.$uri.'" alt="some text" />
<br/>
<table border="1"><tr><td><b>ceva</b></td><td>altceva</td></tr><tr><td></td><td></td></tr></table>');
fclose($fh);
?>
Questa tecnica utilizza i dati URI di incorporare un'immagine.
Questo genererà un file HTML che verranno resi ok nei browser web, ma l'immagine è mancante in Microsoft Office Word, almeno nella configurazione standard. Poi, mentre la modifica del file con Word, ho sostituire l'immagine con un'immagine da file e Microsoft Word cambiato il contenuto del file in Open XML e ha aggiunto una cartella, new_files dove ha messo l'immagine importata (che era un .png ), una versione .gif dell'immagine e un file XML:
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
<o:MainFile HRef="../new.doc" />
<o:File HRef="image001.jpg" />
<o:File HRef="filelist.xml" />
</xml>
Ora, questo non è abbastanza buono sia dal momento che voglio che questo sia tutto conservato in un unico file con estensione doc. C'è un modo per incorporare un'immagine in un file .doc OpenXML-formattato?
Soluzione
http://www.tkachenko.com/blog/archives/000106 .html
<w:pict>
<v:shapetype id="_x0000_t75" ...>
... VML shape template definition ...
</v:shapetype>
<w:binData w:name="wordml://02000001.jpg">
... Base64 encoded image goes here ...
</w:binData>
<v:shape id="_x0000_i1025" type="#_x0000_t75"
style="width:212.4pt;height:159pt">
<v:imagedata src="wordml://02000001.jpg"
o:title="Image title"/>
</v:shape>
</w:pict>
Altri suggerimenti
PHPWord progetto di manipolare MS Word dall'interno PHP.
PHPWord è una libreria scritta in PHP che creano documenti word. No Windows sistema operativo è necessario per l'uso perché il risultato sono i file docx (Office Open XML) che può essere aperto da tutti i principali software per ufficio.
PHPWord può scrivere loro http://phpword.codeplex.com/ (nota: la sua ancora in beta. ho usato PHpExcel dalla stessa persona molto ... mai provato la versione Word).
Date un'occhiata alla biblioteca phpdocx per la generazione di file .docx reali piuttosto che i file html con estensione .doc
PS l'estensione dovrebbe essere rigorosamente .docx piuttosto che .doc per i file Open XML di Word 2007
OpenTBS può creare DOCX (e altri file OpenXML) documenti dinamici in PHP utilizzando la tecnica della modelli.
Non ci sono file temporanei necessari, senza linee di comando, il tutto in PHP.
E 'possibile aggiungere o immagini di eliminazione. Il documento creato può essere prodotto come download HTML, un file salvato sul server, o come contenuto binario in PHP.
Si può anche unire i file OpenDocument (ODT, ODS, ODF, ...)
Se il testo ricco è ok prova a PhpRtf .
I userebbe PHPExcel. Si può lavorare con OpenXML troppo.
Ecco il link: http://phpexcel.codeplex.com/