web-dev-qa-db-fra.com

Convertir PDF ou FDF en CSV?

Cela semble fou, mais Libre Base peut exporter un formulaire au format PDF, il n’existe aucun moyen d’importer les données de formulaire complétées à partir de PDF dans Libre Base.

Une idée consiste à extraire PDF les données de formulaire au format FDF (ou un fichier CSV peu convivial), puis à les convertir en un fichier CSV convivial. Vous pouvez ensuite copier et coller des données CSV dans Libre Base.

  • Comment puis-je convertir un fichier CSV PDF, FDF ou peu convivial en un fichier CSV convivial avec:
    • Ligne 1: "FieldName1, FieldName2, ..."
    • Ligne 2: "Valeur1, Valeur2, ..."

Fichiers utiles sur Ge.tt jusqu'en 2015,02,25 :

  1. pdf vierge super basique avec "format de soumission" comme FDF
    • Libre Base> Formulaires> Modifier> Ouvrir un objet de base de données -> Fichier> Exporter au format PDF
  2. Rempli PDF composé de (1)
    • Tapez les données manuellement
  3. Données CSV extraites de (2)
    • pdftk filled_form-submit_format_fdf.pdf dump_data_fields output filled_form.csv
  4. Données FDF extraites de (2)
    • pdftk filled_form-submit_format_fdf.pdf generate_fdf output filled_form.fdf

* Remarque: Vous pouvez également utiliser Libre Base pour exporter un formulaire vierge au format XML ou HTML, mais je ne sais pas comment entrer des données dans ces fichiers ni les importer dans Base.

4
jtd

Comment convertir FDF en CSV?

Option A:

awk -F "[()]" '{ if ($1=="/V ") value[$2];} \
    END {printf( "CompanyName\tEmailAddress\t\tCountryOrRegion\n" ); \
           for (x in value)printf("%s\t", x);print "" ; \
    }' filled_form.fdf > filled_form.CSV

Option B:

grep -oP '(?<=\/T \(txt).*(?=\))' filled_form.fdf |awk '{ORS=(NR%3?",":RS)}1'; \
grep -oP '(?<=\/V \().*(?=\))' filled_form.fdf |awk '{ORS=(NR%3?",":RS)}1'; 

La version courte de la commande ci-dessus serait:

paste -sd, <(grep -oP '(?<=\/T \(txt).*(?=\))' filled_form.fdf) <(grep -oP '(?<=\/V \().*(?=\))' filled_form.fdf)

Option C:

awk 'NR%2==0{type[$0]} NR%2{value[$0]} END{for (x in type)printf("%s\t", x);print "" ;for (y in value)printf("%s\t", y);print "" ;}' <(grep -oP '(?<=\/T \(txt|\/V \().*(?=\))' filled_form.fdf)

Comment convertir un fichier CSV inamical en un fichier CSV convivial?

Option A:

awk -F: '{ if ($1=="FieldValue") value[$2];} \
    END {printf( "CountryOrRegion\tCompanyName\tEmailAddress\n" ); \
           for (x in value)printf("%s\t", x) ;print ""; \
    }' filled_form.csv > friendly_filled_form.CSV

Option B:

grep -oP '(?<=FieldName: txt).*' filled_form.csv |awk '{ORS=(NR%3?",":RS)}1'; \
grep -oP '(?<=FieldValue: ).*' filled_form.csv |awk '{ORS=(NR%3?",":RS)}1'

* Notez que cette commande est un linéaire. donc pour l'exécuter, vous devez taper/copier les deux lignes.

Et la version courte pour celui-ci serait:

paste -sd, <(grep -oP '(?<=FieldName: txt).*' filled_form.csv) <(grep -oP '(?<=FieldValue: ).*' filled_form.csv)

Option C:

awk 'NR%2{type[$0]} NR%2==0{value[$0]} END{for (x in type)printf("%s\t", x);print "" ;for (y in value)printf("%s\t", y);print "" ;}' <(grep -oP '(?<=FieldName: txt|FieldValue: ).*' filled_form.csv)

ou même celui-ci:

awk 'NR%2{type[$0]} NR%2==0{value[$0]} END{for (x in type)printf("%s\t", x);print "" ;for (y in value)printf("%s\t", y);print "" ;}' <(awk -F'FieldValue: |FieldName: txt' 'NF>1{print $2}' filled_form.csv)

Comment convertir PDF en CSV?

Je compléterai la solution avec pdfgrep demain mais si vous voulez l'essayer vous-même, voici la commande:

pdfgrep 'CompanyName|CountryOrRegion|EmailAddress' filled_form-submit_format_fdf.pdf

Cela doit fonctionner sur le format de sortie. Si vous souhaitez obtenir uniquement des mots entiers, utilisez l'option -C 0. bonne chance et j'espère aide;)

5
αғsнιη

Répondre surtout à votre commentaire ici:

Je souhaite que Base puisse décoder un fichier PDF créé par cette base

Non, il est pas raisonnable de s’attendre à ce que n’importe quel programme soit capable pour lire un PDF qu'il a généré, il ne faut pas non plus s'attendre à ce qu'un imprimeur puisse restituer une feuille qu'il vient d'imprimer et vous rendre votre document.

PDF est un format d'impression/archivage. C’est fondamentalement (1) une série d’instructions du type "met le mot hello à la position x, y dans la page". Alors, quand vous voyez dans un PDF:

example PDF

Il n’ya aucun moyen pour un programme informatique de dire s’il s’agit de deux lignes de trois colonnes ou de deux lignes de deux colonnes contenant des espaces (2). Le nombre 3 pourrait être un 2,95 arrondi, même. Vous ne pouvez pas savoir parce que l'info n'est tout simplement pas là. Donc non, vous ne pensez jamais qu'il soit possible de revenir de PDF à vos données (3).

Cependant, vous pouvez essayer de convertir les informations en éléments plus gérables avec, par exemple, pdftotext (4):

[romano:~/tmp] 1 % pdftotext Untitled1.pdf; cat Untitled1.txt
Sheet1

shiny
mint

new
used

3
1

Page 1

... et utilisez ensuite des scripts, une édition manuelle, peu importe, pour vous en servir.


Notes de bas de page:

(1) vraiment, vraiment euphémisme ici.

(2) C'est 2 par 2, vraiment.

(3) J'ai même vu des fichiers PDF dans lesquels le programme du créateur a fait de longs efforts pour rendre cela presque impossible, en plaçant chaque glyphe de manière indépendante et au hasard dans la page, ce qui rend la modification très difficile. Non, je ne trouve plus l'exemple.

(4) du paquet poppler-utils

3
Rmano

LibreOffice peut produire un formulaire pdf.

Vous pouvez obtenir les données d’un fichier CSV à l’aide de la version gratuite de Foxit Reader qui fonctionne bien sous Bionic Beaver 18.04.

Avec un formulaire rempli chargé dans Foxit Reader, sélectionnez "formulaire" dans le menu déroulant "connecter". Un bouton d'outil devrait alors offrir "Exporter les données de formulaire". La fenêtre de sauvegarde proposera alors les choix suivants: XML, XFDF (quoi que ce soit), TXT et CSV.

0
user824808