Конвертировать PDF или FDF в CSV?

Это кажется сумасшедшим, но хотя Libre Base может экспортировать форму в формате PDF, нет способа импортировать заполненные данные формы из PDF в Libre Base.

Одна идея состоит в том, чтобы извлечь данные формы PDF в FDF (или недружественный CSV), а затем преобразовать их в дружественный CSV, после чего можно копировать и вставлять данные CSV в базу Libre.

  • Как преобразовать файл PDF, FDF или недружественный файл CSV в дружественный файл CSV с помощью:
    • Строка 1: «FieldName1, FieldName2, ...»
    • Строка 2: «Value1, Value2, ...»

Полезные файлы на Ge.tt до 2015,02,25 :

  1. Супер базовый пустой PDF с «Отправить формат» в виде FDF
    • Libre Base> Формы> Правка> Открыть объект базы данных -> Файл> Экспорт в PDF
  2. Заполненный PDF из (1)
    • Введите данные вручную
  3. Извлеченные данные CSV из (2) )
    • pdftk filled_form-submit_format_fdf.pdf dump_data_fields output filled_form.csv
  4. Извлеченные данные FDF из (2)
    • pdftk filled_form-submit_format_fdf.pdf generate_fdf output filled_form.fdf

* Примечание: Libre Base также можно использовать для экспорта пустой формы в виде XML или HTML, но я не знаю, как вводить данные в эти файлы и импортировать эти данные обратно в База.

4
задан 13 April 2017 в 15:25

3 ответа

Как преобразовать 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'

*Обратите внимание, что эта команда является одним линейным. таким образом для выполнения его необходимо вводить/копировать обе строки.

И короткая версия для этого была бы:

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
ответ дан 13 April 2017 в 15:25

Ответ особенно Ваш комментарий здесь:

мне жаль, что Основа не могла декодировать файл PDF, который Основа создала

нет, это не разумно , чтобы ожидать, что любой программа должна быть в состоянии считать PDF, который это генерировало, не больше, чем ожидание, что принтер в состоянии взболтать назад лист, который это только что распечатало и предоставление Вас назад Ваш документ.

PDF является форматом печати/архивирования. Это в основном (1), ряд инструкций отчасти "поместил Word привет в положении x, y на странице". Таким образом, когда Вы видите в PDF:

example 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

3
ответ дан 13 April 2017 в 15:25

LibreOffice может произвести форму PDF.

Получение данных оттуда к CSV может быть достигнуто с помощью свободного Читателя Foxit, который работает хорошо под Бионическим Бобром 18.04.

С заполненной формой, загруженной в выборе Читателя Foxit "форма" от "подключения", выпадают. Кнопка инструментов должна затем предложить "Данные Формы Экспорта". Окно сохранения затем предложит выбор XML, XFDF (независимо от того, что это), TXT и CSV.

0
ответ дан 6 October 2019 в 13:08

Другие вопросы по тегам:

Похожие вопросы: