2015-10-12 18 views
8

Sto creando i file .docx da un modello utilizzando PHPWord. Funziona bene ma ora voglio convertire il file generato in PDF.Genera PDF da .docx generato da PHPWord

Per prima cosa ho provato ad utilizzare tcpdf in combinazione con PHPWord

$wordPdf = \PhpOffice\PhpWord\IOFactory::load($filename.".docx"); 

\PhpOffice\PhpWord\Settings::setPdfRendererPath(dirname(__FILE__)."/../../Office/tcpdf"); 
\PhpOffice\PhpWord\Settings::setPdfRendererName('TCPDF'); 

$pdfWriter = \PhpOffice\PhpWord\IOFactory::createWriter($wordPdf , 'PDF'); 
if (file_exists($filename.".pdf")) unlink($filename.".pdf"); 
$pdfWriter->save($filename.".pdf"); 

ma quando provo a caricare il file per convertirlo in PDF ottengo la seguente eccezione durante il caricamento del file di

Fatal error: Uncaught exception 'BadMethodCallException' with message 'Cannot add PreserveText in Section.'

Dopo alcune ricerche ho scoperto che anche altri hanno questo bug (phpWord - Cannot add PreserveText in Section)

EDIT

After trying around some more I found out, that the Exception only occurs when I have some mail merge fields in my document. Once I removed them the Exception does not come up anymore, but the converted PDF files look horrible. All style information are gone and I can't use the result, so the need for an alternative stays.



Avevo pensato di usare un altro modo per generare il PDF, ma sono riuscito a trovare solo 4 modi:

  1. Uso OpenOffice - Impossible poiché non riesco a installare alcun software sul server. Anche andando nella direzione menzionata here non ha funzionato sia come il mio hoster (Strato) utilizza SunOS come il sistema operativo e questo ha bisogno di Linux
  2. Utilizzando phpdocx - non ho alcun budget per pagare e la demo non è possibile creare PDF
  3. Utilizzando PHPLiveDocx - Questo funziona, ma ha il limite di 250 documenti al giorno e 20 all'ora e devo convertire arround 300 documenti in una sola volta, forse anche più volte al giorno
  4. Utilizzando PHP-Digital-Format-Convert - l'uscita sembra meglio che con PHPWord e tcpdf, ma ancora non utilizzabile come immagini sono mancanti, e la maggior parte (non tutti!) Gli stili

C'è un quinto modo per generare il PDF? O c'è qualche soluzione per rendere i documenti PDF generati un aspetto gradevole?

+2

output PDF decente probabilmente richiederà di creare un secondo modello (hai già un modello di MSWord, Si procederà ora vuoi un modello PDF che porti il ​​tuo documento sorgente all'input che tcpdf vuole). –

+0

@Rob_M Sì, ho già pensato di creare un modello HTML in quanto ci sono librerie per convertire HTML in PDF, ma ho un modello molto diverso, quindi sarebbe molto lavoro creare e riscrivere il modo in cui riempio con il contenuto, quindi spero che ci sia un altro modo più semplice ... – Pinguin895

+0

Questo link potrebbe aiutare: https://github.com/PHPOffice/PHPWord/issues/311 –

risposta

0

Io non penso di essere corretto .. Si salva il documento come contenuto HTML

$objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'HTML');

Dopo quello di leggere il contenuto del file HTML e scrivere il contenuto in formato PDF con l'aiuto di mPDF o tcPdf o fpdf.

0

ho usato Gears/pdf per convertire il file docx generato da phpword in PDF:

$success = Gears\Pdf::convert(
      'file_path/file_name.docx', 
      'file_path/file_name.pdf');