Каталог решений - Работа с файлом PDF из 1С

Работа с файлом PDF из 1С

Работа с файлом PDF из 1С

В наличии

Чтение текста из PDF, разделение на страницы многостраничного файла PDF и выгрузка данных PDF файла.

Категория:

Описание

Всем привет!!! Как-то мне поступило задание прикреплять PDF файлы к документам в 1С, при том что было много документов и один многостраничный PDF файл, который необходимо было разделять на странички и каждая страница соответствовала определенному документу. Естественно мне хотелось автоматизировать полностью весь процесс, чтобы 1с сама разделяла файл PDF на листы, прочитывала каждый лист и сопоставляла его с документом. Я нашла решение и прикрепляю программы, которые мне в этом помогли:)

Программа Pdftk server позволила мне узнать сколько страниц есть в файле PDF:

ИмяИсходногоФайла = _ВыборКаталога; //ПУТЬ К НАШЕМУ МНОГОСТРАНИЧНОМУ ФАЙЛУ PDF
Скрипт = Новый COMОбъект("WScript.Shell");
ИмяКаталогаУтилит = """C:\Program Files (x86)\PDFtk Server\bin\";
КаталогОбмена = "F:\Test\"; //ПУТЬ, ГДЕ СОХРАНИМ ФАЙЛ С ДАННЫМИ О PDF ФАЙЛЕ
		
ИмяФайлаРезультатаInfPDF = КаталогОбмена + "InfPDF.txt";
ТекстКомандыInfPDF = ИмяКаталогаУтилит + "pdftk.exe"" " + ИмяИсходногоФайла + " dump_data output " + """" + ИмяФайлаРезультатаInfPDF + """";
Скрипт.Run(ТекстКомандыInfPDF,0,1);
ФайлАнализа1 = Новый Файл(ИмяФайлаРезультатаInfPDF);
ФайлАнализа1.УстановитьВремяИзменения(ТекущаяДата());
ОбъектInfPDF = Новый ИзвлечениеТекста(ИмяФайлаРезультатаInfPDF);
ТекстInfPDF = ОбъектInfPDF.ПолучитьТекст();
		
Инд = 1;
стр = "";
КоличествоСтраниц = 0;
Пока стр <> "NumberOfPages: " Цикл
   НайтиСтроку = СтрПолучитьСтроку(ТекстInfPDF,Инд);
   Если Лев(НайтиСтроку,13) = "NumberOfPages" Тогда
      RegExp = Новый COMОбъект("VBScript.RegExp");
      RegExp.IgnoreCase = Истина; //Игнорировать регистр 
      RegExp.Global = Истина; //Поиск всех вхождений шаблона 
      RegExp.Pattern = "[^0-9]"; // отбор только чисел
      КоличествоСтраниц = Число(RegExp.Replace(НайтиСтроку, ""));
      Прервать;
   Иначе
      Инд = Инд + 1;
   КонецЕсли;
КонецЦикла;
//В ИТОГЕ МЫ НАШЛИ СТРОКУ ГДЕ ОБОЗНАЧЕНО КОЛИЧЕСТВО СТРАНИЦ, ТАКЖЕ МОЖНО ДОСТАТЬ ДРУГИЕ ДАННЫЕ

Далее программа Pdftk server при помощи команды "cat + "номер страницы"  + output" разбила мне файл PDF по страницам в цикле:

Страница = 1;
Пока Страница <= КоличествоСтраниц Цикл
	ИмяСводногоФайла = "page-" + (Формат(Страница, "ЧЦ=3; ЧВН=")) + ".pdf";        
	ИмяФайлаРезультата = КаталогОбмена + ИмяСводногоФайла;
	ТекстКоманды = ИмяКаталогаУтилит + "pdftk.exe"" " + ИмяИсходногоФайла + " cat " + Страница + " output " + """" + ИмяФайлаРезультата + """";
	Скрипт.Run(ТекстКоманды,0,1);
	ФайлАнализа = Новый Файл(ИмяФайлаРезультата);
	ФайлАнализа.УстановитьВремяИзменения(ТекущаяДата());
	Страница = Страница + 1;
КонецЦикла;

В итоге у меня в папке есть много файлов PDF по одной страничке, теперь мне необходимо прочитать каждый файл при помощи программы PDF2TXT:

Файлы = НайтиФайлы(КаталогОбмена,"*.pdf");
ПутьКPDF2TXT = "C:\Program Files (x86)\PDF2TXT"; 
Для каждого элемент из Файлы Цикл
	ПутьPDF = Элемент.ПолноеИмя;
	pdf = ПутьPDF;
	txt = СтрЗаменить(pdf,"pdf","txt");
	Команд = ПутьКPDF2TXT+"\pdf2txt.exe " + pdf + " " + txt; 
	ЗапуститьПриложение(Команд,,Истина);
	ОбъектТ = Новый ИзвлечениеТекста(txt);
	ТекстФ = ОбъектТ.ПолучитьТекст();
//////ДАЛЬШЕ МОЖЕТЕ ДЕЛАТЬ С ТЕКСТОМ ЧТО ХОТИТЕ, СРАВНИВАЙТЕ, ИЩИТЕ КАКУЮ-ТО ИНФОРМАЦИЮ//////

КонецЦикла;

 

Вот ссылки на программы: 

Pdftk Server

PDF2TXT (на 30 дней)

Решила дополнить статью, так как наша программа PDF2TXT бесплатна всего 30 дней, пришлось искать другой способ преобразования pdf в txt. Так вот, я нашла приложение pdftotext, вот как она работает в 1с:

НашФайл = ("F:\File.pdf");
ПутьКPDFtoTEXT = "F:\"; //например наш pdftotext лежит на диске F
pdf = НашФайл;
txt = СтрЗаменить(pdf,"pdf","txt");
Команд = ПутьКPDFtoTEXT +"pdftotext.exe " + "-enc UTF-8 " + pdf + " " + txt; 
ЗапуститьПриложение(Команд,,Истина);			

Мы создали текстовый файл в кодировке UTF-8, теперь его нужно прочитать:

ФайлЧтение  = Новый ЧтениеТекста(txt,КодировкаТекста.UTF8);    
ТекстФ = ФайлЧтение.Прочитать();
ФайлЧтение.Закрыть();

Вот где я скачала программу-помощницу:

Инструменты XPDF  (по ссылке скачать инструменты xpdf, в архиве найдете pdftotext,  остальные файлы не нужны)

Надеюсь, моя работа поможет многим!)

has been added to your cart:
Оформление заказа