Это кажется сумасшедшим, но хотя Libre Base может экспортировать форму в формате PDF, нет способа импортировать заполненные данные формы из PDF в Libre Base.
Одна идея состоит в том, чтобы извлечь данные формы PDF в FDF (или недружественный CSV), а затем преобразовать их в дружественный CSV, после чего можно копировать и вставлять данные CSV в базу Libre.
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
* Примечание: Libre Base также можно использовать для экспорта пустой формы в виде XML или HTML, но я не знаю, как вводить данные в эти файлы и импортировать эти данные обратно в База.
Опция 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)
Опция 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'
*Обратите внимание, что эта команда является одним линейным. таким образом для выполнения его необходимо вводить/копировать обе строки.
И короткая версия для этого была бы:
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)
Я завершу решение с pdfgrep
завтра, но если Вы хотите попробовать его за себя, вот команда:
pdfgrep 'CompanyName|CountryOrRegion|EmailAddress' filled_form-submit_format_fdf.pdf
Это должно работать над выходным форматом. Если Вы хотите получить только целые слова, используйте -C 0
опция. удача и я надеемся, помогает ;)
Ответ особенно Ваш комментарий здесь:
мне жаль, что Основа не могла декодировать файл PDF, который Основа создала
нет, это не разумно , чтобы ожидать, что любой программа должна быть в состоянии считать PDF, который это генерировало, не больше, чем ожидание, что принтер в состоянии взболтать назад лист, который это только что распечатало и предоставление Вас назад Ваш документ.
PDF является форматом печати/архивирования. Это в основном (1), ряд инструкций отчасти "поместил Word привет в положении x, y на странице". Таким образом, когда Вы видите в PDF:
нет никакого пути к компьютерной программе, чтобы сказать - ли это две строки на три столбца или две строки на два столбца, содержащие пробелы в нем (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 2, действительно.
(3) я даже видел PDFs, куда программа создателя пошла длинные фрагменты, чтобы сделать это почти невозможным, путем помещения каждого глифа независимо и случайным образом на странице, сделать подделку в него очень трудной. Нет, я не могу больше находить пример...
(4) от пакета poppler-utils
LibreOffice может произвести форму PDF.
Получение данных оттуда к CSV может быть достигнуто с помощью свободного Читателя Foxit, который работает хорошо под Бионическим Бобром 18.04.
С заполненной формой, загруженной в выборе Читателя Foxit "форма" от "подключения", выпадают. Кнопка инструментов должна затем предложить "Данные Формы Экспорта". Окно сохранения затем предложит выбор XML, XFDF (независимо от того, что это), TXT и CSV.