将 PDF 或 FDF 转换为 CSV?

jtd*_*jtd 4 pdf libreoffice

这看起来很疯狂,但是虽然 Libre Base 可以将表单导出为 PDF,但无法将完成的表单数据从 PDF 导入 Libre Base。

一种想法是将 PDF 表单数据提取到 FDF(或不友好的 CSV),然后将其转换为友好的 CSV,此时您可以将 CSV 数据复制并粘贴到 Libre Base 中。

  • 如何将 PDF、FDF 或不友好的 CSV 文件转换为友好的 CSV 文件:
    • 第 1 行:“字段名称 1,字段名称 2,...”
    • 第 2 行:“值 1,值 2,...”

Ge.tt 上的有用文件直到 2015,02,25

  1. 带有“提交格式”的超级基本空白 pdf 作为 FDF
    • Libre Base > 表单 > 编辑 > 打开数据库对象 --> 文件 > 导出为 PDF
  2. 由 (1) 制成的填充 PDF
    • 手动输入数据
  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。

αғs*_*нιη 5

如何将 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
Run Code Online (Sandbox Code Playgroud)

选项 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'; 
Run Code Online (Sandbox Code Playgroud)

上述命令的简短版本是:

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

选项 C:

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

如何将不友好的 CSV 转换为友好的 CSV ?

选项A:

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)
Run Code Online (Sandbox Code Playgroud)

选项 B:

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
Run Code Online (Sandbox Code Playgroud)

*请注意,此命令是一个线性命令。所以为了运行它,你必须输入/复制这两行。

这个的简短版本是:

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

选项 C:

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'
Run Code Online (Sandbox Code Playgroud)

甚至这个:

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

如何将 PDF 转换为 CSV?

我将在pdfgrep明天完成解决方案,但如果您想自己尝试,请使用以下命令:

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)
Run Code Online (Sandbox Code Playgroud)

它需要处理输出格式。如果您只想获取整个单词,请使用该-C 0选项。祝你好运,我希望有所帮助;)