web-dev-qa-db-ja.com

PDFまたはFDFをCSVに変換しますか?

クレイジーに思えますが、Libre BaseはフォームをPDFとしてエクスポートできますが、 完成したフォームデータをPDFからLibre Baseにインポートする方法はありません。

1つのアイデアは、PDFフォームデータをFDF(または非友好的なCSV)に抽出し、それを友好的なCSVに変換して、CSVデータをLibre Baseにコピーアンドペーストできるようにすることです。

  • PDF、FDF、またはわかりにくいCSVファイルを、以下を使用してわかりやすいCSVに変換するにはどうすればよいですか:
    • 行1:「FieldName1、FieldName2、...」
    • 行2:「Value1、Value2、...」

2015年2月25日までのGe.tt上の有用なファイル

  1. 「送信フォーマット」がFDFの超基本ブランクPDF
    • Libre Base> Forms> Edit> Open Database Object-> File> Export as PDF
  2. 記入済みPDF(1)から作成
    • データを手動で入力する
  3. (2)から抽出されたCSVデータ
    • pdftk filled_form-submit_format_fdf.pdf dump_data_fields output filled_form.csv
  4. (2)から抽出されたFDFデータ
    • pdftk filled_form-submit_format_fdf.pdf generate_fdf output filled_form.fdf

*注意:Libre Baseを使用して空白のフォームをXMLまたはHTMLとしてエクスポートすることもできますが、これらのファイルにデータを入力したり、そのデータをBaseにインポートする方法がわかりません。

4
jtd

FDFをCSVに変換する方法は?

オプション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

オプション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'; 

上記のコマンドの短いバージョンは次のとおりです。

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

オプション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)

非友好的なCSVを友好的なCSVに変換する方法は?

オプション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

オプション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'

*このコマンドは1つの線形であることに注意してください。実行するには、両方の行を入力/コピーする必要があります。

そして、これの短いバージョンは次のようになります。

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

オプション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)

またはこれも:

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)

PDFをCSVに変換する方法は?

明日pdfgrepでソリューションを完成させますが、自分で試してみたい場合は、次のコマンドを使用してください。

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

出力形式で動作する必要があります。単語全体のみを取得する場合は、-C 0オプションを使用します。幸運と私は役立つことを願っています;)

5
αғsнιη

ここで特にあなたのコメントに答える:

Baseが作成したPDFファイルをBaseがデコードできるようにしたい

いいえ、合理的ではありませんanyプログラムができるはずです生成されたPDFを読み取るために、プリンタが印刷したばかりのシートをチャーンバックし、ドキュメントを返してくれることを期待しているだけです。

PDFは印刷/アーカイブ形式です。基本的には(1)「ページ内の位置x、yにWordhelloを置く」という種類の一連の命令です。そのため、PDFで見ると:

example PDF

コンピュータープログラムが、2行3列または2行2列でスペースを含むかどうかを判断する方法はありません(2)。数値3は、2.95に切り上げられることもあります。情報が存在しないため、あなたは知ることができません。ですから、PDFからデータに戻ることが可能だとは思わないでしょう(3)。

ただし、たとえばpdftotext(4)を使用すると、情報をより管理しやすいものに変換できます。

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

shiny
mint

new
used

3
1

Page 1

...次に、スクリプト、手動編集などを使用してマッサージします。


脚注:

(1)ここで、本当に控えめに言ってください。

(2)本当に2 x 2です。

(3)作成者プログラムが長いストレッチを行って、ページに各グリフを独立してランダムに配置することでこれをほとんど不可能にし、改ざんを非常に困難にするPDFを見たことがあります。いいえ、私はもう例を見つけることができません...

(4)パッケージpoppler-utilsから

3
Rmano

LibreOfficeはpdfフォームを作成できます。

そこからデータをCSVに取得するには、Bionic Beaver 18.04の下で適切に動作する無料のFoxit Readerを使用します。

完成したフォームをFoxit Readerにロードしたら、「接続」ドロップダウンから「フォーム」を選択します。ツールボタンは、「フォームデータのエクスポート」を提供する必要があります。保存ウィンドウは、XML、XFDF(それが何であれ)、TXTおよびCSVの選択肢を提供します。

0
user824808