J'ai converti un rapport de deux pages en Word pour vérifier quelque chose, et le deuxième paragraphe est revenu comme ceci :
Les revenus ont augmenté au troisième rang des effectifs ont augmenté de quatre, par quart sur la fin de deux tous en soutien. Le recrutement de grands renouvellements a signé dans le plan pour le quatrième trimestre d'août. Marge tenue à plat. est inchangé à six rôles.
Deux colonnes de prose parfaitement ordinaire, lus sur la gouttière ligne par ligne, de sorte que chaque phrase est épissée dans celle à côté. Rien n'était cassé. Le convertisseur a fait exactement ce qu'un convertisseur peut faire, et l'écart entre cela et ce que la phrase "PDF en Word" promet est l'ensemble de ce guide. Chaque sortie citée ci-dessous provient de l'exécution de la conversion, et non de sa description.
tl;dr : Un PDF stocke les glyphes aux coordonnées. Il ne stocke pas de paragraphes, de colonnes, de tables ou de titres, donc un convertisseur doit les déduire des positions, et certaines de ces inférences sont erronées de manière à prévoir. Mesuré sur un rapport de test : deux colonnes entrelacées ligne par ligne, un tableau à quatre lignes aplati sur une ligne en lisant "région Q2 Q3 EMEA 412 455 Amer 388 401 APAC 120 166", un en-tête fusionné dans le paragraphe en dessous, et une page sans couche de texte n'a rien produit du tout. Ce que vous obtenez de manière fiable, c'est une prose modifiable dans l'ordre des pages, ce qui est pour la plupart des emplois que vous vouliez. le Convertisseur PDF en Word Le fait-il dans le navigateur, donc le document n'est pas téléchargé.
Qu'est-ce qui est stocké dans un PDF ?
Instructions pour peindre une page, pas un document.
Un flux de contenu PDF indique des éléments tels que "définir cette police à cette taille, passer à X 60, y 720, afficher ces glyphes". le spécification elle-même est une description d'un modèle de peinture, et les opérateurs de texte sont assis à côté de ceux pour dessiner des lignes et remplir des formes. Il n'y a aucun objet dans le fichier qui signifie "paragraphe", aucun objet qui signifie "il s'agit d'une table", et rien qui enregistre que deux blocs de texte sont des colonnes plutôt qu'un seul large. Le format a été conçu de sorte qu'une page s'imprime de manière identique partout, et il y parvient en décrivant la page comme des marques plutôt que comme du contenu.
Ainsi, un convertisseur reçoit une liste d'exécutions positionnées. pdf.js, l'analyseur sur lequel cela s'exécute, les rend exactement au fur et à mesure que la page les dessine. Dans le fichier de test, la première page en a produit 34 et la page deux a produit 4. Chaque exécution est une chaîne avec un X, un Y, une largeur et une hauteur de police, et l'ordre dans lequel ils arrivent est l'ordre dans lequel la page a été dessinée, ce qui n'est pas nécessairement l'ordre dans lequel vous les lisez.
Tout ce dont un document Word a besoin, ce qu'un PDF n'a pas, le convertisseur doit reconstruire à partir de ces quatre numéros. Cette reconstruction est l'ensemble de ce qui suit, y compris partout où cela va mal.
Comment un convertisseur reconstruit-il des paragraphes à partir de coordonnées ?
en deux passages, avec un seuil sur chacun.
Les groupes de premier passage se déroulent en lignes par ligne de base : les exécutions dont les valeurs Y se situent à une demi-taille de police sont une ligne. Le deuxième regroupe les lignes en paragraphes par l'écart vertical entre eux. Un écart plus grand qu'environ 1,45 fois l'espacement habituel de la ligne commence un nouveau paragraphe, où "habituel" est l'écart médian sur cette page plutôt qu'un nombre fixe, de sorte que la règle s'adapte à un document défini en 9 ou 14 points.
Il y a un troisième seuil à l'intérieur d'une ligne. pdf.js divise souvent un seul mot sur plusieurs exécutions sans écart entre eux, donc la jonction de courses sur un espace transforme "le nom de fichier" en "f i l e n a m e". Le correctif est d'insérer un espace uniquement lorsque l'écart horizontal dépasse un quart de la hauteur de la police, ce qui représente environ la largeur d'un espace de mots réel.
Ces trois chiffres décident presque de tout ce qui concerne la sortie. Quand le résultat est bon, ils avaient raison. Lorsqu'une rubrique s'en tient au paragraphe en dessous, l'écart était inférieur à 1,45 fois la médiane et la règle dit un paragraphe.
Pourquoi deux colonnes sortent-elles entrelacées ?
Parce que la seule preuve d'une colonne est un écart horizontal et que le groupement des lignes examine d'abord la position verticale.
Les deux blocs de ma page de test étaient à X 60 et X 320, avec leurs lignes sur des lignes de base partagées. Le groupement a vu six lignes de base, chacune portant du texte des deux côtés, et lu chacune une traverse. Le résultat est le paragraphe en haut de ce guide : chaque ligne de la colonne de gauche suivie immédiatement par la ligne à côté.
C'est le même échec que les colonnes brouillées dans OCR, et il a la même racine : la commande de lecture est un jugement sur une mise en page, faite de géométrie, par quelque chose qui ne peut pas lire.
Les convertisseurs qui gèrent bien les colonnes effectuent d'abord une étape de segmentation de page, à la recherche d'une bande verticale cohérente d'espaces blancs exécutant la hauteur de la page et en y divisant la page avant tout groupement de lignes. Cela fonctionne sur un journal ou un journal, où la gouttière est large et régulière. Il est moins fiable sur les cas courants, où une barre latérale, un devis de traction ou une table à deux colonnes brise la bande.
Si votre document contient des colonnes, la réponse pratique consiste à vérifier la sortie et à fixer le premier paragraphe de chaque page, ou à convertir une colonne à la fois si le document est suffisamment long pour en valoir la peine.
Qu'arrive-t-il à une table ?
Cela devient une phrase.
Mon fichier de test avait une table à quatre lignes avec trois colonnes. Voici le tout après la conversion :
Region Q2 Q3 EMEA 412 455 AMER 388 401 APAC 120 166
Chaque valeur a survécu. La structure n'a pas fait. Vous ne pouvez pas dire à partir de cette ligne que 412 est la figure Q2 de l'EMEA sans compter les positions et sans connaître la forme de l'original.
La raison en est que la plupart des PDF ne contiennent pas non plus de tableaux. Un tableau dans un PDF est généralement un texte dessiné en coordonnées avec quelques lignes tracées autour de lui, et les lignes sont des opérations graphiques qui n'ont rien dans le fichier qui les connecte au texte qu'elles joignent. Un convertisseur devrait détecter l'alignement des nombres, déduire une grille et décider quelles exécutions appartiennent à quelle cellule, qui est un problème de recherche plutôt qu'une analyse.
Certains PDF ont une structure réelle, grâce à des balises ajoutées pour l'accessibilité, et celles-ci se convertissent bien mieux. Ils sont une minorité : les PDF tagués proviennent d'une exportation minutieuse de Word ou d'InDesign, et non d'un pilote d'impression.
Si la table est la chose que vous voulez, copiez-la dans une feuille de calcul à la main ou convertissez le PDF en texte et remodeler là-bas. Un fichier Word converti ne vous donnera pas de cellules.
Pourquoi mon titre a-t-il fusionné dans le paragraphe ?
Parce que l'espace en dessous n'était pas assez grand pour trébucher la règle du paragraphe.
À la page deux du fichier de test, l'en-tête "notes" était 40 points au-dessus du corps du texte alors que les lignes du corps étaient écartées de 18 points. Cet écart est de 2,2 fois l'espacement de la ligne, ce qui aurait dû les diviser, et ce n'est pas le cas, car l'écart médian sur une page avec seulement quatre exécutions n'est pas une estimation fiable de quoi que ce soit. La sortie était :
Notes Note 14 covers intercompany revenue and the treatment of
deferred items carried over from the prior year.
C'est la forme honnête de tout le problème. Les règles de seuil fonctionnent bien sur une page avec suffisamment de texte pour établir un rythme de base et mal sur une page peu claire. Une page de titre, une courte note, une page de garde ou un formulaire reviendra souvent sous la forme d'un paragraphe de mise en route.
C'est aussi la chose la plus facile à résoudre après coup. Les en-têtes sont évidents pour un lecteur humain, et presser le retour au bon endroit prend une seconde, ce qui est moins de temps que n'importe quel outil ne prendrait pour bien faire les choses.
Qu'arrive-t-il à une page numérisée ?
Rien ne sort, et c'est le comportement correct.
La troisième page de mon fichier de test n'avait aucun calque de texte, seulement un rectangle gris s'appuyant sur un scan. PDF.js n'a renvoyé aucun exécution et le convertisseur n'a produit aucun paragraphe.
La page est toujours comptée. Il apparaît dans le fichier Word sous la forme d'une page vide, de sorte que la page se brise après qu'elle reste alignée avec l'original, ce qui compte lorsqu'un utilisateur travaille à partir de numéros de page. Un convertisseur qui le lâchait silencieusement décalerait d'un seul coup chaque dernière page.
Un PDF dont les pages sont toutes des images est une numérisation, et aucun convertisseur ne peut en extraire du texte car il n'y a pas de texte à extraire. Ce dont il a besoin, c'est de l'OCR, qui lit l'image des lettres et des suppositions au niveau des caractères, et qui apporte son propre taux d'erreur. La version mesurée de ce métier est Le guide sur ce qui brise l'OCR: Inclinaison au-delà de trois degrés, c'est ce qui ruine un scan, pas une résolution.
Une règle d'or utile : ouvrez le PDF et essayez de sélectionner une phrase avec votre curseur. Si le texte est en surbrillance, un convertisseur peut le lire. Si vous obtenez un rectangle de sélection sur une image, vous avez besoin d'abord d'OCR.
Qu'y a-t-il à l'intérieur du .docx qui sort ?
Trois fichiers dans un zip, et c'est vraiment tout ce qu'il faut.
Un .docx est une archive de conventions d'emballage ouverte, standardisée comme ECMA-376: un zip contenant des parties XML plus un manifeste indiquant ce qu'est chaque partie. Propriete de Microsoft Aperçu du format Parcoure les trois mêmes parties. Le minimum qui s'ouvre comme un document Word est de trois entrées :
| Partie | intention |
|---|---|
[Content_Types].xml |
Déclare le type de média de chaque pièce du package |
_rels/.rels |
Points de la partie document principale |
word/document.xml |
le contenu lui-même |
Tout le reste d'un fichier Word porte généralement, les styles, les polices, les thèmes, les paramètres, les définitions de numérotation, sont facultatifs. Laissez-les de côté et le lecteur applique ses valeurs par défaut.
Le document de test, 83 mots sur trois pages, est arrivé à un .docx de 1 305 octets word/document.xml est de 1 169 octets. Je l'ai ouvert avec le propre lecteur de documents d'Apple, ce que TextEdit et Pages utilisent, et il a rendu chaque paragraphe dans l'ordre avec la rupture de page intacte. Un paquet minimal n'est pas dégradé.
Un détail dans ce XML compte plus qu'il n'y paraît. Chaque course est écrite avec xml:space="preserve". Sans cela, une course commençant ou se terminant par un espace le perd, et chaque ligne qui était enveloppée dans l'original revient avec son dernier mot joint au suivant.
Qu'arrive-t-il aux images ?
Ils sont supprimés et le fichier Word ne le mentionne pas.
Le package écrit ici comporte trois parties et aucune d'entre elles n'est une partie média. Un logo, un graphique, une signature numérisée, une capture d'écran intégrée au rapport : tout est parti, sans espace réservé là où ils étaient. Le texte qui les entourait se ferme comme s'ils n'y étaient jamais allés.
C'est une conséquence de la même conception qui rend la sortie petite et fiable. Transférer une image signifie l'extraire du PDF, décider de son format, l'écrire dans word/media/, ajouter un type de contenu pour cela, ajouter une partie relation et placer un élément de dessin au bon point du flux. Chacun de ces éléments est un endroit où un lecteur rejette le fichier, et un .docx un traitement de texte refuse d'ouvrir est pire qu'un logo manquant.
C'est important pour les documents où une image est le contenu plutôt que la décoration. Un graphique dans un rapport se transforme en rien, et un lecteur du fichier Word n'a aucun moyen de savoir qu'un graphique était jamais là. Vérifiez l'original à côté de la conversion lorsqu'un chiffre est mentionné dans la prose.
Pourquoi le fichier refuse-t-il parfois d'ouvrir ?
Les caractères de contrôle, que XML interdit et les PDF contiennent.
Un calque de texte PDF reprend les caractères de tout ce qui les a produits : les flux de formulaires d'un pipeline d'impression, les octets nuls d'un encodage cassé, d'autres codes de contrôle C0 qui ne signifient rien dans un document. XML 1.0 Ne permet pas la plupart d'entre eux, même s'échappe : la plage de caractères autorisée par la spécification commence à Tab, Newline et chariot retour et saute le reste du bloc C0.
L'échec n'est pas gracieux. Word n'avertit pas ou ne laisse pas tomber le caractère, il refuse d'ouvrir le fichier et indique que le contenu est illisible. Ainsi, le convertisseur supprime ces caractères avant d'écrire, plutôt que d'essayer de leur échapper. Ils n'avaient aucune signification dans la source et ils vous coûteraient tout le document.
Si vous recevez un .docx qu'un traitement de texte rejette comme illisible, c'est la première chose à soupçonner, et c'est pourquoi un convertisseur écrivant à la main du XML doit y penser.
Faut-il convertir en Word ou en texte brut ?
Word Si vous allez le modifier, textez-le si vous allez le traiter.
Ils partagent la même extraction. La différence n'est que ce qui est écrit à la fin : l'un écrit des paragraphes dans un ZIP de XML, l'autre les écrit dans un fichier .txt.
| Tu veux | manier | parce que |
|---|---|---|
| Modifier la prose et l'envoyer | PDF à Word | Structure de paragraphe, sauts de page, quelque chose qu'un collègue peut ouvrir |
| Rechercher, grep ou alimenter un script | PDF en texte | Pas de balisage sur le chemin |
| Gardez la mise en page exactement | Ni l'un ni l'autre | Modifier le PDF ou obtenir le fichier original |
| Lire un scan | OCR d'abord | Il n'y a pas de couche de texte à extraire |
La troisième rangée est celle avec laquelle il vaut la peine de s'asseoir. Si la mise en page est ce qui compte, la conversion en Word est la mauvaise direction, car la conversion est là où la mise en page est perdue. Demandez à qui le PDF a envoyé le fichier à partir duquel il a été exporté. Il faut un message et c'est la seule approche qui conserve le formatage.
Combien de temps dure la conversion ?
Assez long pour lire le fichier, et plus.
Il n'y a pas d'étape d'encodage ni de traitement d'image. Le travail consiste à analyser la structure PDF, à extraire le contenu textuel de chaque page, à regrouper les exécutions et à sérialiser XML dans un zip. Le fichier de test a pris quelques millisecondes, ce qui n'est pas un nombre utile car il s'agissait de trois pages. Un rapport de deux cents pages est limité par l'analyse de PDF.js, ce qui est à peu près linéaire dans le nombre de pages et rapide.
Ce que vous remarquez sur un document volumineux est la mémoire, car le fichier entier est conservé dans l'onglet du navigateur avec la structure analysée. C'est le vrai plafond ici plutôt que la vitesse.
Que faut-il vérifier dans la sortie ?
Quatre choses, dans l'ordre, ils sont susceptibles d'être faux.
- Le premier paragraphe de chaque page. C'est là que les fusions et les en-têtes de colonnes apparaissent.
- N'importe quelle table. Confirmez que les nombres sont présents, puis acceptez que la grille ait disparu et reconstruisez-la si vous en avez besoin.
- Mots avec trait d'union à la fin de la ligne. Un mot brisé sur une ligne dans le PDF revient avec le trait d'union au milieu.
- Nombre de pages. Il doit correspondre à l'original, y compris les pages vierges ou numérisées.
Cette liste prend une minute sur un document de dix pages et est la différence entre un fichier que vous pouvez envoyer et un fichier qui contient discrètement une phrase épissée.
Pourquoi cela s'exécute-t-il dans le navigateur ?
Parce que les documents que les gens convertissent sont les contrats, les déclarations, les lettres, les résultats médicaux et les éléments sous embargo.
La conversion est une analyse et un zip, dont un navigateur se débrouille parfaitement. Le fichier est lu depuis votre disque dans la page, analysé avec PDF.js compilé pour le Web, assemblé dans un .docx en mémoire et renvoyé en téléchargement. Aucune requête ne porte le document, rien n'est stocké sur un serveur et rien n'existe pour quiconque peut être supprimé plus tard.
L'alternative habituelle est un site qui prend votre PDF, le convertit sur une machine dont vous ne savez rien et vous envoie un lien par e-mail. Pour une notice publique, c'est très bien. Pour un contrat de travail, il s'agit d'une décision qu'on ne vous a pas demandée de prendre consciemment.
Le coût est la mémoire de l'onglet sur les fichiers très volumineux, et aucun OCR côté serveur pour les pages numérisées. Les deux sont des limites visibles plutôt que des limites, ce qui vaut le commerce.



