Convertir docx en PDF

41

J'essaie de convertir des fichiers docx en pdf sur mon serveur Ubuntu à l'aide de la ligne de commande, mais aucun des convertisseurs que j'ai essayés jusqu'à présent ne semble convertir correctement les fichiers Word 2007/2010/2013.

Apparemment, les convertisseurs en ligne peuvent le gérer sans problème, mais les services Web ne sont pas une option, car les fichiers contiennent des données sensibles. Pour les tests, j'utilise ce fichier Word 2007 car il contient des éléments importants (formules, graphiques vectoriels, images, listes, etc.). J'ai testé les outils suivants (en partie de ce post ):

lowriter (LibreOffice Writer) - sortie incorrecte (le cercle est censé être sur la dernière page, pas la première)

entrez la description de l'image ici

unoconv- identique à LibreOffice puisqu'il n'utilise pas son propre convertisseur. La conversion en odt en premier lieu, puis en pdf, désorganise complètement le fichier.

abiword --to=pdf filename.doc - incorrect et incomplet (de nombreux éléments sont manquants):

entrez la description de l'image ici

OpenOffice Writer - même résultat que pour abiword

wvPDF - crash avec le message d'erreur suivant:

~ $ wvPDF 2007_Office_DocEncryption.docx test.pdf

Répertoire actuel: / home / webmt / dev / test /

Un problème avec le latex.

Vérifier les erreurs dans test.log

En continuant ...

La conversion en dvi a échoué

Existe-t-il un moyen de convertir correctement les fichiers docx en PDF sur Linux? Cela m'aiderait aussi si je savais que cela fonctionne pour quelqu'un avec l'un des programmes que j'ai déjà mentionnés. Je commencerai une prime dès que SE me le permettra.

ps j'utilise le serveur Ubuntu 12.04


Conclusion :

Je devais en conclure que pour moi, pour l’instant, il n’existait aucun outil fiable qui fonctionnerait avec les nouveaux formats MS Word et tous ses types d’éléments sur Ubuntu et créerait une copie un-à-un de fichiers docx. Aucun des outils que j'ai testés ne pouvait convertir le fichier exemple correctement. Étant donné que je serai confronté à des types / versions de documents très différents et que la qualité de sortie est l’une des plus hautes priorités, je vais finir par effectuer les conversions au moyen de macros VB dans Word sur un serveur Windows connecté à mon Linux.

Je définirai la publication pour obtenir les meilleurs résultats en tant que réponse acceptée. Cependant, la prime était destinée à une solution avec une conversion absolument correcte. Merci à tous, encore.

Jule sceptique
la source
3
a essayé de latex?
Braiam
@ ScepticalJule, Oui, il y a un problème à la fin. Je viens de regarder la première page.
1
@Braiam Pourriez-vous supprimer un lien vers la conversion au latex?
Sceptique Jule
2
@ ScepticalJule Je pense que Braiam voulait dire que vous devriez essayer d'écrire votre document en latex immédiatement. Les conversions de docx en latex sont beaucoup plus pénibles que les conversions de docx en pdf. Vous pouvez essayer de convertir docx en doc, puis de doc en pdf. Mais il faudrait trouver un outil indépendant pour LO pour le faire. Faites-moi savoir si je peux vous aider autrement et si ma réponse vous a aidé.
don.joey

Réponses:

58

Cette réponse réussit tous les tests, mais l'organigramme en est un dans votre document de test.

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

Pourquoi est-ce mieux que d'autres méthodes suggérées jusqu'à présent?

J'ai testé les autres méthodes suggérées jusqu'à présent (en particulier oowriteret ebook-convert), mais elles passent moins de tests que cette méthode. La ebook-convertméthode supprime les marges et une partie des textes du document.

Cette méthode donne même de meilleurs résultats qu'un convertisseur professionnel tel que rainbowpdf .

J'ai également essayé de le convertir en HTML, mais le dessin avec le carré dans le cercle et l'organigramme est incorrect.

Pourquoi le test de l'organigramme échoue-t-il?

