Convertire un file DOCX in un file PDF con PHP


Buongiorno a tutti,

oggi un articoletto che riguarda del codice PHP.

Avevo necessità, qualche giorno fa, di dover convertire un file Word (.docx) in un file PDF (.pdf) utilizzando uno script integrato in un mio programmino PHP.
Girando per la rete però, mi sono accorto che non era poi così semplice, in quanto alcune diverse librerie disponibili che fanno questo sono tutte a pagamento oppure fanno parte di un framework integrato di cui non avevo assolutamente necessità di installare.

Premetto che, mi affido ad una libreria molto semplice(che consiglio) per creare file Word compilati direttamente da codice PHP, che è PHPWord. Quindi, la creazione del file PDF, è il passo successivo e finale di una creazione di un file Word utilizzando un modello pre-compilato (Template) a cui il codice PHP penserà di effettuare delle sostituzioni a dei marcatori già definiti.

Dunque, per fare una cosa semplice e sopratutto gratuita, mi sono rivolto al sito PHPLiveDocx, che mette a disposizione un servizio (Web Service) per la conversione automatica di un file Word ad un file PDF.

NB: Tale procedura è valida solo per installazioni di PHP dalla versione 5 in su.

Vediamo insieme i passi principali per far funzionare il tutto:

  1. 1. Per prima cosa creiamo un account su PHPLiveDocx (è gratis e veloce).

  2. 2. Dopodichè, lavoriamo sul codice necessario per produrre in output il file .docx e salviamo in una variabile PHP il percorso relativo. (ex. $file_docx = “files/prova.docx”).

  3. 3. Ora andiamo ad interrogare il Web Service di PHPLiveDocx per avere poi come risultato il nostro PDF:
// Impostiamo il livello di errori da visualizzare
error_reporting (E_ALL|E_STRICT);

// Disattiviamo la cache WSDL
ini_set ('soap.wsdl_cache_enabled', 0);

// definiamo le credenziali scelte al momento della registrazione
define ('USERNAME', 'nomeutentescelto');
define ('PASSWORD', 'passwordscelta');

// SOAP WSDL endpoint
define ('ENDPOINT', 'https://api.livedocx.com/1.2/mailmerge.asmx?WSDL');

// Definiamo il timezone locale
date_default_timezone_set('Europe/Rome');

// Instanziamo l'oggetto SOAP e gli passiamo le credenziali sotto forma di array
$soap = new SoapClient(ENDPOINT);
$soap->LogIn(
array(
'username' => USERNAME,
'password' => PASSWORD
)
);

// Upload del file DOCX da convertire
$file_docx = 'files/prova.docx';
$data = file_get_contents($file_docx);
$soap->SetLocalTemplate(
array(
'template' => base64_encode($data),
'format' => 'docx'
  )
);

//Impostiamo il formato di output che vogliamo (pdf in questo caso) 
$result = $soap->RetrieveDocument(
array(
'format' => 'pdf'
  )
);
$data = $result->RetrieveDocumentResult;

//Impostazione e salvataggio del file PDF
$file_PDF = 'files/prova.pdf';
file_put_contents($file_PDF, base64_decode($data));

// Logout
$soap->LogOut();
unset($soap);
  1. 4.  Ora troveremo dentro ‘files/prova.pdf’ il documento convertito dal mio file word precedente (files/prova.docx).

 

Il codice postato è solo un esempio semplice e banale per risolvere velocemente la conversione. Esistono poi vari modi per personalizzare e migliorare il tutto, che sono tranquillamente visibili su questa pagina.

Spero che questo articolo vi possa essere d’aiuto come lo è stato per me. Per qualsiasi dubbio non esitate a scrivermi.

Alla prossima ^_^ 

Michele (admin)

About Michele (admin)

Da sempre appassionato di Informatica e Tecnologia, mi piace condividere sul Web trucchi e consigli su tutto quello che gira intorno a questi due mondi, in special modo quello gravita intorno alla "Mela" ^_^

Leave a Comment