Converti docx in PDF


41

Sto cercando di convertire i file docx in pdf sul mio server Ubuntu utilizzando la riga di comando, ma nessuno dei convertitori che ho provato finora sembra convertire correttamente i file di Word 2007/2010/2013.

Apparentemente i convertitori online possono gestirlo senza problemi, ma i servizi Web non sono un'opzione perché i file contengono dati sensibili. Per i test uso questo file Word 2007 perché contiene alcuni elementi importanti (formule, grafica vettoriale, immagini, elenchi, ecc.). Ho testato i seguenti strumenti (in parte da questo post ):

lowriter (LibreOffice Writer) - output errato (il cerchio dovrebbe essere nell'ultima pagina, non nella prima)

inserisci qui la descrizione dell'immagine

unoconv- lo stesso di LibreOffice poiché non utilizza il proprio convertitore. La conversione prima in odt e poi in pdf crea un disordine del file.

abiword --to=pdf filename.doc - errato e incompleto (mancano molti elementi):

inserisci qui la descrizione dell'immagine

OpenOffice Writer - stesso risultato di abiword

wvPDF - arresto anomalo con il seguente messaggio di errore:

~ $ wvPDF 2007_Office_DocEncryption.docx test.pdf

Directory corrente: / home / webmt / dev / test /

Qualche problema nell'esecuzione del lattice.

Controlla errori in test.log

Proseguendo ...

Conversione in dvi fallita

Esiste un modo per convertire correttamente i file docx in PDF su Linux? Mi aiuterebbe anche se sapessi che funziona con qualcuno dei programmi che ho già menzionato. Inizierò una taglia non appena SE me lo permette.

ps sto usando Ubuntu server 12.04


Conclusione :

Ho dovuto concludere che per quanto mi riguarda, per ora, non esiste uno strumento affidabile che funzionerà con i nuovi formati MS Word e tutti i suoi elementi su Ubuntu e creerà una copia uno-a-uno dei file docx. Nessuno degli strumenti che ho testato è riuscito a convertire correttamente il file di esempio. Dal momento che dovrò affrontare tipi di versioni / contenuti di documenti molto diversi e la qualità dell'output ha una priorità assoluta, finirò per eseguire le conversioni mediante macro VB in Word su un server Windows collegato al mio Linux.

Imposterò il post ottenendo i migliori risultati come risposta accettata. Tuttavia, la taglia era intesa per una soluzione con una conversione assolutamente corretta. Grazie ancora a tutti.


3
hai provato il lattice?
Braiam,

@ScepticalJule, Sì, c'è un problema alla fine. Ho appena guardato la prima pagina.

1
@Braiam Potresti lasciare un link per la conversione con il lattice?
Scettico Jule il


2
@ScepticalJule Penso che Braiam volesse dire che dovresti provare a scrivere il tuo documento in lattice immediatamente. Le conversioni da docx a latex sono molto più dolorose delle conversioni da docx a pdf. Potresti provare a fare la conversione da docx a doc e quindi da doc a pdf. Ma dovresti trovare uno strumento indipendente LO per farlo. Fammi sapere se posso aiutarti in qualsiasi altro modo e se la mia risposta ti ha aiutato.
don.joey,

Risposte:


58

Questa risposta supera tutti i test, ma il diagramma di flusso è uno nel documento di test.

sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx

Perché questo è meglio di altri metodi suggeriti finora?

Ho testato gli altri metodi suggeriti finora (soprattutto oowritere ebook-convert), ma superano meno test di questo metodo. Il ebook-convertmetodo rimuove i margini e una parte dei testi dal documento.

Questo metodo produce anche risultati migliori di un convertitore professionale come rainbowpdf .

Ho anche provato a convertirlo in HTML, ma il disegno con il quadrato nel cerchio e il diagramma di flusso non sono corretti.

Perché il test del diagramma di flusso fallisce?

Sembra che libreoffice e unoconv abbiano dei problemi con il rendering corretto del diagramma di flusso che si trova nel file .docx. Ciò è probabilmente dovuto al fatto che è stato realizzato utilizzando l'arte intelligente in Microsoft Office. Quello è il problema. Questo è un bug anche discusso su questo thread . Le informazioni testuali e visive sono presenti nel pdf risultante dal metodo sopra come puoi vedere (ho dovuto selezionare il testo, però).

Il diagramma di flusso che non viene visualizzato completamente come previsto.

Il colore del carattere, ad esempio, non viene letto correttamente e alcune righe sono troppo lunghe. Non sono a conoscenza di alcuna soluzione linux in grado di visualizzare correttamente l'arte intelligente. :(

Questo è anche il motivo per cui tutte le printsoluzioni pubblicate in questa pagina non ti soddisfano.

In breve

In breve, quello che stai facendo è davvero difficile e al momento non ci sono soluzioni che ti possano soddisfare pienamente. Il tallone d'Achille delle conversioni di docx2pdf è l'arte intelligente. Se riesci a vivere senza questo o se riesci a trovare un modo per individuare l'arte intelligente e convertirla in qualche modo in un'immagine, puoi raggiungere il tuo obiettivo.

Opzione 1. Forzare gli utenti a gestire il problema

Questa è una soluzione molto elegante. I tuoi creatori di contenuti potrebbero salvare la loro arte intelligente come jpg come descritto nelle pagine della guida di Office e quindi la conversione sarebbe possibile sul tuo server.

Opzione 2. Risolvi il problema

Se i diagrammi di flusso sono spesso molto simili e in base alla tua capacità di sviluppatore, puoi provare a convertire l'arte intelligente separatamente. Potresti, estrarre il file drawing1.xml dal cluster di documenti .docx e quindi utilizzare l'elaborazione del linguaggio naturale e alcuni hack pazzi per ricostruire un'arte intelligente. Ad esempio, dovresti pasticciare con questo tipo di xml:

<dsp:txBody>
<a:bodyPr spcFirstLastPara="0" vert="horz" wrap="square" lIns="8255" tIns="8255" rIns="8255" bIns="8255" numCol="1" spcCol="1270" anchor="ctr" anchorCtr="0">
<a:noAutofit/>
</a:bodyPr>
<a:lstStyle/>
<a:p>
<a:pPr lvl="0" algn="ctr" defTabSz="577850">
<a:lnSpc><a:spcPct val="90000"/>
</a:lnSpc>
<a:spcBef>
<a:spcPct val="0"/>
</a:spcBef>
<a:spcAft>
<a:spcPct val="35000"/>
</a:spcAft>
</a:pPr>
<a:r>
<a:rPr lang="en-US" sz="1300" b="1" kern="1200"/>
<a:t>All three sides are different lengths
</a:t>
</a:r>
</a:p>
</dsp:txBody>

O come soluzione minima devi almeno estrarre il testo ( <a:t>?) Dal file e salvarlo in un modo più semplice. Oppure, se i diagrammi di flusso dei tuoi PDF sono tutti uguali, puoi scrivere uno script per modificare il colore del testo e la lunghezza della linea nel file XML stesso. Quindi potresti eseguire doc2pdfe avresti un file che essenzialmente aveva tutte le informazioni giuste, ma forse non la formattazione. Nel caso dei diagrammi di flusso, probabilmente vorrai anche includere parte della formattazione, poiché la formattazione fa parte delle informazioni.

Opzione 3. Utilizzare un servizio di terze parti

Ho fatto qualche altra ricerca negli ultimi giorni e ho trovato un servizio che fa perfettamente la conversione: zamzar . Zamzar ti consente di caricare un file docx e di inviarti un link via e-mail. Hanno anche un servizio (a pagamento?) In cui è possibile inviare qualsiasi file a pdf@zamzar.com e quindi recuperare il file convertito nella posta in arrivo. Potresti facilmente creare un sistema attorno a questo in cui inviare automaticamente il file e analizzarlo dall'e-mail. Questo non è tanto lavoro ed il risultato finale è il migliore.

Gli appunti

  • Se qualcuno ha altri servizi che fanno lo stesso, sentiti libero di modificarli.
  • Ho inviato il supporto zamzar per chiedere se hanno un API. Sarebbe ancora più facile.
  • Forse l' apose per .NET e Java potrebbe essere d'aiuto? O docx4java come in questo post SO molto correlato .
  • Un'altra opzione è quella di esaminare il convertitore odf che sembra datato e dipende da openoffice piuttosto che da libreoffice.
  • Posso ora confermare che anche il jodconverter java soffre non riesce la conversione del diagramma di flusso.

Mi sono davvero preso il tempo di testare i diversi metodi proposti in questa pagina. Si prega di sostenere eventuali commenti con test effettivi.


1
Ho ricevuto notizie da zamzar: "Al momento abbiamo un'API che speriamo di lanciare in beta nei prossimi due mesi - potremmo aggiungerti alla versione beta se questo fosse interessante?" Hanno anche detto che il loro sistema di conversione è qualcosa che hanno sviluppato internamente.
don.joey,

@jasonplutext Concordo con i revisori che la tua modifica non è stata utile. Come autore di plutext (immagino?) Ti suggerirei di aggiungere una tua risposta con una dichiarazione di non responsabilità attestante la tua affiliazione. Grazie.
don.joey,

Qualche aggiornamento negli ultimi due anni?
becko,

@becko Non l'ho seguito. Forse impostare una taglia per qualcun altro?
don.joey,

Nota dal futuro: l'utilizzo corretto nelle versioni recenti di lowriterè ora lowriter --convert-to pdf input_file.docx. L'uso --pt pdffallirà silenziosamente.
ACK_stoverflow

6

Questa è una soluzione da riga di comando che funziona in modo decente --- ma utilizza software proprietario.

Penso che il problema di base sia che i formati di Microsoft Word sono completamente comprensibili solo per Microsoft Word (anche lì, ci sono differenze tra le versioni --- ci sono file di Word del passato che si aprono in modo errato formattato nelle versioni più recenti). Tutte le altre soluzioni sono approssimazioni e hack, quindi funzioneranno o meno a seconda del file.

Quindi, per essere sicuri, devi elaborare i tuoi file .docx con un'installazione di Microsoft Word (e sì, penso che sia la loro opzione ed è corretta. Se non vuoi usare Word, non usarla --- Vado con LaTeX per il mio lavoro, ma è difficile convincere il resto del mondo intorno ...).

Sto usando Crossover da secoli per eseguire Microsoft Office sul mio desktop Linux (1), trovandolo abbastanza utile. Forse funziona anche con il vino --- mai provato.

Faccio la conversione usando questa configurazione:

1) Ho installato Crossover

