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

26.05.17

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Получить данные документа PDF:
.epf 7,34Kb
4
4 Скачать (1 SM) Купить за 1 850 руб.

В данной статье приведу пример получения количества страниц 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С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

21.05.2024    20134    dimanich70    81    

144

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

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

1 стартмани

18.03.2024    4091    3    John_d    11    

57

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

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

12.02.2024    18068    atdonya    24    

56

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

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

30.11.2023    5503    ke.92@mail.ru    16    

65

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

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

28.08.2023    14735    YA_418728146    7    

166

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

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

2 стартмани

22.08.2023    3581    56    progmaster    8    

4

Инструментарий разработчика Универсальные функции Платформа 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    18479    171    sapervodichka    112    

135
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 241 26.05.17 14:19 Сейчас в теме
(14)
скажи, а как с помощью "Word.Application" получить из pdf файла (который тебе пользователь загрузил, прислал .....)
- количество страниц ?
- формат бумаги ?
- автор создания? и тд и тп
17. DAL 26.05.17 14:21 Сейчас в теме
19. Isonic 241 26.05.17 14:25 Сейчас в теме
(17)
это не решает моих вопросов =)

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

PS: PDF бывает разный - например с рисунками, чертежами и таблицами.
25. Isonic 241 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 241 26.05.17 14:40 Сейчас в теме
(26) сторонние продукты конечно удобнее, если заказчик не против (что бывает не часто)
28. DAL 26.05.17 14:44 Сейчас в теме
(27)

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

Утилита бесплатная. Никаких сторонних продуктов.
29. Isonic 241 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 241 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 87 15.03.21 21:56 Сейчас в теме
(39) та же проблема была. Сделал через КомандаСистемы

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


КомандаСистемы(ТекстКоманды);
2. Isonic 241 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 241 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 241 26.05.17 13:57 Сейчас в теме
(9)
Для возможности создания объекта AcroExch.PDDoc необходимо установить "Acrobat Pro DC" (на оф. сайте доступна пробная (бесплатная) версия на 30 дней).
11. Mic 26.05.17 14:08 Сейчас в теме
т.е. сом объект можно создать только при установке платной версии Адоба или триальной?
12. Isonic 241 26.05.17 14:12 Сейчас в теме
(11)Да, все верно.
В бесплатной версии Acrobat Reader com объект "AcroExch.PDDoc" отсутствует
13. Isonic 241 26.05.17 14:15 Сейчас в теме
(11)Что Вы хотите получить из PDF файла? Просто есть другой вариант получения данных, правда набор данных будет ограничен
16. Isonic 241 26.05.17 14:21 Сейчас в теме
а руками пробовал открыть файл pdf в ворде? что у тебя получается?
21. DAL 26.05.17 14:25 Сейчас в теме
(16) С какой целью?

Я для работы с pdf пользуюсь ActiveX Adobe PDF Reader
24. Isonic 241 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 241 02.06.17 11:26 Сейчас в теме
(33) делал я так, не все файлы можно разобрать на текстовые строки.
Итог - метод Count не сработает и мы не получим результата
38. Isonic 241 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 184 02.06.17 15:46 Сейчас в теме
Оставьте свое сообщение