Il semble que libreoffice et unoconv rencontrent des problèmes pour restituer correctement l'organigramme contenu dans le fichier .docx. Ceci est probablement dû au fait qu'il a été créé à l'aide d' art intelligent dans Microsoft Office. C'est le problème. C'est un bug également discuté sur ce fil . Les informations textuelles et visuelles sont présentes dans le pdf résultant de la méthode ci-dessus, comme vous pouvez le constater (je devais toutefois sélectionner le texte).

L'organigramme qui ne s'affiche pas complètement comme prévu.

La couleur de la police, par exemple, n'est pas correctement lue et certaines lignes sont trop longues. Je ne connais aucune solution Linux capable d'afficher correctement l'art intelligent. :(

C'est également la raison pour laquelle toutes les printsolutions affichées sur cette page ne vous satisferont pas.

En bref

En bref, ce que vous faites est vraiment difficile et il n’existe actuellement aucune solution qui puisse vous satisfaire pleinement. Le talon d’achille des conversions de docx2pdf est l’art intelligent. Si vous pouvez vivre sans cela ou si vous pouvez trouver un moyen de repérer l' art intelligent et de le convertir en quelque sorte en une image, vous pouvez atteindre votre objectif.

Option 1. Forcer vos utilisateurs à résoudre le problème

C'est une solution très peu élégante. Vos créateurs de contenu pourraient enregistrer leur art intelligent au format jpg comme décrit dans les pages d'aide de Office. La conversion serait donc possible sur votre serveur.

Option 2. Débarrassez-vous du problème

Si les organigrammes sont souvent très similaires et en fonction de votre niveau de développeur, vous pouvez essayer de convertir l’art intelligent séparément. Vous pouvez extraire le fichier drawing1.xml de la grappe de documents .docx, puis utiliser le traitement du langage naturel et quelques astuces loufoques pour reconstruire un art intelligent. Par exemple, vous devriez jouer avec ce type de 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>

Ou, en tant que solution minimale, extrayez au moins le texte ( <a:t>?) Du fichier et enregistrez-le plus facilement. Ou si les diagrammes de vos fichiers PDF sont tous identiques, vous pouvez écrire un script pour changer la couleur du texte et la longueur de la ligne dans le fichier XML. Ensuite, vous pourriez exécuter doc2pdfet vous auriez un fichier qui contient essentiellement toutes les bonnes informations, mais peut-être pas le formatage. Dans le cas des organigrammes, vous voudrez probablement aussi inclure une partie de la mise en forme, car la mise en forme fait partie des informations.

Option 3. Utiliser un service tiers

J'ai fait quelques recherches supplémentaires ces derniers jours et j'ai trouvé un service qui effectue la conversion à la perfection: zamzar . Zamzar vous permet de télécharger un fichier docx puis de vous envoyer un lien par courrier électronique. Ils ont également un service (payant?) Où vous pouvez envoyer n’importe quel fichier à [email protected] puis récupérer le fichier converti dans votre boîte de réception. Vous pouvez facilement construire un système autour de cela dans lequel vous envoyez automatiquement le fichier et le analysez à partir du courrier électronique. Ce n’est pas tant de travail et le résultat final est le meilleur.

Remarques

  • Si quelqu'un a d'autres services qui font la même chose, n'hésitez pas à les éditer.
  • J'ai envoyé un courrier au support du zamzar pour lui demander s'il possède une api. Ce serait encore plus facile.
  • Peut-être que apose pour .NET et Java pourraient aussi aider? Ou docx4java comme dans cet article SO très lié .
  • Une autre option consiste à examiner le convertisseur odf qui semble daté et dépend de openoffice plutôt que de libreoffice.
  • Je peux maintenant confirmer que le convertisseur de jod java souffre également de l'échec de la conversion de l'organigramme.

J'ai effectivement pris le temps de tester les différentes méthodes proposées sur cette page. S'il vous plaît sauvegarder tous les commentaires avec des tests réels.

