Получение свойств документа PDF

26.05.17

Разработка - Универсальные функции

Пример получения свойств документа PDF с помощью Adobe Acrobat.

Скачать исходный код

Наименование Файл Версия Размер
Получить данные документа PDF:
.epf 7,34Kb
4
.epf 7,34Kb 4 Скачать

В данной статье приведу пример получения количества страниц PDF и определения формата бумаги.

Основные требования:

  • необходимо наличие программы Adobe Acrobat.

Ниже текст процедуры. 

&НаКлиенте
Процедура ПолучитьДанныеДокументаPDF(Команда)
	
	// создаем экземлпяр COM объекта программы Adobe Acrobat «AcroExch.PDDoc»
	// Для возможности создания данного объекта необходимо установить программу Adobe Acrobat
	// Внимание: Acrobat Reader не содержит данной компоненты!!!
	
	PDDoc = Новый COMОбъект("AcroExch.PDDoc");
	// открываем pdf документ 
	PDDoc.Open(ПутьКФайлу);
	
	// определяем количество страниц
	КоличествоСтраниц = PDDoc.GetNumPages();
	
	// определяем размерность листа (страницы) по первой странице (Нумерация страниц начинается с 0)
	// В Adobe размерность указывается в компьютерных пунктах.
	x = PDDoc.AcquirePage(0).GetSize().x; 
	y = PDDoc.AcquirePage(0).GetSize().y; 
	
	// Компьютерный пункт (нем. Punkt — точка) — единица измерения кегля шрифта 
	// и основная единица измерения в типографике. Один пункт равен 1R60;12 цицеро (пайка) = 1R60;48 квадрата. 
	// В типографиях стран на постсоветском пространстве пункт равен 0,3759 мм. 
	// В программах компьютерной вёрстки широко используется введённый компанией Adobe пункт, 
	// приравненный к 1R60;72 дюйма, т. е. 25,4R60;72 мм = 0,3527 мм. Такой пункт 
	// называют также пунктом PostScript.	
	
	// переведем пункты в миллиметры
	x1 = Окр(x * 0.3527);
	y1 = Окр(y * 0.3527);
	
	// основные форматы бумаги
	// А0 : 841 мм * 1189 мм 
	// А1 : 841 мм * 594 мм
	// А2 : 420 мм * 594 мм
	// А3 : 297 мм * 594 мм
	// А4 : 210 мм * 297 мм
	// А5 : 148 мм * 210 мм
	// А6 : 105 мм * 148 мм
	
	// определим формат бумаги
	ФорматБумаги = "";
	Если (x1 = 841 И y1 = 1189) ИЛИ (x1 = 1189 И y1 = 841) Тогда
		ФорматБумаги = "А0";
	ИначеЕсли (x1 = 841 И y1 = 594) ИЛИ (x1 = 594 И y1 = 841) Тогда
		ФорматБумаги = "А1";
	ИначеЕсли (x1 = 420 И y1 = 594) ИЛИ (x1 = 594 И y1 = 420) Тогда
		ФорматБумаги = "А2";
	ИначеЕсли (x1 = 297 И y1 = 594) ИЛИ (x1 = 594 И y1 = 297) Тогда
		ФорматБумаги = "А3";
	ИначеЕсли (x1 = 297 И y1 = 210) ИЛИ (x1 = 210 И y1 = 297) Тогда 
		ФорматБумаги = "А4";
	ИначеЕсли (x1 = 148 И y1 = 210) ИЛИ (x1 = 210 И y1 = 148) Тогда
		ФорматБумаги = "А5";
	ИначеЕсли (x1 = 105 И y1 = 148) ИЛИ (x1 = 148 И y1 = 105) Тогда
		ФорматБумаги = "А6";
	КонецЕсли;	
		
КонецПроцедуры

PDF количество страниц формат бумаги формат бумага количество adobe acrobat AcroExch.PDDoc

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2891    2    John_d    11    

56

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    5049    atdonya    22    

51

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    4102    ke.92@mail.ru    16    

62

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    9381    YA_418728146    6    

143

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2233    25    progmaster    8    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16355    142    sapervodichka    112    

130

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7355    quazare    8    

110
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. spenser123 26.04.17 10:36 Сейчас в теме
жаль что нет бесплатных варинтов работы с PDF и формами PDF для заполнения, обязательное наличие платной версии Acrobat сводит на нет пользу...
+
5. AlX0id 26.04.17 18:00 Сейчас в теме
(1)
жаль что нет бесплатных варинтов работы с PDF и формами PDF для заполнения

