Bereinigen von Problemen mit pdftotext-Schriftarten

3

Ich verwende pdftotext, um eine ASCII-Version eines PDF-Dokuments (erstellt mit LaTeX) zu erstellen, da Mitarbeiter ein einfaches Dokument in MS Word bevorzugen.

Die Klartextversion, die ich sehe, sieht gut aus, aber bei näherer Betrachtung scheint das f-Zeichen häufig falsch konvertiert zu sein, je nachdem, welche Zeichen folgen. Zum Beispiel scheinen fi und fl oft ein spezielles Zeichen zu werden, das ich hier einzufügen versuche: fi und fl.

Was ist der beste Weg, um die Ausgabe von pdftotext zu bereinigen? Ich denke, es sedkönnte das richtige Werkzeug sein, aber ich bin mir nicht sicher, wie ich diese Sonderzeichen erkennen soll.

karel
quelle
fl, fi, ff, ffl und ffi sind gebräuchliche typografische Ligaturen, die üblicherweise durch ein einzelnes Zeichen ersetzt werden (und definitiv mit TeX): de.wikipedia.org/wiki/Typografische_Ligatur#Computer_Typisierung - vielleicht müssen Sie nur die Schriftart überprüfen, die Sie verwenden hab in der ausgabe angeschaut, dass die codierung stimmt.
Frabjous
oh, und du meinst pdftotextvon Poppler, nicht wahr pdftotex?
Frabjous
Haben Sie die ursprüngliche TeX-Quelle? Verwenden Sie beispielsweise latex2rtf oder oolatex (von TeX4ht), um eine Textverarbeitungsdatei für die Word-Junkies zu generieren. Das Kompilieren in PDF und das anschließende Konvertieren in Nur-Text scheinen eine sehr seltsame Route für die Konvertierung zu sein.
Frabjous
Oh, und wenn Sie PDF in einfachen Text konvertieren möchten, ziehen Sie die Verwendung ebook-convertvon Calibre ( calibre-ebook.com ) in Betracht, anstatt pdftotext. Es ermöglicht die Ausgabe von einfachem Text (und einer Vielzahl anderer Formate) und verwaltet Ligaturen für Sie.
Frabjous
Ich meinte pdftotex t . Tippfehler behoben. Ich habe die ursprüngliche TeX-Quelle, aber latex2rtf und oolatex funktionieren nicht so gut wie pdftotext. Ich benutze zusätzliche Pakete wie siunitxund glossaries, und daher scheint es die beste Lösung zu sein, über das PDF zu gehen. Ich wünschte, es gäbe einen besseren Weg.

Antworten:

3

Standardmäßig werden pdftotextUnicode-Daten (UTF-8) ausgegeben. Wenn Ihr Terminal oder Texteditor UTF-8 nicht unterstützt, werden Ligaturen wie "fi" und "fl" (die in Unicode als ein einzelnes Zeichen dargestellt werden können) seltsam angezeigt, wie Sie bemerkt haben.

Die einfache Lösung besteht darin, anzugeben pdftotext, dass ASCII anstelle von Unicode ausgegeben werden soll:

pdftotext -enc ASCII7 input.pdf output.txt

Dies sollte zu einer sauberen ASCII-Ausgabe führen, sodass Sie diese anschließend nicht mehr manuell bereinigen müssen.

davidg
quelle
Vielen Dank. Ich fand den ebook-convertobigen Vorschlag am besten. Ihr Rat könnte das Standardverhalten von verbessern pdfottext, aber ich denke, mein Terminal unterstützt UTF-8 und ebook-convertscheint mit hochgestellten Texten und anderen Dingen besser umzugehen.
Diese Lösung funktioniert auch dann nicht, wenn Sie tatsächlich Unicode-Zeichen in Ihrer Ausgabe benötigen.
Amenthes
1

Angenommen, Sie arbeiten auf einem Unix-basierten System, könnten Sie dies auf der Ausgabe von pdftotext ausführen:

sed -i -e 's/ffi/ffi/g' -e 's/fi/fi/g' -e 's/ff/ff/g' -e 's/fl/fl/g' -e 's/ffl/ffl/g' output.txt

Das sollte die Ligaturen durch die einzelnen Buchstaben ersetzen, in die sie zerfallen. (Siehe meine Kommentare oben, was Ligaturen damit zu tun haben.)

Ich habe das an einer Textdatei getestet, die mit einem pdftotextvon LaTeX generierten PDF erstellt wurde. Und es hat gut funktioniert. Wenn das LaTeX jedoch eine nicht standardmäßige Codierung oder Schriftart mit zusätzlichen Ligaturen verwendet, ist möglicherweise mehr zu tun.

Sie sollten wahrscheinlich sicherstellen, dass die in Ihrem Terminal verwendete Schriftart Zeichen für die Ligaturen der f-Serie enthält. DejaVu Sans Mono ist eine gute Wahl.

schäbig
quelle
Falls Ihr Terminal nicht utf-8 (für cmd.exe Beispiel Fenster), können Sie dies auch mit der Byte - Darstellung: sed -e 's/\\xEF\\xAC\\x80/ff/g' -e 's/\\xEF\\xAC\\x81/fi/g' -e 's/\\xEF\\xAC\\x82/fl/g' -e 's/\\xEF\\xAC\\x83/ffi/g' -e 's/\\xEF\\xAC\\x84/ffl/g' -e 's/\\xEF\\xAC\\x85/ft/g' -e 's/\\xEF\\xAC\\x86/st/g'.
Amenthes