don.joey
la source
1
J'ai reçu des nouvelles de zamzar: "Nous avons actuellement une API que nous espérons pouvoir lancer en version bêta dans les prochains mois. Nous pourrions vous ajouter à la version bêta si cela vous intéressait?" Ils ont également mentionné que leur système de conversion est quelque chose qu'ils ont développé en interne.
don.joey
@jasonplutext Je suis d'accord avec les réviseurs que votre modification n'a pas été utile. En tant qu'auteur de plutext (je suppose?), Je vous suggère d'ajouter votre propre réponse avec une clause de non-responsabilité indiquant votre affiliation. Merci.
don.joey
Des mises à jour au cours des deux dernières années?
becko
@becko je n'ai pas suivi. Peut-être fixer une prime pour quelqu'un d'autre?
don.joey
Note de l'avenir: l'utilisation correcte dans les versions récentes de lowriteris est maintenant lowriter --convert-to pdf input_file.docx. L'utilisation --pt pdféchouera silencieusement.
ACK_stoverflow
6

Ceci est une solution en ligne de commande qui fonctionne décemment, mais utilise un logiciel propriétaire.

Je pense que le problème fondamental est que les formats de Microsoft Word sont parfaitement compréhensibles juste pour Microsoft Word (même là, il existe des différences entre les versions - il existe des fichiers Word du passé qui s’ouvrent mal formatés dans des versions plus récentes). Toutes les autres solutions sont des approximations et des hacks, elles fonctionneront ou non en fonction du fichier.

Donc, pour être sûr que vous ayez besoin de traiter vos fichiers .docx avec une installation de Microsoft Word (et oui, je pense que c'est leur choix et que c'est juste. Si vous ne voulez pas utiliser Word, ne l'utilisez pas --- je vais avec LaTeX pour mon travail, mais il est difficile de convaincre le reste du monde entier ...).

J'utilise Crossover depuis très longtemps pour exécuter Microsoft Office dans mon bureau Linux (1), et le trouve très utile. Peut-être que ça marche aussi avec le vin - jamais essayé.

Je fais la conversion en utilisant cette configuration:

1) J'ai installé Crossover

2) Ma version de Microsoft Office est installée sous Crossover.

3) Dans Microsoft Word, désactivez "l'impression en arrière-plan"

4) J'ai une cups-pdfimprimante installée et sélectionnée comme imprimante par défaut.

5) Pour faire la conversion, lancez (astuces ici ):

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

6) Votre fichier converti apparaîtra dans le ~/PDF/répertoire.

Vous documentez presque parfaitement (il y a un certain désalignement sur la réponse n ° 2, qui est indiqué dans mon Office Word 2007 sous Crossover --- Je ne sais pas si c'est lié à ma version de Windows).

pagew 1-2

pages 3-4

Maintenant, le problème est que l'interface de mot graphique va apparaître --- Je ne sais pas comment le rendre "sans tête". Les options de ligne de commande pour Word n'ont pas aidé ...

(1) Je ne suis aucunement lié à Codeveawers - juste un utilisateur heureux.

Rmano
la source
4

J'ai également eu ce problème dans le passé, je n'ai pas eu à l'utiliser récemment, donc je ne sais pas si cela me concerne toujours.

Quant à répondre à la question:

Cette question: Comment convertir en lots .doc ou .docx en .pdf donne une raison dans les commentaires pour laquelle votre conversion lowriterpourrait échouer:

Attention à ne pas utiliser le caractère "espace" de la ligne de commande ... Quand vous arrivez au caractère espace, appuyez simplement sur "tab";) - Pitto 16 nov. 12 à 13:11

La réponse à cette question pourrait également aider:

Comment convertir un fichier ODT au format PDF?

Tu courrais libreoffice --headless --convert-to pdf *.odt. Vous pouvez obtenir plus d’informations sur libreoffice avec la commande man libreofficesi vous avez besoin d’aide pour la comprendre ou la modifier pour fonctionner.

Cependant, vous ne pouvez pas ouvrir LibreOffice à ce moment-là, conformément à ce bogue: https://bugs.freedesktop.org/show_bug.cgi?id=37531


