Ce PDF a été produit par Abbyy Finereader 10:
http://ebooks.zeitr.org/from_abbyy.pdf
Vous pouvez copier et coller la première phrase et obtenir ce (très bon) résultat texte:
Der »Bund Deutscher Gymnastik-Schulleiter« wurde am 20. November 1955 anläßlich einer Zusammenkunft der Leiterinnen und Leiter der privaten deutschen Gymnastik-Ausbildungsstätten gegründet.
Après un traitement avec Ghostscript 9.02 (Windows 64 bits), j'obtiens ce fichier:
http://ebooks.zeitr.org/after_ghostscript.pdf
Maintenant, la première phrase semble étrange - il y a un espace supplémentaire avant le dernier caractère de chaque mot.
Der »Bun d Deutsche r GymnastikSchulleiter« wurd eam 20. Novembre 1955 anläßlic h eine r Zusammenkunf t der Leiterinne n un d Leite r de r private n deutsche n GymnastikAusbildungsstätte n gegründet.
Cela a le principal effet négatif que vous ne pouvez pas rechercher des mots entiers dans Acrobat Reader. Je peux reproduire l'effet avec le jeu de paramètres minimal suivant pour Ghostscript:
-sDEVICE=pdfwrite ^
-dBATCH ^
-dNOPAUSE ^
-sstdout="myStdOut" ^
-sOutputFile="myDestFile.pdf" ^
mySourceFile.pdf
Des idées?
la source
Réponses:
J'ai trouvé cela un problème intéressant et j'ai regardé de plus près ...
Tout d'abord, j'ai utilisé l'
qpdf
outil de ligne de commande pour décompresser les flux de données PDF afin de mieux voir les codes source des deux fichiers:En regardant l'une des premières occurrences où un espace supplémentaire est inséré (c'est la chaîne d'origine "Bund Deutscher Gymnastik-Schulleiter" qui se transforme en "Bun d Deutsche r GymnastikSchulleiter" ), je trouve les extraits PDF suivants:
En qdf - from_abbyy.pdf:
En qdf - after_ghostscript.pdf:
Pour vous donner une petite idée de ce que les opérateurs graphiques PDF utilisés ici signifient, voici une courte liste:
Comme vous pouvez le voir, Ghostscript a remplacé l' opérateur d' origine
Tm
( matrice de texte ) par unTd
( déplacer le texte du point courant ), et il en a également ajouté un supplémentaire2.16501 0 Td
... Je ne sais pas pourquoi. Je soumettrai un rapport de bug au bugzilla de Ghostscript [*] et je verrai s'ils sont intéressés à le résoudre.Notez cependant que ce problème ne se produit pas si j'utilise Linux Acrobat Reader 9.4.2 et que j'utilise l'action de menu "Fichier -> Enregistrer en tant que texte ..." . Dans ce cas, il n'y a pas d'espaces supplémentaires (mais quelques sauts de ligne supplémentaires). Sous Linux également, le texte ne peut pas être recherché correctement, et montre également les espaces supplémentaires lors de la copie et du collage ....
[*] Je mettrai à jour ici avec le numéro de bogue quand je l'aurai fait.
Mise à jour:
Après avoir réfléchi un peu plus sur l'
Tm
opérateur remplacé , je pense maintenant que cela ne devrait pas être à l'origine du problème.En réalisant cela, j'ai essayé de faire la conversion avec Ghostscript v8.71 au lieu de v9.02. Et que dois-je dire? Le problème de copier-coller ne se produit pas avec la sortie v8.71!
Cela signifie: il y a un problème dans Ghostscript 9.02 qui n'était pas là dans 8.71. Cela a probablement à voir avec les mesures de police intégrées dans le PDF de sortie. Parce que les extraits PDF cités ci-dessus sont les mêmes dans la sortie v8.71 que dans la sortie v9.02 ....
Mise à jour 2:
URL de l'entrée du bogue dans le bugzilla de Ghostscript:
Mise à jour 3:
Ce bug semble avoir été corrigé entre-temps. Je ne vois pas cela se produire avec les versions de Ghostscript avec lesquelles je l'ai à nouveau testé: Git actuel (v9.10GIT) ni avec Ghostscript v9.06.
la source
Si vous numérisez une page contenant du texte dans un PDF et exécutez une application OCR dessus, le texte sera ajouté à la page, mais le "mode de rendu du texte" est défini sur invisible. Il est là, mais il n'est pas rendu à l'écran (ou sur papier s'il est imprimé). Ce que vous voyez ou imprimez est l'image numérisée d'origine.
Comment rendre visible le texte invisible?
Eh bien, nous pouvons éditer le PDF ... Le code PDF pour définir le rendu du texte sur invisible est le suivant:
Vous ne trouvez pas (encore) cette chaîne dans l'original from_abbyy.pdf ni dans from_ghostscript.pdf car certaines parties des PDF sont compressées. Nous les décompressons donc autant que possible à l'aide de
qpdf
:Maintenant, nous pouvons trouver la chaîne ci-dessus facilement (et il n'y a qu'une seule occurrence dans chaque fichier).
Passons à l'un des modes visibles de rendu de texte. Dans l'ensemble, nous pouvons choisir parmi ces 8 modes de rendu de texte:
Si j'utilise le mode "remplissage", le texte de l'OCR ne sera probablement pas aussi bon au-dessus de l'image de numérisation sous-jacente. Je préfère donc la variante "course". Donc je change simplement la ligne ci-dessus pour lire
En regardant ce PDF modifié, je ne l'aime pas, car la largeur de ligne par défaut est trop épaisse à mon goût. De plus, la couleur du contour est noire (par défaut); Je préfère le rouge pour avoir un contraste avec les formes numérisées à l'origine. Par conséquent, j'ajoute du code au début de cette ligne qui définit la largeur de ligne au quart de point:
et un autre pour définir la couleur du trait sur le rouge:
La ligne complète se lit maintenant:
C'est tout.
A noter que notre petite manipulation a endommagé le fichier, car sa "TOC" (en termes techniques: sa
xref
table) ne sera plus valide. Acrobat Reader ou Acrobat Professional l'ouvrira néanmoins (sans se plaindre même) et "réparera" silencieusement la section xréf du fichier. D'autres lecteurs PDF peuvent rejeter le fichier, mais pour l'instant, cela nous est égal ...Voici des captures d'écran du résultat: (La première capture d'écran est agrandie sur la largeur de la fenêtre.) (La deuxième capture d'écran est agrandie à 800%.)
Les contours rouges sont le texte numérisé rendu visible maintenant, comme nous le voulions.
J'ai effectué la même procédure que celle décrite ci-dessus pour les deux fichiers from_abbyy.pdf et after_ghostscript.pdf . J'ai ouvert les deux résultats dans 2 instances différentes d'Acrobat Reader. Si nous les faisons zoomer sur la même valeur et maximiser les deux fenêtres, il est facile de basculer la vue entre les deux fichiers via
[alt]+[tab]
. C'est un bon moyen de révéler même les différences de rendu les plus fines entre deux fichiers PDF.Mon résultat est: il n'y a même pas un seul pixel différent entre l'entrée de Ghostscript (v9.02) et sa sortie pour ce fichier. Mais il y a toute une différence si vous voulez copier-coller du texte ...
la source
Je ne vois pas le problème décrit. J'ai ouvert le fichier PDF «après» avec Acrobat Professional 9.0 et le texte est copié et collé correctement.
Ghostscript interprète entièrement le fichier PDF et produit un nouveau fichier PDF en fonction de ce qu'il a interprété, il n'a aucune relation avec le fichier d'origine autre qu'il enregistre la position du texte.
En raison du riche ensemble de fonctionnalités de PDF, il est possible d'avoir des caractères positionnés au même endroit en utilisant plusieurs méthodes différentes. Il n'y a donc rien de mal ou d'inattendu en soi dans la façon dont GS produit le fichier PDF.
Étant donné que le texte peut être enregistré correctement, il s'agit de l'heuristique Acrobat de décider si oui ou non deux caractères «voisins» sont adjacents ou ont un espace entre eux, lorsqu'ils sont traités comme ASCII consécutifs.
Je ne crois pas que le problème puisse être les métriques de police incorporée pour la simple raison que la police n'est pas incorporée :-) La police utilisée est Helvetica, qui n'est pas incorporée dans le document, et donc Acrobat (pour moi au moins) utilise ArialMT. Notez que le fichier PDF «original» ne contient pas non plus les polices.
Je vais finalement regarder le bug signalé, mais ce ne sera pas pour bientôt et je doute qu'il y ait tout ce que nous pouvons (ou ferons) à ce sujet. Il me semble que c'est une conséquence inévitable de l'heuristique. Cependant, il pourrait être utile d'incorporer les polices, afin qu'elles soient au moins cohérentes.
la source
Du rapport de bogue Ghostscript à:
http://bugs.ghostscript.com/show_bug.cgi?id=692206
J'ai maintenant pu reproduire le problème, et ce n'est pas une régression à partir de 8.71, c'est une progression (et un changement Adobe).
8.71 livré avec un bogue qui provoquait l'écriture de CMaps ToUnicode invalides. La documentation Adobe trompeuse et contradictoire a conduit à l'écriture de la CMap en tant que CMap, alors qu'en fait, les CMaps ToUnicode ont leurs propres règles, incompatibles.
ToUnicode CMaps est normalement utilisé uniquement pour la recherche et le copier / coller. Comme leur nom l'indique, ils sont utilisés pour mapper les codes de caractères aux points de code Unicode. Le ToUnicode CMap dans le fichier PDF 8.71 n'est pas utilisé, car il n'est pas valide, celui des versions ultérieures est valide et Acrobat est connu pour l'utiliser.
Il semble que dans Acrobat Reader jusqu'à 9.2 inclus, l'existence des données ToUnicode ne fait aucune différence. À un certain point après 9.2, le mécanisme de recherche a changé et Acrobat semble utiliser deux mécanismes différents selon la présence ou non d'un CMap ToUnicode. Je n'ai pas accès à Acrobat Pro après 9.2 et seulement récemment installé Reader X, je n'ai rien entre les deux.
La méthode «no Unicode» fonctionne sur toutes les versions d'Acrobat, la méthode «Unicode» échoue sur les versions plus récentes.
J'ai montré cela en espaçant les blancs la référence au ToUnicode CMap du FontDescriptor. Si nécessaire, je peux rendre les différents fichiers disponibles, mais ils sont volumineux car ils sont décompressés.
La recherche étant un effort heuristique en PDF, il ne sera pas possible de garantir un résultat. Le changement de comportement est dû à Acrobat, pas à Ghostscript, et le changement dans Ghostscript devait corriger un vrai bug, donc une progression, pas une régression.
la source
Afin de vérifier si ce problème est lié à l '«embarquement» de la police ou non, j'ai effectué une autre conversion, sous Linux. J'ai utilisé cette ligne de commande pour que Ghostscript intègre les polices utilisées:
Ghostscript affichera cette sortie:
Ghostscript a incorporé des polices d'une famille de polices nommée NimbusSanL . Donc, plus ArialMT , comme cela a été utilisé pour le rendu à l'écran par Acrobat Reader en remplacement de Helvetica manquant (voir également les commentaires de l'utilisateur 701996 ci-dessus). Notez que Ghostscript renommera cette police en Helvetica dès qu'elle sera intégrée. Mais ce n'est pas un problème, car NimbusSanL a été créé comme un clone d'Helvetica ...
Cependant, même pour ce PDF de sortie, le copier-coller d'Acrobat Reader ne fonctionnera pas bien. Malgré le fait que Reader n'a plus besoin d'utiliser ArialMT pour remplacer Helvetica. Reader utilise désormais le clone NimbusSanL / Helvetica intégré.
Jusqu'à présent, nous avons établi ces faits à propos de la copie de texte à partir d'Acrobat Reader ou d'Acrobat Professional:
C'est le cas pour GS sous Windows XP ainsi que GS sous Linux.
La sortie de Ghostscript v8.71 fonctionne assez bien pour ce fichier.
C'est le cas pour GS sous Windows XP ainsi que GS sous Linux.
Même pour une sortie où le copier-coller est cassé, Enregistrer comme texte ... le fait.
Je ne comprends toujours pas pourquoi cela devrait être le cas. Mais cela ressemble clairement à une sorte de régression (peut-être mineure) de Ghostscript sur son chemin de la v8.71 à la 9.02.
Essayons maintenant d'autres logiciels de visualisation PDF avec les fichiers PDF «critiques»:
Remarque, il existe encore d'autres différences, mais très mineures, entre tous les lecteurs PDF «de travail» où mon verdict était copier-coller . Comme un tiret manquant ici, ou des espaces doublés entre les mots là-bas, et d'autres choses de ce genre ... Je n'ai aucune explication actuellement pourquoi cela peut être, mais c'est probablement la même cause profonde pourquoi il y a un grand écart entre les produits Adobe (qui n'ont pas de copier / coller de travail pour ce fichier) l'un et l'autre "le reste du monde".
la source