2017-06-10 2 views
1

Ich habe ein PDF, das von Ghostscript 8.15 erstellt wird. Ich muss dieses pdf von meiner Software verarbeiten, die Schriftartnamen von der pdf-Akte extrahiert und einige Operationen dann durchführt. Aber wenn ich Schriftnamen aus dieser PDF-Datei extrahiere, sind diese Namen nicht so wie sie sein sollten. Zum Beispiel: Der ursprüngliche Name der Schriftart ist 'NOORIN05', aber die PDF-Datei enthält 'TTE25A5F90t00'. Wie kann diese Schriftart Namen zu ursprünglichen Namen dekodieren. Alle Schriftarten sind TTF.Wie kann man originale Fontnamen von PDFs erhalten, die von Ghostscript generiert wurden?

HINWEIS: Warum muss ich die Schriftarten extrahieren. Eigentlich gibt es eine Software mit dem Namen InPage, die in Indien und Pakistan am berühmtesten war, um Dokumente in Urdu Sprache zu schreiben, denn vor der Unicode-Unterstützung in Textverarbeitung war dies die einzige Lösung, um Urdu in Computer einzugeben. Aufgrund der Komplexität der Urdu-Sprache verwendet diese Software 89 Schriftarten mit den Namen NOORIN01 TO NOORIN89. Der Grund für die Verwendung zu vieler Font-Dateien besteht darin, dass alle Urdu-Ligaturen enthalten sind, die mehr als 19 Tausend sind. Da jede Datei nur 255 Ligaturen enthalten kann, haben sie diese Technik vor dem Unicode verwendet. Jetzt kopieren und fügen Sie den Text aus der PDF-Datei, die von dieser Software generiert wird, einen Müll in MS Word. Der Grund, den ich oben 89 Font-Dateien erzählte. Es gab also keine Möglichkeit, Text aus solchen alten PDF-Dateien zu extrahieren. (Seit ein paar Tagen unterstützt diese Software Unicode, aber ich rede von alten Dateien). Also habe ich eine Software in C# entwickelt, um Text aus solchen alten PDF-Dateien zu extrahieren. Der Algorithmus, den ich benutze, erstelle eine Datenbankdatei, die alle Namen von 89 Font-Dateien mit allen aschii-Codes enthält, und in der nächsten Spalte tippte ich Urdu-Unicode-Ligatur in Unicode. Ich verarbeite die PDF-Datei Zeichen für Zeichen mit der Schriftart, passe den Namen der Schriftart aus meiner Datenbankdatei an und hole die Unicode-Ligatur aus der Datenbank und zeige sie dann in einem Textfeld an. Auf diese Weise erhalte ich den Unicode-Text erfolgreich. Meine Software funktionierte in vielen PDF-Dateien einwandfrei. Aber vor ein paar Tagen bekomme ich eine Beschwerde von einer Person, dass Ihre Software es versäumt, Text aus diesem PDF zu extrahieren. Beim Testen stellte ich fest, dass die PDF-Datei nicht die ursprünglichen Schriftnamen enthält. Deshalb kann meine Software den Prozess nicht weiter verarbeiten. Als ich die Eigenschaften dieser PDF-Datei überprüfte, zeigt es den PDF-Generator GPL Ghostscript 8.15. Also suche ich im Internet und studiere die Dokumentation zu den Schriften, konnte aber immer noch keinen Schlüssel zum Entschlüsseln finden und bekomme die originalen Schriftnamen.

+0

Im Allgemeinen ist kein PDF-Prozessor erforderlich, um die Schriftartnamen unverändert zu lassen. Daher können Sie einfach nicht versprechen, dass Sie die Zeichen im Allgemeinen anhand ihres Schriftartnamens richtig erkennen können. Punkt. Wie gesagt, Sie können natürlich mehr tun, um die betreffenden Glyphen zu identifizieren, als nur die Fontnamen zu vergleichen (was schließlich eine Trivialität ist). Z.B. Sie könnten einfach die Anweisungen in den Zeichensatzprogrammen für die Zeichen mit denen vergleichen, die Sie für die betreffenden Zeichen aus anderen Dokumenten kennen. – mkl

Antwort

2

Das erste, was Sie tun sollten, ist eine neuere Version von Ghostscript zu versuchen. 8.16 ist 14 Jahre alt ..... Die aktuelle Version ist 9.21.

Wenn das Rotot die ursprünglichen Namen bewahrt (möglicherweise einschließlich der üblichen Subset-Präfix), dann müssen wir eine Beispiel-Eingabedatei sehen, die das Problem zeigt.

Es könnte auch hilfreich sein, wenn Sie erklären sind, warum Sie die Font-Namen extrahieren müssen, möglicherweise etwas, das Sie versuchen, die einfach nicht möglich ist.

[EDIT}

OK so jetzt verstehe ich das Problem, ich bin die Antwort auf Ihre Frage hat Angst ‚Sie nicht den Original-Schriftnamen bekommen können.‘

Die PDF-Datei wurde aus der Ausgabe des (von Adobe erstellten) Windows PostScript-Druckertreibers erstellt. Wenn TrueType-Schriftarten als Typ 42-Schriftarten in den PostScript-Stream eingebettet werden, erhalten sie einen Pseudozufallsnamen, der aus "TT" besteht, gefolgt von einigen zusätzlichen Zeichen, die wie Hex aussehen, aber nicht.

Alte Versionen des pdfwrite Geräts Ghostscript (und 8,15 ist sehr alt) einfach diesen Namen wörtlich verwendet, und das ist, was für den Font-Namen wurde in der PDF-Datei verwendet, um Sie geliefert.

Neuere Versionen sind in der Lage, weiter in die Schriftart zu graben und den ursprünglichen Schriftnamen zu übernehmen, der im PostScript vorhanden ist. Leider haben die alten Versionen das nicht bewahrt. Sobald Sie die Informationen weggeworfen haben, gibt es keine Möglichkeit, sie wieder zurück zu bekommen.

Wenn Sie also nur diese PDF-Datei haben, ist es einfach nicht möglich, die Schriftartnamen zurückzubekommen. Wenn die Person, die Ihnen die PDF-Datei zur Verfügung gestellt hat, diese mit einer neueren Version von Ghostscript neu erstellen kann, wird sie funktionieren. Aber ich nehme an, sie haben nicht das PostScript-Programm zum Erstellen einer 14 Jahre alten Datei.

+0

Danke KenS für Ihre freundliche Antwort. Das ist der Link zu dieser PDF-Datei. [meine PDF-Datei] (https://drive.google.com/open?id=0B02XT3ZC6ynZeE96Z001TmR3NEk) Der Grund, warum ich die Schriftartnamen extrahieren muss, habe ich meine Frage bearbeitet und am Ende meiner Frage ausführlich erklärt, weil aufgrund der geringeren Zeichenanzahl in Kommentaren ich hier nicht erklären konnte. Vielen Dank. – user1336491

+0

Danke KenS. Du beseitigst die Situation für mich. – user1336491

+0

* Wenn das einzige, was Sie haben, ist diese PDF-Datei, dann ist es einfach nicht möglich, die Schriftartnamen zurück zu bekommen. * - Nun, die Nameninformationen sind weg, aber es gibt immer noch die eingebetteten Schriftdateien. Das OP könnte sie extrahieren und die darin enthaltenen Informationen (bis hin zu den tatsächlichen Zeichenanweisungen) mit Informationen vergleichen, die er von anderen PDFs hat. Wenn die Informationen aus einer eingebetteten Schriftart mit genau einer dieser 89 Basisschriftarten übereinstimmen, hat er sie identifiziert ... – mkl

Verwandte Themen