2) Ho la mia versione di Microsoft Office installata in Crossover

3) In Microsoft Word, disabilitare la "stampa in background"

4) Ho la cups-pdfstampante installata e selezionata come stampante predefinita.

5) Per eseguire la conversione, esegui (suggerimenti qui ):

~/cxoffice/bin/wine --cx-app winword.exe respondus-docx-sample-file.docx /q /n /mFilePrintDefault /mFileExit

6) Il file convertito verrà visualizzato nella ~/PDF/directory.

Il documento risulta quasi perfettamente (c'è qualche disallineamento nella risposta n. 2, che viene mostrato in Office Word 2007 quando si esegue Crossover --- Non so se sia correlato alla mia versione di Windows).

pagina 1-2

pagine 3-4

Ora, il problema è che verrà visualizzata l'interfaccia della parola grafica --- Non so come renderla "senza testa". Le opzioni della riga di comando per Word non hanno aiutato ...

(1) Non sono in alcun modo collegato a Codeveawers --- solo un utente felice.


4

Ho anche avuto questo problema in passato, non ho dovuto usarlo di recente, quindi non so se mi sta ancora colpendo.

Per quanto riguarda la risposta alla domanda:

Questa domanda: come convertire in batch .doc o .docx in .pdf spiega nei commenti perché la conversione con lowriterpotrebbe non riuscire:

Fai attenzione a usare il carattere "spazio" dalla riga di comando ... Quando arrivi al personaggio spazio premi semplicemente "tab";) - Pitto 16 novembre 12 alle 13:11