libreoffice - не?
+
7. spenser123 26.04.17 22:09 Сейчас в теме
(5) если правильно понял это тот же open office, с ним не нашел варианта заполнения напрямую из макета, только через временные файлы туда сюда гонять и в части pdf - заполнения форм и переменных там тоже не нашел, только текстовки подменять и сохранять как пдф.
+
14. DAL 26.05.17 14:17 Сейчас в теме
Зачем Акробат для PDF?

Можно и через офис

MSWord = Новый COMОбъект("Word.Application");
MSWord.Visible = Ложь;
MSWord.Documents.Open(ИмяФайла);
Документ = MSWord.Application.Documents(1);
Документ.SaveAs(ИмяФайлаПДФ, 17);
MSWord.Application.Quit();
+
15. Isonic 235 26.05.17 14:19 Сейчас в теме
(14)
скажи, а как с помощью "Word.Application" получить из pdf файла (который тебе пользователь загрузил, прислал .....)
- количество страниц ?
- формат бумаги ?
- автор создания? и тд и тп
+
17. DAL 26.05.17 14:21 Сейчас в теме
19. Isonic 235 26.05.17 14:25 Сейчас в теме
(17)
это не решает моих вопросов =)

И вообще разные задачи - распознать, создать, просто получить инфу о файле.

PS: PDF бывает разный - например с рисунками, чертежами и таблицами.
+
25. Isonic 235 26.05.17 14:30 Сейчас в теме
(22)данная статья не про чтение файла, а про просмотр свойств
+
26. DAL 26.05.17 14:37 Сейчас в теме
(25)

Тогда быстрее xpdf.
Формируешь текстовик и парсишь. Экономия времени на открытие COM-объекта

http://www.foolabs.com/xpdf/download.html
+
27. Isonic 235 26.05.17 14:40 Сейчас в теме
(26) сторонние продукты конечно удобнее, если заказчик не против (что бывает не часто)
+
28. DAL 26.05.17 14:44 Сейчас в теме
(27)

в состав пакета входит консольная утилита pdfinfo.
Делаешь pdfinfo.exe НашФайл.pdf > ТекстовыйФайл.txt
Потом парсишь.

Утилита бесплатная. Никаких сторонних продуктов.
+
29. Isonic 235 26.05.17 14:48 Сейчас в теме
(28)
Потом парсишь

ты опять за свое...
как ты таким способом определишь формат бумаги?!
+
30. DAL 26.05.17 15:17 Сейчас в теме
(29)

В комплект входят консольные утилиты, позволяющие:

Получить информацию из заголовка и описание метаданных файла PDF. распаковки PDF, извлечения изображений, шрифтов, преобразования в форматы png, ppm, ps, txt, html.

The 'Info' dictionary contains the following values:

title
subject
keywords
author
creator
producer
creation date
modification date

In addition, the following information is printed:

tagged (yes/no)
form (AcroForm / XFA / none)
page count
encrypted flag (yes/no)
print and copy permissions (if encrypted)
page size and rotation
file size
linearized (yes/no)
PDF version
metadata (only if requested)
simuljakr; +1
31. Isonic 235 26.05.17 15:29 Сейчас в теме
(30)спасибо. Есть еще утилита Exiftool - она еще мощнее, так как работает с разными файлам (видео, аудио и тд и тп)
+
32. DAL 26.05.17 15:35 Сейчас в теме
(29)

Ну в данном случае это комплект консольных утилит. Каждая размером 1 мб., т.е. можно кинуть в хранилище. Заточены только под работу с PDF.
Это на тему "как быстро и безболезненно, не покупая доп софта решить проблему".
+
39. levan 24.09.20 07:01 Сейчас в теме
(28)
состав пакета входит консольная утилита pdfinfo.
Делаешь pdfinfo.exe НашФайл.pdf > ТекстовыйФайл.txt


в командной строке работает выгрузка в txt, но ту же команду, один в один закускаю через 1с, возвращает ошибку. причем если выполнить команду без выгрузки ( pdfinfo.exe НашФайл.pdf ), то все в порядке. проблема имеено в выгрузке в txt когда делаешь pdfinfo.exe НашФайл.pdf > ТекстовыйФайл.txt

Права на запись в каталог есть. В чем может быть дело?
+
40. dimasikus31 86 15.03.21 21:56 Сейчас в теме
(39) та же проблема была. Сделал через КомандаСистемы

