Вверх ↑
Этот топик читают: Гость
Ответов: 537
Рейтинг: 14
#46: 2024-01-05 00:36:31 ЛС | профиль | цитата
Gunta писал(а):
Если кто-то знает другой более лёгкий способ, прошу поделится.

Сделал на python

import camelot
import os

def main():
pdf_path = os.path.join("input", "2.pdf")
pdf = camelot.read_pdf(pdf_path, flavor="lattice", pages="all")
for table in pdf:
csv_file = os.path.join("output", f"{table.page}.csv")
table.to_csv(csv_file, sep='\t', index=False, encoding='utf-16-le')
print(f"Saved {csv_file}")

if __name__ == "__main__":
main()
Нужно установить библиотеки

camelot-py==0.11.0
cffi==1.16.0
chardet==5.2.0
charset-normalizer==3.3.2
click==8.1.7
cryptography==41.0.7
distro==1.9.0
et-xmlfile==1.1.0
ghostscript==0.7
JPype1==1.5.0
numpy==1.26.3
opencv-python==4.9.0.80
openpyxl==3.1.2
packaging==23.2
pandas==2.1.4
pdfminer.six==20231228
pycparser==2.21
pypdf==3.17.4
python-dateutil==2.8.2
python3-ghostscript==0.5.0
pytz==2023.3.post1
six==1.16.0
tzdata==2023.4

Вырезает таблицы без всяких заморочек и быстро. Для теств нужно создать папку input и поместить туда файл 2.pdf переименовать, создать папку output. Скомпилировать, файл main.exe перенести рядом с созданными папками
карма: 4

0
Ответов: 651
Рейтинг: 138
#47: 2024-01-05 18:25:17 ЛС | профиль | цитата
Sersey писал(а):
Сделал на python

Я тоже пробовал делать на python но столкнулся с некоторыми проблемами:
1.Результат не 100 %, иногда простую таблицу в упор не видит.
2.Приложения на python не так просто переносить с одного компьютера на другой.
3.При использовании модулей типа auto-py-to-exe начинает блокировать встроенный защитник windows и орать антивирус.
Вот простая схема на VBJScript. Извлекает таблицы из PDF.
Как можно убедиться, из трёх PDF только в Test1.pdf таблица определяется на 100%.
https://forum.hiasm.com/getfile/39654
Для работы схемы MS Office (Word) должен быть установлен на компьютере.
При появлении сообщения от Word поставьте галочку "Больше не показывать это сообщение" и нажмите "ОК".
Сообщение Word.png

Проверено на
- Windows 10 (x64)
- Hiasm v4.05 build 186 (delphi) rev - 2405
- MS Office 365

Редактировалось 1 раз(а), последний 2024-01-05 18:26:16
карма: 14

0
файлы: 1pdf to word.zip [269.1KB] [92]
Ответов: 537
Рейтинг: 14
#48: 2024-01-09 14:13:01 ЛС | профиль | цитата
Есть еще вариант сделать через макрос Excel, попробую сделать и сюда выложу код. Или может у вас получится сделать макрос. Интересует автоматизация процесса, вырезать все таблицы и сохранить в файл.

Редактировалось 1 раз(а), последний 2024-01-09 14:16:00
карма: 4

0
Ответов: 651
Рейтинг: 138
#49: 2024-01-16 16:27:24 ЛС | профиль | цитата
Два одинаковых PDF, один обычный другой как изображение.
Как не покажется странным, но pdf-картинка лучше распознаётся чем обычный pdf.
Выложил на Яндекс диск из-за размера файлов документов.
https://disk.yandex.ru/d/cti31qEwulcnLQ

Проверено на
- Windows 10 (x64)
- Hiasm v4.05 build 186 (delphi) rev - 2405
- MS Office 365
карма: 14

0
Ответов: 651
Рейтинг: 138
#50: 2024-01-16 18:06:26 ЛС | профиль | цитата
Даже такие PDF распознаёт.
https://forum.hiasm.com/getfile/39657

Проверено на
- Windows 10 (x64)
- Hiasm v4.05 build 186 (delphi) rev - 2405
- MS Office 365
карма: 14

0
файлы: 1pdf to excel — 2.zip [204.3KB] [47]
Ответов: 537
Рейтинг: 14
#51: 2024-01-17 10:29:59 ЛС | профиль | цитата
Посмотрел ваш файл, у меня очень плохо распознает таблицы и не все.
Сделал программу на Python, очень хорошо распознает.
https://drive.google.com/file/d/11L_fv-ls5uBjm_sCll9X1kR6rdxlgdu9/view?usp=sharing
В архиве, программа, исходник и инструкция
карма: 4

0
Ответов: 651
Рейтинг: 138
#52: 2024-01-17 15:04:56 ЛС | профиль | цитата
Sersey писал(а):
Сделал программу на Python, очень хорошо распознает.
https://drive.google.com/file/d/11L_fv-ls5uBjm_sCll9X1kR6rdxlgdu9/view?usp=sharing
В архиве, программа, исходник и инструкция

