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

26.05.17

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

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

Файлы

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

Наименование Скачано Купить файл
Получить данные документа PDF:
.epf 7,34Kb
5 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

В данной статье приведу пример получения количества страниц 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

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    4825    Abysswalker    11    

47

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    9027    DeerCven    15    

63

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    57915    dimanich70    85    

175

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

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

1 стартмани

18.03.2024    8138    7    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

12.02.2024    72664    atdonya    31    

73

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

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

30.11.2023    10112    ke.92@mail.ru    17    

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

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

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

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

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

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