La risposta a questa domanda potrebbe eventualmente aiutare:

Come posso convertire un file ODT in un PDF?

Scapperesti libreoffice --headless --convert-to pdf *.odt. Puoi ottenere maggiori informazioni su libreoffice con il comando man libreofficese hai bisogno di aiuto per capire o modificare il comando affinché funzioni.

Tuttavia, non puoi avere LibreOffice aperto al momento, come da questo bug: https://bugs.freedesktop.org/show_bug.cgi?id=37531


Questa domanda è anche relativa a Ubuntu, anche se è su SuperUser: https://superuser.com/questions/156189/how-to-convert-word-doc-to-pdf-in-linux

La prima risposta ha due opzioni, una che utilizza CUPS e crea una stampante PDF, l'altra che utilizza LaTex, anche se hai detto che LaTex non funzionava.

Per quanto riguarda la conversione in PDF tramite CUPS PDF, verrai eseguito sudo apt-get install cups-pdfseguito da oowriter -pt pdf your_word_file.doc(x). Questo potrebbe aiutarti con il tuo problema con l'owriter.

Questo è probabilmente un problema con il fatto che stai cercando di convertire in PDF da DOC / DOCX, quando la maggior parte degli strumenti usa ODT, poiché sono correlati a LibreOffice / OpenOffice / AbiWord. Pertanto, non riescono a tentare di convertirlo dal formato DOCX di Microsofts o nella conversione in ODT.