Cette question est également liée à Ubuntu, même si elle se trouve sur SuperUser: https://superuser.com/questions/156189/how-to-convert-word-doc-to-pdf-in-linux

La première réponse a deux options, une avec CUPS et la création d'une imprimante PDF, l'autre avec LaTex, bien que vous ayez bien dit que LaTex échouait.

En ce qui concerne la conversion au format PDF via CUPS PDF, vous devez exécuter sudo apt-get install cups-pdfsuivi de oowriter -pt pdf your_word_file.doc(x). Cela pourrait vous aider à résoudre votre problème avec Oowriter.

Ceci est probablement un problème avec le fait que vous essayez de convertir au format PDF à partir de DOC / DOCX, lorsque la plupart des outils utilisent ODT, car ils sont liés à LibreOffice / OpenOffice / AbiWord. Ainsi, ils ne parviennent pas à essayer de le convertir à partir du format DOCX de Microsoft ou dans la conversion au format ODT.

Il existe plusieurs bogues lors de la conversion de .docx w. Word Art (la version est incluse):

Cela provient du forum LibreOffice concernant la conversion de .doc et quelque peu .docx: http://en.libreofficeforum.org/node/5096 . C'est à partir de janvier 2013, donc cela devrait s'appliquer un peu.

Au-delà de tout cela, je ne sais vraiment pas. J'espère que vous résolvez votre problème!

RPiAwesomeness
la source
Désolé, mais aucun de vos outils suggérés ne peut effectuer une conversion propre.
Sceptique Jule
2

Si vous avez installé Libreoffice, vous pouvez essayer de convertir en utilisant cela. Appuyez simplement sur Ctrl+ Alt+ Tsur votre clavier pour ouvrir Terminal. Lorsqu'il s'ouvre, exécutez les commandes ci-dessous:

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

Une autre option consiste à installer Cups PDF .

Pour ce faire, appuyez simplement sur les touches Ctrl+ et Alt+ Tde votre clavier pour ouvrir Terminal. Lorsqu'il s'ouvre, exécutez les commandes ci-dessous:

sudo apt-get install cups-pdf

Créez ensuite une nouvelle imprimante, définissez-la en tant qu'imprimante de fichier PDF et nommez-la comme vous le souhaitez, à condition de connaître le nom, puis exécutez:

oowriter -pt pdf your_word_file.docx

Et votre fichier PDF sera dans ~/PDF.

Mitch
la source
1
N'a eu aucun succès avec ceux-ci.
Sceptique Jule
Cela peut répondre pourquoi.
Sceptique Jule
J'apprécie votre réponse. Cela a beaucoup de sens, mais je suis surpris que l’impression ne fonctionne pas, puisqu’elle ressemble à l’impression sur papier ... :)
Mitch
Le problème clé est que LibreOffice n'est même pas capable d'ouvrir et d'afficher le document correctement. Par conséquent, la sortie est également incorrecte. Cela a-t-il fonctionné sur votre Linux?
Sceptique Jule
C'est bon à savoir. Je n'utilise Office que pour des documents de base, le besoin de créer un élément plus complexe n'a pas été évoqué, mais lorsque ce sera le cas, je m'assurerai de vous y référer. Merci pour cette excellente question et je l’ajouterai certainement à vos favoris. Je garderai cette réponse et les commentaires à titre de référence pour les autres utilisateurs.
Mitch
2

