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.
pdftk filled_form-submit_format_fdf.pdf dump_data_fields output filled_form.csv
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.
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)
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)
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;)
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:
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
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.