ТекстКоманды = ЭтотОбъект.ПутьКПрограмме + " " + ИсходноеИмяФайла + " > " + КаталогФайла + "1.txt";


КомандаСистемы(ТекстКоманды);
+
2. Isonic 235 26.04.17 11:01 Сейчас в теме
Тем не менее, это не сторонний программный продукт, а непосредственно сам Adobe.
+
6. spenser123 26.04.17 22:04 Сейчас в теме
(2)с этим не поспоришь, продукт качественный, но цена при установке на сервер где 1000 и более пользователей, просто заоблачная
+
3. gradi 5 26.04.17 11:59 Сейчас в теме
А вносить изменения в документ эта компонента позволяет?
+
4. Isonic 235 26.04.17 15:12 Сейчас в теме
(3)
Да, эта компонента позволяет создавать и редактировать PDF документ.
+
8. AlX0id 26.04.17 22:17 Сейчас в теме
А, если в программной части - то только через какие-нить pdftk думаю, есть возможность.. https://www.pdflabs.com/tools/pdftk-server/ например
+
9. Mic 26.05.17 13:29 Сейчас в теме
что нужно установить, чтобы в программе создался объект AcroExch.PDDoc??
+
10. Isonic 235 26.05.17 13:57 Сейчас в теме
(9)
Для возможности создания объекта AcroExch.PDDoc необходимо установить "Acrobat Pro DC" (на оф. сайте доступна пробная (бесплатная) версия на 30 дней).
+
11. Mic 26.05.17 14:08 Сейчас в теме
т.е. сом объект можно создать только при установке платной версии Адоба или триальной?
+
12. Isonic 235 26.05.17 14:12 Сейчас в теме
(11)Да, все верно.
В бесплатной версии Acrobat Reader com объект "AcroExch.PDDoc" отсутствует
+
13. Isonic 235 26.05.17 14:15 Сейчас в теме
(11)Что Вы хотите получить из PDF файла? Просто есть другой вариант получения данных, правда набор данных будет ограничен
+
16. Isonic 235 26.05.17 14:21 Сейчас в теме
а руками пробовал открыть файл pdf в ворде? что у тебя получается?
+
21. DAL 26.05.17 14:25 Сейчас в теме
(16) С какой целью?

Я для работы с pdf пользуюсь ActiveX Adobe PDF Reader
+
24. Isonic 235 26.05.17 14:28 Сейчас в теме
(21)Ты ж сам прислал код с открытием pdf в word. Я не знаю зачем ты это прислал, это фигня полная

ActiveX Adobe PDF Reader - чтение файла, просмотр файла.
Acrobat Pro DC - чтение файла, создание файла, получения/изменение свойств файла

Чувствуешь разницу?
+
18. Mic 26.05.17 14:23 Сейчас в теме
нужно выводить 2 страницы из pdf файла на форму для просмотра и пакетная печать pdf файлов из 1С.
+
20. Mic 26.05.17 14:25 Сейчас в теме
желательно страницы выводить раздельно
+
33. romankoav 4 01.06.17 18:37 Сейчас в теме
Получить количество страниц просто: считываете файл pdf как текст, далее проходя по строкам ищите вхождение "/Count". Как находите, смотрите следующие цифры после - это и будет количество страниц. Смотреть до конца строки или следующего "/". Проверялось на файлах формата 1.2 и 1.5
+
34. Isonic 235 02.06.17 11:26 Сейчас в теме
(33) делал я так, не все файлы можно разобрать на текстовые строки.
Итог - метод Count не сработает и мы не получим результата
+
38. Isonic 235 05.06.17 09:30 Сейчас в теме
я проверял метод (который предлагался в (33)) на более чем 10 000 файлов, и из 10 файлов 3-4 определял количество листов, а в остальных нет. Поэтому, имхо, это неверный подход.

Таким способом хорошо WORD файлы определять, но для него в 1С есть отдельная компонента. Так что....
+
35. romankoav 4 02.06.17 14:45 Сейчас в теме
(34) Это как - не все? Пример?
+
36. romankoav 4 02.06.17 15:13 Сейчас в теме
Сейчас проанализировал 1000 первых попавшихся файлов - в некоторых слово /Count не нашлось. Файлы формата 1.4
+
37. brr 182 02.06.17 15:46 Сейчас в теме
Оставьте свое сообщение