Чтение PDF из 1с

1. ch-15 15.01.14 14:14 Сейчас в теме
Приветствую. Приходит накладная в формате pdf, необходимо вытащить данные (не скан). Кто нибудь решал похожую задачу? Поделитесь решением.
cherkass; Азбука Морзе; +2 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. cool.vlad4 2 15.01.14 14:36 Сейчас в теме
(1) ch-15, можно использовать вариант как в http://infostart.ru/public/138484/ - но по моему недовольному комментарию там, видно что решение далеко от идеала. лучше написать ВК на базе все той же mupdf. но проблема вся в том, что считывается именно текст, без всякого форматирования. меня это не устроило.
2. Азбука Морзе 105 15.01.14 14:29 Сейчас в теме
у меня в плане на следующий месяц стоит подобная задача. Плюсую, чтоб быть в курсе:)
3. ch-15 15.01.14 14:33 Сейчас в теме
Нашел такое решение:


файл="C:\Doc187.pdf";
Объект= новый ИзвлечениеТекста(файл);
ТекстФ=Объект.ПолучитьТекст();
Сообщить(ТекстФ);


Для работы нужно установить Adobe PDF IFilter v6.0 ( http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=2611&fileID=2457 )

Вытягивает все одной строкой, но разобрать можно.
Lusik; Basil_Kudinov; DrAku1a; Pux12345; dour-dead; ra9000; +6 Ответить
6. cool.vlad4 2 15.01.14 14:38 Сейчас в теме
(3) ch-15, делал я так. нифига у меня ничего не получилось. у меня такой вопрос. вы это решение проверяли?
4. Boneman 298 15.01.14 14:35 Сейчас в теме
7. whtblck 96 15.01.14 16:20 Сейчас в теме
года 3-4 назад решал одному клиенту подобную задачу, на 7-ке.
может тупо, может в лоб...
короче, в и-нете надыбал бесплатную программулю, работала кроме оконного режима из командной строки. передавал на входе файл pdf, на выходе получал текстовик.
дальше распарсил как мне нужно и все...
как называлась программуля - убейте не вспомню
8. cool.vlad4 2 15.01.14 16:23 Сейчас в теме
(7) whtblck, чего вспоминать, когда в (4) и (5) уже привели ссылку на публикацию, где и используется консольная программа, авторство которой не принадлежит опубликовавшему обработку. pdftotext. да, что там помнить. берется гугль, вводится - pdf text extractor open source or free
10. whtblck 96 15.01.14 16:50 Сейчас в теме
(7)точно! pdftotext! как можно было забыть такое интуитивнопонятное название :)
9. cool.vlad4 2 15.01.14 16:24 Сейчас в теме
для веб клиента вообще можно рискнуть и попробовать использовать мозиловскую pdf.js.
11. Alfer 15.01.14 17:02 Сейчас в теме
можно из foxitReader - сохранить как текст
12. SeverBaP 5 15.01.14 17:13 Сейчас в теме
Раньше писал это счастье вот наброски
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогОткрытияФайла.Фильтр = НСтр("ru = ""Текст""; en = ""Text""")+"(*.pdf)|*.pdf";
	ДиалогОткрытияФайла.Заголовок = "Выберите файл";
	ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
	Если Не ДиалогОткрытияФайла.Выбрать() Тогда
		Возврат;
	КонецЕсли;
	ФайлPDF = ДиалогОткрытияФайла.ПолноеИмяФайла;
	
	КаталогВременныхФайлов = КаталогВременныхФайлов();
	
	ДанныеОДоставке=Новый ТаблицаЗначений;
	ДанныеОДоставке.Колонки.Добавить("ТипЗаявки");
	ДанныеОДоставке.Колонки.Добавить("НомерВКС");
	ДанныеОДоставке.Колонки.Добавить("НомерНаш");
	ДанныеОДоставке.Колонки.Добавить("Субагент");
	ДанныеОДоставке.Колонки.Добавить("Доставка");
	ДанныеОДоставке.Колонки.Добавить("Самовывоз");
	ДанныеОДоставке.Колонки.Добавить("Чек");
	ДанныеОДоставке.Колонки.Добавить("Компл");
	ДанныеОДоставке.Колонки.Добавить("Забор");
	ДанныеОДоставке.Колонки.Добавить("Подготовка");
	ДанныеОДоставке.Колонки.Добавить("ПолучиноОтКлиента");
	ДанныеОДоставке.Колонки.Добавить("ОбъявленнаяСтоиомсть");
	
	МакетУтилиты = ПолучитьМакет("pdftotext");
	Адрес = ПоместитьВоВременноеХранилище(МакетУтилиты, Новый УникальныйИдентификатор);
	ФайлУтилиты1 = КаталогВременныхФайлов + "pdftotext.exe";
	ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
	УдалитьИзВременногоХранилища(Адрес);
	ДанныеХранилища.Записать(ФайлУтилиты1);
	
	МакетУтилиты = ПолучитьМакет("hstart");
	Адрес = ПоместитьВоВременноеХранилище(МакетУтилиты, Новый УникальныйИдентификатор);
	ФайлУтилиты2 = КаталогВременныхФайлов + "hstart.exe";
	ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
	УдалитьИзВременногоХранилища(Адрес);
	ДанныеХранилища.Записать(ФайлУтилиты2);
	
	МакетУтилиты = ПолучитьМакет("xpdfrc");
	Адрес = ПоместитьВоВременноеХранилище(МакетУтилиты, Новый УникальныйИдентификатор);
	ФайлУтилиты3 = КаталогВременныхФайлов + "xpdfrc";
	ДанныеХранилища = ПолучитьИзВременногоХранилища(Адрес);
	УдалитьИзВременногоХранилища(Адрес);
	ДанныеХранилища.Записать(ФайлУтилиты3);
	
	ТекстКоманды = """" + КаталогВременныхФайлов + "hstart.exe"" /NOCONSOLE /WAIT ""pdftotext.exe -layout """ + ФайлPDF + """ """ + КаталогВременныхФайлов + "temp.txt""""";
	
	WshShell = Новый COMОбъект("WScript.Shell");
	WshShell.Run(ТекстКоманды, 5, 1);
	
	Текст = Новый ЧтениеТекста(КаталогВременныхФайлов+"temp.txt", КодировкаТекста.UTF8);
	Стр = Текст.ПрочитатьСтроку();
	ЕстьНачало=Ложь;
	Пока Стр <> Неопределено Цикл 
		Если НЕ ЕстьНачало Тогда 
			Пока Найти(Стр,"  ")>0 Цикл 
				Стр=СтрЗаменить(Стр,"  "," ");
			КонецЦикла;
			Если СокрЛП(стр)="1 2 3 4 5 6 7 8 9" Тогда 
				ЕстьНачало=Истина;
			КонецЕсли;
		ИНаче
			Если Найти(Стр,"Итого:")>0 Тогда 
				ЕстьНачало=Ложь;
				Продолжить;
			КонецЕсли;
			Стр=СокрЛП(Стр);
			Пока Найти(Стр,"  ")>0 Цикл 
				Стр=СтрЗаменить(Стр,"  "," ");
			КонецЦикла;
			ПервыйПробел=Найти(Стр," ");
			Если ПервыйПробел>0 Тогда 
				Попытка
					ЧИслостроки=Число(Сред(Стр,1,ПервыйПробел));
				Исключение
					ЧИслостроки=0;
				КонецПопытки;
				массивДанных=Новый Массив;
				Если ЧИслостроки>0 Тогда 
					массивДанных=РасшифроватьСтрокуВМассив(Стр);
				ИНаче
					массивДанных.Очистить();
				КонецЕсли;
				Если массивДанных.Количество()>7 Тогда 
					СтрокаВтаблице1С=ДанныеОДоставке.Добавить();
					СтрокаВтаблице1С.НомерВКС=СокрЛП(массивДанных[2]);
					СтрокаВтаблице1С.НомерНаш=СокрЛП(массивДанных[2]);
					СтрокаВтаблице1С.ТипЗаявки="заявка";
					СтрокаВтаблице1С.Доставка=Число(массивДанных[6]);
					СтрокаВтаблице1С.Чек=Число(массивДанных[7]);
					СтрокаВтаблице1С.ПолучиноОтКлиента=Число(массивДанных[5]);
					СтрокаВтаблице1С.ОбъявленнаяСтоиомсть=Число(массивДанных[4]);
				КонецЕсли;	
			КонецЕсли;	
		КонецЕсли;
		Стр = Текст.ПрочитатьСтроку();
	КонецЦикла;   
	Текст.Закрыть();
	УдалитьФайлы(КаталогВременныхФайлов + "temp.txt");
	УдалитьФайлы(КаталогВременныхФайлов + "pdftotext.exe");
	УдалитьФайлы(КаталогВременныхФайлов + "hstart.exe");
	УдалитьФайлы(КаталогВременныхФайлов + "xpdfrc");
Показать

так что вот так
Прикрепленные файлы:
hstart.exe
pdftotext.exe
xpdfrc.exe
user694381_e200285; Irwin; volex; Chronic; Lutcenko; aminkin; Aparatus; _Sedoy; kovaleks78; ch-15; +10 Ответить
13. ch-15 17.01.14 18:58 Сейчас в теме
(12) SeverBaP, Спасибо!! То что нужно.
Прикрепленные файлы:
ЧтениеPDF.epf
user694381_e200285; aleksey.kubovtsov; Zazamuh; volex; olga1512; veklyuk; Lenten; msergeev79; vulli; Chronic; Divedition; Lutcenko; dimas103; tp_home@mail.ru; Aparatus; depresnjak; _Sedoy; +17 Ответить
15. SeverBaP 5 20.01.14 17:18 Сейчас в теме
(13) ch-15, Ага всегда рад помочь!
18. Dim.Gadget 30.09.16 10:33 Сейчас в теме
(13) Земной поклон вам господа! Спасибо огромное!
26. aleksey.kubovtsov 117 20.10.23 12:01 Сейчас в теме
(13) Спасибо , помогло в решении задачи.

Нужно было реализовать чтение Этикетки ОЗОН в PDF формате.
Озон в штрихкод какой-то свой уникальный номер записывают.
Мы никак не могли этот УИД связаться с нашим номером отправления при сканировании штрих кода у себя.

Теперь можно!
14. kovaleks78 4 17.01.14 22:06 Сейчас в теме
(12) SeverBaP, спасибо! Пригодилось!
16. SeverBaP 5 20.01.14 17:18 Сейчас в теме
23. zavis11 38 21.05.21 08:17 Сейчас в теме
(12)
pdftotext

Здравствуйте! Вы не знаете почему в некоторых случаях утилита pdftotext возвращает пустую строку при распозновании файла пдф?
24. sssss_aaaaa_2011 21.05.21 09:39 Сейчас в теме
(23) 1. PdfToText не распознает, а вытаскивает текст из файла при его наличии.
2. Текст в pdf наличествовать не обязан, даже если вам кажется что он там есть. Ибо любая страница может быть одной картинкой на всю страницу.
3. Распознают PDF программы типа FineReader.
Irwin; zavis11; +2 Ответить
17. Aleanza 03.03.16 00:31 Сейчас в теме
А может по аналогии с документооборотом можно - распознавать и использовать?
19. Aparatus 17 21.11.17 21:31 Сейчас в теме
Благодарю, очень лаконичное решение.
20. Margo462 485 04.01.18 15:19 Сейчас в теме
Я тоже использовала pdftotxt, и все получилось
ПутьКPDF2TXT = "C:\Program Files (x86)\PDF2TXT";
ПутьPDF = Элемент.ПолноеИмя;
pdf = ПутьPDF;
txt = СтрЗаменить(pdf,"pdf","txt");
Команд = ПутьКPDF2TXT+"\pdf2txt.exe " + pdf + " " + txt; 
ЗапуститьПриложение(Команд,,Истина);
ОбъектТ = Новый ИзвлечениеТекста(txt);
ТекстФ = ОбъектТ.ПолучитьТекст();


осталось Вам только программу поискать :)
Trof@; user705522_constantin_h; +2 Ответить
21. Trof@ 12.01.18 03:05 Сейчас в теме
(20) нужно учесть, что имя файла может содержать " " (пробел)

txt = СтрЗаменить(txt," ","");
Команда = ПутьКPDF2TXT+"\pdf2txt.exe" +" """+pdf + """ " + txt;
22. Pux12345 07.07.20 07:48 Сейчас в теме
Коллеги, спасибо огромное. очень нужно. Использую дома. К сожалению, "за так" ничего не осталось! Удачи всем в делах и доброго здравия!!!
25. user1234601 11.05.22 20:42 Сейчас в теме
Добрый день! Может кто подскажет как в 1с можно определить, что pdf файл защищен паролем?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот