DjVu versteckter Text → PDF?

687
Geremia

Gibt es eine Möglichkeit, ein PDF nur aus der verborgenen Textebene einer DjVu-Datei zu erstellen?

Ich weiß, wie man es benutzt

djvused myfile.djvu -e 'output-txt' > myfile.dsed 

ein DjVu-Skript ausgeben, das die XY-Koordinaten jedes Wortes jeder Seite enthält, aber wie würde ich das in ein PS- oder PDF-Format konvertieren? Ich bin sicher, dass jemand ein Skript hat.

Die dsed-Datei beginnt mit solchen S-Ausdrücken ( klicken Sie hier, um weitere Informationen zu erhalten ):

select; remove-txt  # -------------------------   select "myfile_0000.djvu" set-txt (page 108 107 1176 1725 (column 941 1694 1176 1725 (region 941 1694 1176 1725 (para 941 1694 1176 1725 (line 941 1694 1176 1725 (word 941 1694 999 1723 "another") (word 1024 1696 1176 1725 "word"))))) (column 108 107 805 1519 (region 108 107 805 1519 (para 226 1491 701 1519 (line 226 1491 701 1519 (word 226 1491 701 1519 "example"))) (para 350 1370 534 1396 

usw…

Vielen Dank

2

2 Antworten auf die Frage

0
Marduk

Nach OP-Eingabe aktualisiert:

Um die OCR-Schicht einer DJVU-Datei in eine PDF-Datei zu setzen, dh die Wörter an der Stelle zu drucken, an der sie in der DJVU-Datei enthalten sind, besteht die Möglichkeit, programmatisch eine Inkscape- oder Scribus-Datei zu generieren. Ich werde das Verfahren skizzieren. Es ist nicht schwierig, ein Skript in Ihrer bevorzugten Sprache zu schreiben (Python, Ruby, Racket usw.).

  1. Für jede Seite der DJVU-Datei exportieren Sie die OCR-Ebene als HTML oder als S-Ausdruck. Letzteres werde ich im Folgenden annehmen.

  2. Extrahieren Sie die Seitengröße aus (page x1 y1 x2 y2.... Seitenbreite = x2-x1, Seitenhöhe =y2-y1.

  3. Berechnen Sie für jedes Wort die Breite, Höhe und Koordinaten der linken unteren Ecke des Textrahmens, der das Wort enthalten soll. Das ist (word x1 y1 x2 y2 "another")ein Textrahmen mit unterer linker Ecke (x1, Page height - y1), Breite x2 - x1und Höhe y2 - y1.

  4. Wählen Sie eine geeignete Schriftart und Schriftgröße für den Textrahmen. Verwenden Sie die Höhe der Wortrechtecke als Richtlinie. Stellen Sie sicher, dass der Text nicht an den Textrahmen angepasst wird.

  5. Wenn Sie alle Textrahmen zur Seite hinzugefügt haben, exportieren Sie die Datei in PDF. Beachten Sie, dass die Seitengröße viel größer als der Buchstabe oder A4 ist. Wenn Sie das Dokument drucken möchten, müssen Sie es im Druckdialogfeld an Ihre Papiergröße anpassen. Um Bäume zu speichern, drucken Sie zuerst in eine PDF-Datei.

Ursprüngliche Antwort:

Demnach man djvusedwird der Befehl 'output-txt'ein djvusedSkript generieren, das für den Gebrauch von gedacht ist djvused.

Für Ihre Zwecke ist es besser (gemäß der Manpage) zu verwenden

djvused myfile.djvu -e 'print-pure-txt' > myfile.txt

Anschließend können Sie eine PDF-Datei mit einem Programm erstellen, das als PDF gedruckt werden kann.

Je nach Betriebssystem und Version müssen Sie möglicherweise einen PDF-Drucker installieren. Sie können es auch in einer aktuellen Version von Chrome oder Firefox öffnen und als PDF drucken.

Ja, aber die Position des Textes im PDF-Dokument würde nicht so sein wie in der DjVu-Version. Geremia vor 7 Jahren 0
Im Wesentlichen brauche ich ein Skript, um dsed-Dateien zu analysieren und ein PDF mit dem Text an den korrekten Koordinaten zu erstellen. Geremia vor 7 Jahren 0
Das war in der Frage nicht klar. Sehen Sie sich die aktualisierte Antwort an. Hoffentlich hilft das. Marduk vor 7 Jahren 0
0
Geremia

Der einfachste Weg, dies zu tun, ist die Konvertierung in DjVu in PDF (wobei sichergestellt wird, dass die OCR-Ebene in der PDF beibehalten wird). Dann renne:

gs -q -o - -dFILTERIMAGE -sDEVICE=pdfwrite -f "$" | pdftk - output - uncompress | sed "s/^3 Tr$/0 Tr/g" | pdftk - output "$" compress 

wo der Benutzer $und angibt $. gsEntfernt ( -dFILTERIMAGE) alle Bilder und sedsorgt dafür, dass das PDF den verborgenen OCR-Text als sichtbar darstellt (durch Ändern des 3 TrBefehls 0 Tr" PDF" oder "Verborgener Text" oder "Standardtext Rendern"). Der letzte pdftkBefehl ist nicht unbedingt erforderlich, der erste ist jedoch, sonst sedkönnte er den PDF- TrBefehl nicht ändern .