这看起来很疯狂,但是虽然 Libre Base 可以将表单导出为 PDF,但无法将完成的表单数据从 PDF 导入 Libre Base。
一种想法是将 PDF 表单数据提取到 FDF(或不友好的 CSV),然后将其转换为友好的 CSV,此时您可以将 CSV 数据复制并粘贴到 Libre Base 中。
pdftk filled_form-submit_format_fdf.pdf dump_data_fields output filled_form.csvpdftk filled_form-submit_format_fdf.pdf generate_fdf output filled_form.fdf*注意:您还可以使用 Libre Base 将空白表单导出为 XML 或 HTML,但我不知道如何将数据输入到这些文件中,也不知道如何将这些数据导入回 Base。
选项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)
选项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)
我将在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选项。祝你好运,我希望有所帮助;)