Voici la vérité amère: les solutions Office pour Linux sont un échec total! Je suis un utilisateur GNU / Linux à plein temps depuis de nombreuses années et j'ai constamment cherché et essayé différentes solutions bureautiques, de l’ancien Open-Office à la version ultérieure de Libre-Office, Abi-Word, etc. ont tous échoué à m'aider à faire mon travail de bureau. La situation empire même lorsqu'il s'agit de langues autres que les langues latines (langues de droite à gauche telles que le persan, l'arabe, etc.). L'utilisateur doit se battre avec ces logiciels pour faire son travail! Et la compatibilité de Microsoft Office n’est tout simplement pas là. Je peux parler des heures et des heures de tout ce que j'ai essayé et ils m'ont tous échoué, mais ce n'est pas le but de cette question.

J'ai également essayé d'installer et d'exécuter Microsoft Office à l'aide de WINE, et certains ont bien fonctionné, mais cela n'a pas fonctionné correctement et il est tombé en panne lorsque j'ai essayé d'ouvrir mes fichiers Office.

LaTeX va bien, mais ce n'est pas une solution bureautique. LaTeX est pour la composition de caractères, et ressemble plus à un outil de pro, et il n'y a pas de feuilles de calcul, ni de présentations.

Alors, quelle est la solution?

Ce n'est pas une solution de ligne de commande. La seule solution que j'ai imaginée au cours de toutes ces années pour me garder dans mon système d’exploitation GNU / Linux et également effectuer les travaux de mon bureau est d’utiliser une installation minimale de Microsoft Windows sur une machine virtuelle (telle que VirtualBox) et d’installer le logiciel. un costume Microsoft Office.

entrez la description de l'image ici

Cela peut ne pas sembler joli, mais c’est la seule solution qui fonctionne parfaitement et m’empêche de me battre contre des solutions de bureau médiocres pendant mon temps précieux. Au début, je pensais moi-même que ce n'était pas une bonne solution, mais après avoir échoué avec tous les autres et avoir fait ce travail de VM pendant plus de 2 ans, j'en suis vraiment content. :)

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

NOTE 1: je ne fais pas de publicité pour les produits Microsoft! J'essaie juste d'aider à résoudre le problème et de passer à autre chose.

NOTE 2: Comme souligné ci-dessus, il ne s'agit PAS d'une solution de ligne de commande. Alors, pourquoi poster la réponse? Parce que c'est une option testée et performante! Si aucune solution de ligne de commande WORKING n'est disponible (ce dont je soupçonne fortement le cas), disposer d'une option ALTERNATIVE est préférable à NO.

Seyed Mohammad
la source
1
Pourquoi simplement utiliser MS Word dans winela machine virtuelle?
Totti
1
Comme je l'ai mentionné, mon expérience d'installation et d'utilisation de MS-Office avec mon ordinateur WINEn'a pas été satisfaisante. Le programme ne fonctionnait pas comme il le faisait sous Windows (comportement incorrect) et s'est également écrasé!
Seyed Mohammad
3
Non Ohe a downvoted encore , mais la question demande explicitement une ligne de commande solution. Ce n'est pas inutile à cause de la SP, c'est inutile parce que la question est complètement ignorée.
djeikyb
3
Seyed, veuillez noter que l'OP demande explicitement une solution de ligne de commande qui fonctionnera sur son serveur Ubuntu (qui n'a probablement même pas d'interface graphique!). Votre réponse n'est pas mauvaise mais elle n'est tout simplement pas pertinente dans ce cas.
Glutanimate
2
@ ScepticalJule Ridiculous. Vous mettez explicitement une prime sur une solution en ligne de commande. Ensuite, vous sélectionnez une réponse qui n’est même pas une réponse à la question. Avez-vous même étudié les autres réponses. Y compris celui-ci et le mien?
don.joey
1

Voici quelques applications que vous pouvez essayer et voir si elles fonctionnent avec FF Multi Converter ou essayer Kingsoft Office .

rstreeter78
la source
Installé FF Multi Converter, exécuté la commande ... rien ne s'est passé. Kingsoft a une bonne interface graphique, mais il ne peut pas ouvrir / afficher le fichier correctement (les formules étaient manquantes même après avoir installé les polices requises. Les lettres du cercle étaient également manquantes).
Sceptique Jule
0

Installez Calibre à partir du Centre logiciel ou de Synaptic et définissez la sortie par défaut sur PDF.

À partir d'une invite du shell, effectuez

Nom de fichier factice ebook-convert .docx .pdf -h

K7AAY
la source
Cela coupe du texte en quelque sorte.
don.joey
Crash avec ValueError: No plugin to handle input format: docx. Google n'a pas aidé sur celui-ci, je vais donc signaler un bug.
Sceptique Jule