Diese Antwort besteht alle Tests, aber das Flussdiagramm in Ihrem Testdokument.
sudo apt-get install unoconv
doc2pdf respondus-docx-sample-file.docx
Warum ist das besser als andere Methoden bisher vermuten lassen?
Ich habe die anderen bisher vorgeschlagenen Methoden (insbesondere oowriter
und ebook-convert
) getestet , aber sie bestehen weniger Tests als diese Methode. Die ebook-convert
Methode entfernt die Ränder und einen Teil der Texte aus dem Dokument.
Diese Methode liefert sogar bessere Ergebnisse als ein professioneller Konverter als rainbowpdf .
Ich habe auch versucht, es in HTML umzuwandeln, aber die Zeichnung mit dem Quadrat im Kreis und das Flussdiagramm sind falsch.
Warum schlägt der Flussdiagrammtest fehl?
Es scheint, dass libreoffice und unoconv Probleme beim korrekten Rendern des Flussdiagramms in der DOCX-Datei haben. Dies liegt wahrscheinlich daran, dass es mit Smart Art in Microsoft Office erstellt wurde. Das ist das Problem. Das ist ein Fehler, der auch in diesem Thread diskutiert wird . Wie Sie sehen können, sind die textuellen und visuellen Informationen im PDF enthalten, das sich aus der obigen Methode ergibt (ich musste den Text jedoch auswählen).
Beispielsweise wird die Schriftfarbe nicht richtig gelesen und einige Zeilen sind zu lang. Mir ist keine Linux-Lösung bekannt, mit der Smart Art korrekt dargestellt werden kann. :(
Dies ist auch der Grund, warum Sie nicht mit allen print
auf dieser Seite veröffentlichten Lösungen zufrieden sind.
Zusamenfassend
Kurz gesagt, was Sie tun, ist wirklich schwer und es gibt derzeit keine Lösungen, die Sie voll und ganz zufrieden stellen. Die Achillesferse der docx2pdf-Konvertierungen ist die clevere Kunst. Wenn Sie ohne das leben können oder einen Weg finden, um intelligente Kunst zu entdecken und sie irgendwie in ein Bild umzuwandeln, können Sie Ihr Ziel erreichen.
Option 1. Zwingen Sie Ihre Benutzer, sich mit dem Problem zu befassen
Dies ist eine sehr unelegante Lösung. Ihre Ersteller von Inhalten könnten ihre Smart Art als JPG speichern, wie auf den Office-Hilfeseiten beschrieben, und daher wäre die Konvertierung auf Ihrem Server möglich.
Option 2. Versuchen Sie, das Problem zu umgehen
Wenn die Flussdiagramme oft sehr ähnlich sind und Sie sich als Entwickler auskennen, können Sie versuchen, die Smart Art separat zu konvertieren. Sie können die Datei drawing1.xml aus dem DOCX-Cluster von Dokumenten extrahieren und dann mit der Verarbeitung in natürlicher Sprache und einigen verrückten Hacks die Smart Art neu erstellen. Zum Beispiel müssten Sie sich mit dieser Art von XML anlegen:
<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>
Oder zumindest extrahieren Sie als Minimallösung den Text ( <a:t>
?) Aus der Datei und speichern ihn auf einfachere Weise. Oder wenn die Flussdiagramme Ihrer PDFs alle gleich sind, können Sie ein Skript schreiben, um die Textfarbe und die Zeilenlänge in der XML selbst zu ändern. Dann könnten Sie ausführen doc2pdf
und Sie hätten eine Datei, die im Wesentlichen alle richtigen Informationen enthält, aber möglicherweise nicht die Formatierung. Im Fall von Flussdiagrammen möchten Sie wahrscheinlich auch einen Teil der Formatierung einbeziehen, da die Formatierung Teil der Informationen ist.
Option 3. Verwenden Sie einen Drittanbieter-Service
Ich habe in den letzten Tagen einige Nachforschungen angestellt und einen Service gefunden, der die Konvertierung perfekt macht: zamzar . Mit Zamzar können Sie eine docx-Datei hochladen und Ihnen anschließend einen Link per E-Mail senden. Sie haben auch einen (kostenpflichtigen?) Dienst, bei dem Sie eine beliebige Datei an pdf@zamzar.com senden und die konvertierte Datei dann wieder in Ihren Posteingang übertragen können. Sie können problemlos ein System erstellen, in dem Sie die Datei automatisch senden und aus der E-Mail analysieren. Das ist nicht so viel Arbeit und das Endergebnis ist das Beste.
Anmerkungen
- Wenn jemand andere Dienste hat, die dasselbe tun, können Sie diese gerne bearbeiten.
- Ich habe die Zamzar-Unterstützung per E-Mail kontaktiert, um zu fragen, ob sie eine API haben. Das wäre noch einfacher.
- Vielleicht könnte auch apose für .NET und Java helfen? Oder docx4java wie in diesem sehr verwandten SO-Beitrag .
- Eine andere Möglichkeit ist, in den odf-converter zu schauen, der veraltet zu sein scheint und von openoffice und nicht von libreoffice abhängt.
- Ich kann jetzt bestätigen, dass der java jodconverter auch unter der umwandlung des flussdiagramms leidet.
Ich habe mir tatsächlich die Zeit genommen, die verschiedenen auf dieser Seite vorgeschlagenen Methoden zu testen. Bitte hinterlassen Sie alle Kommentare mit aktuellen Tests.