Не удалось запустить ваш вариант распознавателя PDF. Всё время одна и таже ошибка.

Traceback (most recent call last):
File "main.py", line 30, in <module>
File "main.py", line 9, in extract_tables_from_pdf
File "camelot\io.py", line 113, in read_pdf
File "camelot\handlers.py", line 176, in parse
File "camelot\parsers\lattice.py", line 421, in extract_tables
File "camelot\backends\ghostscript_backend.py", line 31, in convert
OSError: Ghostscript is not installed. You can install it using the instructions here: https://camelot-py.readthedocs.io/en/master/user/install-deps.html
[11464] Failed to execute script 'main' due to unhandled exception!

Редактировалось 2 раз(а), последний 2024-01-17 15:36:02
карма: 14

0
Ответов: 537
Рейтинг: 14
#53: 2024-01-18 00:02:56 ЛС | профиль | цитата
Gunta писал(а):
Не удалось запустить ваш вариант распознавателя PDF

Так похоже в питоне не понимаете. Сначала нужно установить сам питон, потом библиотеки из файла requirements.txt командой pip install -r requirement.txt . Установка пакетов. А у тебя, там же написано, что нет пакетов.
Команда python main.py camelot lattice "тут путь к пдф" это пример
Программа скомпилирована, пробуйте, или stream вооще все видит и распознает
Как в консоли напишете, так и будет. Для распознания использовал библиотеку camelot, до этого много тестировал, эта лучшая известная мне.


P.S Даже на c# делал прогу и проверял как распознает, гавно, еше хуже чем vbs через World, кошмар. Разные библиотеки тоже пробовал. Бред

Редактировалось 2 раз(а), последний 2024-01-18 00:48:31
карма: 4

0
Ответов: 651
Рейтинг: 138
#54: 2024-01-18 13:29:46 ЛС | профиль | цитата
Sersey, Да в том то и дело что распознавать pdf нужно не мне, а бухгалтерии.
Невозможно им объяснить, как пользоваться python. То что им нужно это нажать на кнопку, выбрать папку с файлами и далее загрузить в свой 1С.
Я уже писал ранее, что на python не так легко создать exe-файл чтобы он работал на другом компьютере без танцев с бубном.
Удалил все три версии Pyton, что были установлены у меня на компьютере.
Установил по новой версию 3.11. Установил все модули и зависимости и вот результат.

Команда - Команда " main.py" camelot lattice ".\PDF to Excel\readable_pdf.pdf"
Заканчивается ощибкой (ошибка в предыдущем моём сообщеннии).
Команда - " main.py" camelot stream ".\PDF to Excel\readable_pdf.pdf"
Создаёт файл 0.csv вот такого вида.
"Внимание! Оплата данного счет-договора означает согласие с условиями поставки товара. Уведомление об"
"оплате обязательно, в противном случае не гарантируется наличие товара на складе."
"Образец заполнения платежного поручения"
"БИК
044525593
АО ""АЛЬФА-БАНК"" г Москва"
"Сч. №
30101810200000000593"
"Банк получателя"
"Сч. №
40702810902870003369"
"7728456472
КПП 772801001"
"ИНН"
"Счет-договор № УТ-777 от 29 февраля 2020 г."
"ООО ""Сервер Гейт"", ИНН 7728456472, КПП 772801001, 117420, Москва г, Профсоюзная ул, дом № 57,"
"Поставщик:"
"комната 39, тел.: 8 800 222 86 42"
"Покупатель: Наш самый дорогой и любимый клиент"
"Москва, Красная площадь, д. 1
Доставка:"
"1.
Предметом настоящего Счета-договора является поставка товарно-материальных ценностей (далее - ""товар""), бывших в употреблении,"
"при этом все характеристики товаров позволяют их использовать по прямому назначению."
"2.
Оплата настоящего Счета-договора означает согласие Покупателя с условиями и сроками оплаты товара, его поставки"
"и гарантийного обслуживания."
"3.
Настоящий Счет-договор действителен в течение 2 (двух) дней банковских дней с момента его выставления включительно."
"При отсутствии оплаты в указанный срок настоящий Счет-договор признается недействительным."
"4.
Днем оплаты по настоящему Счету-договору является день зачисления денежных средств, указанных в Счете-договоре,"
"на расчетный счет Поставщика."
"5.
Оплата Счета-договора третьими лицами, а также неполная (частичная) оплата Счета-договора не допускается. Покупатель не имеет"
"права производить выборочную оплату позиций Счета-договора и требовать поставку товара по выбранным позициям."
"6.
Поставщик вправе не выполнять поставку товара до зачисления оплаты на расчетный счет."
"7.
Поставка товара может быть осуществлена:"
"1)
путем доставки товара Покупателю и за его счет силами Поставщика;"
"2)
посредством выборки товара Покупателем со склада Поставщика, расположенного по адресу: г. Москва, ул. Профсоюзная, д. 57"
"(далее – «самовывоз»)."
"8.
Способ поставки товара указывается в поле Счета-договора «Способ поставки». В зависимости от выбранного Покупателем способа"
"поставки товара применимы соответствующие пункты Счета-договора."
"9.
Доставка товара Поставщиком осуществляется по адресу, указанному Покупателем в поле Счета-договора «Способ поставки»."
"10. Поставщик обязан доставить оплаченный товар и передать его в транспортную компанию в течение 14 (четырнадцати) рабочих дней с момента"
"зачисления оплаты на расчетный счет."
"11. В случае, когда Покупатель осуществляет самовывоз товара, то товар должен быть принят Покупателем не позднее 10 (десяти) рабочих"
"дней со дня получения им информации о готовности товара для передачи от Поставщика. Указанная информация может быть направлена"
"телефонограммой, по электронной почте, посредством факсимильной связи."
"12. В случае непринятия товара в срок, указанный в п. 11. Счета-договора, Поставщик оставляет за собой право отказаться от исполнения"
"условий данного Счета-договора, вернув Покупателю предоплату за товар на его расчетный счет, с которого оплата товара была произведена, в течении"
"20 рабочих дней."
"13. Покупатель обязан принять товар лично или через уполномоченного представителя. Передача товара осуществляется при"
"предъявлении документа, удостоверяющего личность представителя Покупателя (паспорт гражданина РФ, дипломатический"
"паспорт, служебный паспорт и паспорт моряка (удостоверение личности моряка), и доверенности, оформленной в установленном"
"законодательством РФ порядке, оригинал которой передается Поставщику. Если Товар передается Покупателю в лице"
"руководителя, проставление оттиска печати Покупателя на товарной накладной обязательно, если представителю по доверенности"
"- проставление оттиска печати Покупателя не обязательно."
"14. Отсутствие у Покупателя при доставке товара надлежащим образом оформленной доверенности или отсутствие печати Покупателя"
"является основанием для отказа в передаче товара Покупателю и возврата товара на склад Поставщика. В этом случае товар"
"считается принятым Поставщиком на ответственное хранение на срок не более 3 (трех) календарных дней. По истечению"
"указанного срока Поставщик имеет право отказаться от исполнения условий данного Счета-договора."
"15. Подписание Покупателем или его уполномоченным представителем товарной накладной означает согласие Покупателя с"
"комплектностью и надлежащим внешним видом товара."
"16.
Гарантийное обслуживание товара, на который установлен гарантийный срок, не должно превышать 45 (Сорока пяти) календарных"
"дней. Условия предоставления гарантии размещены по ссылке: https://servergate.ru/guarantee.pdf"


Половина PDF вообще не обрабатываются.

Редактировалось 2 раз(а), последний 2024-01-18 13:33:19
карма: 14

0
Ответов: 537
Рейтинг: 14
#55: 2024-01-23 14:09:10 ЛС | профиль | цитата
Gunta писал(а):
Gunta


https://drive.google.com/file/d/110FEZTggtLUGRyILMbp7a6zZbmuSc3KM/view?usp=drive_link

Проблема была в том, что библиотека camelot нуждалась в библиотеке ghostscript, которая качается отдельно. Теперь в коде она линкуется и должна работать нормально (т. е. екзешник должен работать везде). Бинарник был переименован из main.exe в lib.dll. PDF to Excel.exe запускает lib.dll, как екзешник.

Если вам нужно будет скомпилировать программу, то нужен будет ghostscript. Все зависимости находятся в requirement.txt (pip install -r requirement.txt). Для компиляции нужен pyinstaller (можно установить через pip). pyinstaller ./main.py - эта команда компилирует программу (если перейти в директорию с проектом)
карма: 4

0
Ответов: 651
Рейтинг: 138
#56: 2024-01-23 21:46:42 ЛС | профиль | цитата
Sersey писал(а):
https://drive.google.com/file/d/110FEZTggtLUGRyILMbp7a6zZbmuSc3KM/view?usp=drive_link

Нет доступа.png
карма: 14

0
Ответов: 537
Рейтинг: 14
#57: 2024-01-24 00:38:19 ЛС | профиль | цитата
Прошу прощения, доступ есть
карма: 4

0
Ответов: 651
Рейтинг: 138
#58: 2024-01-24 07:20:27 ЛС | профиль | цитата
Sersey, Протестировал. Результаты не впечатлили. (PDF-файлы для тестов - https://disk.yandex.ru/d/PbyjMm4loWm5xA )
Python:
Извлекает таблицы из 2–5% PDF-файлов.
Не определяет таблицы, которые расположены внутри текста и в многостраничных PDF.
Хорошо определяет если таблица только одна на странице и в документе PDF можно выделить и скопировать текст.
VBJScript:
Находит и распознаёт таблицы в 80–90 % PDF-файлов.
Хорошо распознаёт таблицы в многостраничных и в отсканированных документах.
Главный недостаток – на компьютере должен быть установлен MS Word последних версий.

Редактировалось 1 раз(а), последний 2024-01-24 07:20:42
карма: 14

0
58
Сообщение
...
Прикрепленные файлы
(файлы не залиты)