Esistono diversi bug con una conversione da .docx w. Word Art (la versione è inclusa):

Questo è dal forum di LibreOffice per quanto riguarda la conversione da .doc e in qualche modo .docx: http://en.libreofficeforum.org/node/5096 . È da gennaio del 2013, quindi dovrebbe applicarsi in qualche modo.

Al di là di tutto ciò, non lo so davvero. Spero che tu risolva il tuo problema!


Siamo spiacenti ma nessuno degli strumenti suggeriti ha potuto effettuare una conversione pulita.
Scettico Jule,

2

Se hai installato Libreoffice, puoi provare a convertirlo usando quello. Premi Ctrl+ Alt+ Tsulla tastiera per aprire Terminale. Quando si apre, esegui i seguenti comandi:

libreoffice --headless -convert-to pdf <file_name>.docx -outdir output/path/for/pdf

Un'altra opzione è installare Cups PDF .

Per fare ciò basta premere Ctrl+ Alt+ Tsulla tastiera per aprire Terminale. Quando si apre, esegui i seguenti comandi:

sudo apt-get install cups-pdf

Quindi crea una nuova stampante, impostala come stampante di file PDF e chiamala come preferisci, purché tu conosca il nome, quindi esegui:

oowriter -pt pdf your_word_file.docx

E il tuo file PDF sarà in ~/PDF.


1
Non ha avuto alcun successo con quelli.
Scettico Jule,

Questo potrebbe rispondere al perché.
Scettico Jule,

Apprezzo la tua risposta, ha molto senso, ma sono sorpreso che la stampa non abbia funzionato, dal momento che piace stampare su carta ... :)
Mitch

Il problema chiave è che LibreOffice non è nemmeno in grado di aprire e visualizzare correttamente il documento. Di conseguenza, anche l'output è errato. Ha funzionato sul tuo Linux?
Scettico Jule,

Buono a sapersi. Uso Office solo per i documenti di base, non è emersa la necessità di qualcosa di più complesso, ma quando lo farà, lo farò e farò riferimento a questo. Grazie per l'ottima domanda, e lo aggiungerò sicuramente come preferito per riferimento futuro. Terrò questa risposta e commenti come riferimento per gli altri utenti.
Mitch

2

Ecco l'amara verità: le soluzioni di Office per Linux sono fallimenti totali! Sono stato un utente GNU / Linux a tempo pieno per molti anni e ho costantemente cercato e provato diverse soluzioni per ufficio, dal vecchio Open-Office, al successivo Libre-Office, Abi-Word, ecc ... non sono riusciti ad aiutarmi a fare il mio lavoro d'ufficio. Peggio ancora quando si parla di lingue non latine (lingue da destra a sinistra come persiano, arabo, ecc.). L'utente deve combattere con questi software per svolgere il proprio lavoro! E la compatibilità con Microsoft Office non è lì. Posso parlare ore e ore di quanto ho provato e tutti mi hanno deluso, ma non è questo il punto di questa domanda.

Ho anche provato a installare ed eseguire Microsoft Office usando WINE, e in qualche modo ha avuto successo, ma non ha funzionato bene e si è principalmente schiantato quando ho provato ad aprire i miei file di Office.

LaTeX va bene, ma non è una soluzione per ufficio. LaTeX è per l'impostazione del tipo, ed è più simile allo strumento di un professionista, e non ci sono fogli di calcolo, né presentazioni.

Quindi qual è la soluzione?

Questa non è una soluzione da riga di comando. L'unica soluzione che mi è venuta in mente in tutti questi anni, per tenermi dentro il mio sistema operativo GNU / Linux e anche per fare i miei lavori d'ufficio, è usare un'installazione minima di Microsoft Windows in una macchina virtuale (come VirtualBox) e installare una tuta di Microsoft Office.

inserisci qui la descrizione dell'immagine

Potrebbe non sembrare carino, ma è l'unica soluzione che funziona alla perfezione e mi salva dal combattimento con le soluzioni per i cattivi uffici nel mio prezioso tempo. All'inizio, io stesso pensavo che questa non fosse una buona soluzione, ma dopo aver fallito con tutti gli altri e aver fatto queste cose VM per più di 2 anni, ne sono davvero felice :)

================================================== ==============================

NOTA-1: Non pubblicizzo prodotti Microsoft! Sto solo cercando di aiutare a risolvere il problema e andare avanti con la vita.

NOTA-2: come sottolineato sopra, questa NON è una soluzione da riga di comando. Quindi perché pubblicare la risposta? Perché è un'opzione TESTATA E BENESSERE! Se non è disponibile alcuna soluzione da riga di comando WORKING (che sospetto fortemente sia il caso), avere un'opzione ALTERNATIVA è meglio di NO.


1
Perché usare solo MS Word wineinvece di una macchina virtuale?
Totti,

1
Come ho già detto, la mia esperienza con l'installazione e l'uso di MS-Office WINEnon è andata bene. Il programma non ha funzionato come su Windows (ha mostrato un comportamento errato) e si è anche schiantato molto!
Seyed Mohammad

3
Nessun altro ha ancora effettuato il downgrade , ma la domanda richiede esplicitamente una soluzione da riga di comando . Questo non è inutile a causa della SM, è inutile perché ignora completamente la domanda.
djeikyb,

3
A quanto pare, si noti che l'OP sta esplicitamente chiedendo una soluzione a riga di comando che funzionerà sul suo server Ubuntu (che probabilmente non ha nemmeno una GUI!). La tua risposta non è male ma non è pertinente in questo caso.
Glutanimato

2
@ScepticalJule Ridiculous. Hai esplicitamente messo una taglia su una soluzione a riga di comando. Quindi si seleziona una risposta che non è nemmeno una risposta alla domanda. Hai anche studiato le altre risposte. Compresi questo e il mio?
don.joey,

1

Ecco un paio di applicazioni che puoi provare e vedere se funzionano FF Multi Converter o puoi provare Kingsoft Office .


Installato FF Multi Converter, eseguito il comando ... non è successo nulla. Kingsoft ha una buona interfaccia grafica, ma non è stato possibile aprire / mostrare correttamente il file (mancavano le formule anche dopo aver installato i caratteri richiesti. Mancavano anche le lettere nel cerchio).
Scettico Jule,

0

Installa Calibre da Software Center o Synaptic e imposta l'output predefinito su PDF.

Da un prompt della shell, eseguire

Converti ebook nomefilefile .docx .pdf -h


Questo taglio del testo in qualche modo.
don.joey,

Crash with ValueError: No plugin to handle input format: docx. Google non ha aiutato su questo, quindi segnalerò un bug.
Scettico Jule,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.