Конвертация PDF в 1С
Разработка - Разработка внешних компонент
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Предлагаю вашему вниманию удобный инструмент для работы с PDF форматом.
Несмотря на то, что на ИС существует множество подобных вещей, но для универсальности и простоты пришлось собрать собственный велосипед.
Это обыкновенная COM-компонента под Win, позволяющая преобразовывать PDF файлы в изображения (с отличным качеством), изображения в PDF, а также разбивать PDF на более мелкие файлы и склеивать файлы PDF в единый документ, извлекать текст из PDF, имеющих текстовые слои, вставлять на страницы PDF водяные знаки, логотипы, печати.
Есть поддержка x86 и x64 платформ.
В основе движка лежат две мощные библиотеки: iTextSharp 5 и PdfiumViewer .
Как пользоваться:
сначала просто проинсталлировать в систему пакет "SetupArrowPDF.msi" (выбираем что-то одно: из папки "x86" или из "x64") -> необходимые библиотеки скопируются в программные файлы, а компонента зарегистрируется автоматически.
далее инициализируем:
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
можно сразу посмотреть версию:
Сообщить(Конвертер.Version());
[пока] есть <8> прикладных методов:
1) для сборки изображений в единый PDF файл:
// ширина и высота создаваемого PDF
// т.к. для PDF дефолтный DPI = 72, то лист формата A4 будет 595*842 пикселей
Конвертер.PdfWidth = 595;
Конвертер.PdfHeight = 842;
// отступы от краёв
Конвертер.PdfLeftMargin = 0;
Конвертер.PdfRightMargin = 0;
Конвертер.PdfTopMargin = 0;
Конвертер.PdfBottomMargin = 0;
// пути к изображениям
изо1 = "C:\Images\img1.png";
изо2 = "C:\Images\img2.jpg";
// пути добавим в массив
Изображения = Новый Массив;
Изображения.Добавить(изо1);
Изображения.Добавить(изо2);
// преобразуем массив в безопасный
Если Изображения.Количество() <> 0 Тогда
Файлы = Новый COMSafeArray(Изображения, "VT_BSTR");
КонецЕсли;
// путь к создаваемому PDF
НовыйПДФ = "C:\TEMP\new.pdf";
Результат = Конвертер.IMG2PDF(Файлы, НовыйПДФ);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
2) для конвертации страниц PDF в изображения:
Исходный = "С:\Temp\Book.pdf";
Папка = "С:\Temp\Images";
Конвертер.PdfPages = "3, 5,8,16, 19 ,28 "; // номера страниц через запятую
Конвертер.ImgFormat = "JPG"; // или "bmp", или "TiF", или "Png" (по умолчанию)
// размеры изображений
Конвертер.ImgWidth = 4000;
Конвертер.ImgHeight = 6000;
// разрешающая способность
//Конвертер.ImgDpiX = 1200;
//Конвертер.ImgDpiY = 1200;
Результат = Конвертер.PDF2IMG(Исходный, Папка);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
3) для дробления PDF:
Исходник = "C:\Temp\Manual.pdf";
Папка = "C:\Man\";
// диапазон задается начальной и конечной страницей через знак тире
// диапазоны разделяются запятой
Конвертер.PdfRanges = "1-3, 6, 15 - 20"; // для постраничного разбиения указать только "*"
Результат = Конвертер.SplitPDF(Исходник, Папка);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
4) для слияния PDF:
п1 = "C:\PDFs\header.pdf";
п2 = "C:\PDFs\footer.pdf";
ПДФы = Новый Массив;
ПДФы.Добавить(п1);
ПДФы.Добавить(п2);
Если ПДФы.Количество() <> 0 Тогда
Файлы = Новый COMSafeArray(ПДФы, "VT_BSTR");
КонецЕсли;
БольшойПДФ = "C:\Temp\ALL.pdf";
Результат = Конвертер.MergePDF(Файлы, БольшойПДФ);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
5) для извлечения текста из PDF:
ДокументСТекстовымСлоем = "D:\Temp\Kniga.pdf";
ТекстИзПДФ = "";
ПутьТхт = "D:\Temp\Txt.txt";
Конвертер.PdfPages = "1,3,5";
Результат = Конвертер.GetText(ДокументСТекстовымСлоем, ТекстИзПДФ);
Тхт = Новый ТекстовыйДокумент;
Тхт.УстановитьТекст(ТекстИзПДФ);
Тхт.Записать(ПутьТхт);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
6) для вставки в PDF логотипов, водяных знаков, печатей и штампов:
ИсходныйПДФ = "D:\Temp\Document.pdf";
ВодянойЗнак = "D:\Temp\Logo.pdf";
НовыйПДФ = "D:\Temp\Stamped.pdf";
Конвертер.PdfPages = "2,4,6";
Результат = Конвертер.AddWatermark(ИсходныйПДФ, ВодянойЗнак, НовыйПДФ);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
7) для сжатия PDF файлов:
ИсходныйПДФ = "D:\Temp\Document.pdf";
СжатыйПДФ = "D:\Temp\CompressedDocument.pdf";
Результат = Конвертер.Compress(ИсходныйПДФ, СжатыйПДФ);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
8) для защиты PDF файлов от печати и изменений:
ИсходныйПДФ = "D:\Temp\Document.pdf";
ЗащищенныйПДФ = "D:\Temp\ProtectedDocument.pdf";
Пароль = "MasTer-PassW0rd!"
Результат = Конвертер.Protect(ИсходныйПДФ, ЗащищенныйПДФ, Пароль);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
Почти все свойства данной компоненты, за исключением диапазонов или номеров страниц, можно не указывать принудительно, тогда они будут выставлены по умолчанию.
Горизонты использования компоненты не ограничены только 1с. Можете использовать её аналогично и в других ЯП.
Если будут пожелания на расширение функционала - высказывайтесь. Вместе сделаем мир лучше )
P.S. Просьба не сообщать, что можно сделать подобное через ghostscript или другие библиотеки или приложения. Перепробовал несколько разных инструментов - либо оч. сложно, либо не то качество или удобство.
Так как публикация вызвала интерес у сообщества, буду развивать функционал по мере появления новых идей и свободного времени.
Upd. 03.04.2020 - v.1.1
Доработка регистрации библиотеки типов. Исправление ошибки COM-взаимодействия из других ЯП.
Upd. 04.04.2020 - v.1.2
Добавлены методы GetText() и AddWatermark(). Свойство ImgPages заменено на PdfPages, которое может использоваться в нескольких методах.
Upd. 19.05.2020 - v.1.3
Добавлено сжатие PDF файлов - метод Compress().
Upd. 08.07.2020 - v.1.4
Добавлена возможность установки пароля на PDF документ - метод Protect().
Upd. 20.11.2020 - v.1.5
Добавлена 64-х разрядная версия компоненты.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.11.155, 3.1.10.514, 3.1.9.518
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка внешних компонент Телефония, SIP Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)
5246 руб.
04.05.2018 52190 128 68
Разработка внешних компонент Разработчик 1С:Предприятие 8 1C:Бухгалтерия 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 Платные (руб)
Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).
5084 руб.
12.05.2020 34947 147 100
Разработка внешних компонент Инструментарий разработчика Разработчик 1С 8.3 Бесплатно (free)
Внешняя обработка проверяет выгрузку конфигурации, расширений и внешних обработок и находит места, где код руками делает то, что платформа умеет штатно: регулярки через COM, пауза пустым циклом, свой хеш и Base64, распаковка архивов программой, буфер обмена через HTML-поле. По каждой находке пишет, доступна ли замена на месте или мешает тонкий клиент.
13.10.2026 1314 144 nedomolkov.ivan 5
Разработка внешних компонент Разработчик 1С:Предприятие 8 Бесплатно (free)
Нативная внешняя компонента для 1С 8 для чтения файлов Excel без установленного Excel и делает это быстро, файл 68МБ загружается в таблицу значений ~1 секунду. Компонента поддерживает чтение двух форматов: Excel 2007+ и Excel 97-2003 Формат файла определяется автоматически по сигнатуре (первые 8 байт файла), а не по расширению. Позволяет открывать XLS и XLSX файлы и получать содержимое листов в виде ТаблицыЗначений или JSON-массива.
03.07.2026 2384 skyadmin 31
Разработка внешних компонент Разработчик 1С 8.3 Бесплатно (free)
В современных корпоративных решениях на платформе 1С:Предприятие 8.3 всё чаще возникает потребность в визуальном моделировании и автоматизации бизнес-процессов с использованием нотации BPMN 2.0. Стандартные средства платформы не предоставляют полноценного редактора BPMN, однако интеграция открытой библиотеки bpmn-js позволяет реализовать интерактивное моделирование бизнес-процессов непосредственно в 1С. В статье рассмотрены архитектура решения, пошаговая инструкция по сборке библиотеки из исходников для WebKit, а также примеры программного взаимодействия между 1С и JavaScript.
03.04.2026 4279 SultanovStas 8
Разработка внешних компонент Разработчик 1С 8.3 Россия Бесплатно (free)
Создать NativeAPI-компоненту для Python-скриптов? Это просто!
20.10.2025 11020 IlyaKuznetsov 10
Разработка внешних компонент Системный администратор Разработчик Стажер Бесплатно (free)
Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!
14.01.2025 8222 bayselonarrend 17
Разработка внешних компонент Разработчик 1С:Предприятие 8 Россия Бесплатно (free)
В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.
04.12.2024 13808 kovalevdmv 29
Но чтобы проф уровень поднять вам, то (3) и (4) маст хев!
Понятно, что это другой уровень разработки, но зато сразу показывает уровень разработчика.
Я кстати хотел писать ВК для андроида, чтобы он генерировал баркод. И обязательно на джаве.
Руки так и не дошли. А у вас как с этим?
Плюс 1С уже это реализовала. Поэтому только из академического интереса такое делать.
Ошибка при вызове конструктора (COMОбъект)
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
по причине:
-2147221164(0x80040154): Класс не зарегистрирован
Win 10 x64
Запускал установку от имени админа
Ошибка
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса
Подскажите, в чем может быть проблема?
Есть несколько pdf файлов. Там изображения.
Необходимо получить новый pdf файл на 1 страницу с размещением в нём этих изображений в произвольном виде. Например, первый файл - слева, второй - справа сверху, третий - справа снизу.
Еще должен быть добавлен разный текст. Например, артикул, серия, модель товара и т.д.
Кроме того, результирующий файл должен быть в векторном виде. Для качественной печати.
Как пример такого - инструкция по сборке товара, собранная на основании нескольких pdf файлов.
Такое возможно сделать с Вашей компонентой?
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса
64 ОС (Windows 10 Pro) и 64 1С, версия компоненты самая крайняя. Скачивали 16.12.2020.
По описанию - нужно передавать 2 файла PDF - 1 - сам документ, 2 - печать. Получаем 3-ий файл документ с печатью.
Вопрос, как подготовить 2-ой файл (печать). По описанию этот файл должен быть PDF-ом. Но у меня ничего не получается. Можно подробнее описать этот метод?
Код ниже.
Исходник и результат прикрепил.
Что я делаю не так?
&НаСервере
Функция СоздатьPDFСВодянымЗнаком()
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
// ширина и высота создаваемого PDF
// т.к. для PDF дефолтный DPI = 72, то лист формата A4 будет 595*842 пикселей
Конвертер.PdfWidth = 842;
Конвертер.PdfHeight = 595;
// отступы от краёв
Конвертер.PdfLeftMargin = 0;
Конвертер.PdfRightMargin = 0;
Конвертер.PdfTopMargin = 0;
Конвертер.PdfBottomMargin = 0;
// пути к изображениям
изо1 = "D:\1\ЛаншафтКВ.png";
// пути добавим в массив
Изображения = Новый Массив;
Изображения.Добавить(изо1);
// преобразуем массив в безопасный
Если Изображения.Количество() <> 0 Тогда
Файлы = Новый COMSafeArray(Изображения, "VT_BSTR");
КонецЕсли;
// путь к создаваемому PDF
НовыйПДФ = "D:\1\new.pdf";
Результат = Конвертер.IMG2PDF(Файлы, НовыйПДФ);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
КонецФункции
Передаю исходный пдф, пдф с водяным знаком - в новом пдф получается исходный (без печати), но размер чуть больше исходного.
&НаСервере
Функция СоздатьPDFСВодянымЗнаком(ИсходныйПДФ, ВодянойЗнак, НовыйПДФ)
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
Конвертер.PdfPages = "1,2";
Результат = Конвертер.AddWatermark(ИсходныйПДФ, ВодянойЗнак, НовыйПДФ);
Возврат Результат;
КонецФункции
Есть вопросы про вставку водяного знака (штампа, логотипа и т.п.).
Как в AddWatermark() поместить водяной знак (штамп) слоем поверх исходного PDF ?
В PDF с текстовым слоем видно вставленный водяной знак (штамп), хотя и перекрывается текстом.
В многостраничном PDF со сканами (картинки без текстового слоя) он помещается под картинку исходного PDF и его невидно.
При этом поиском на фоне ищется текст из вставленного PDF, т.е. по факту он вставляется и обнаруживается поиском.
Попробовал поменять местами параметры в AddWatermark(). Это только подтвердило факт вставки в фон. В этом случае наоборот в водяной знак вставляется на фон исходный PDF, и получается так как надо, НО водяной знак это одностраничный PDF и конечно же все остальные страницы исходного документа не добавляются в итоговый документ. Этого в общем-то и не нужно. Просто тест.
Может быть есть возможность указывать какой из файлов будет вставлен в фон, а какой поверх?
Неудобно подгонять водяной знак под размеры страницы исходного PDF.
Можно как-то указать положение для вставляемого PDF, кроме как подгонять его размер страницы под размер исходного PDF?
Разные страницы в PDF могут иметь разные размеры и тут подгонка под размер страницы исходного PDF не поможет.
Остается только вопрос не озвученный ранее, каким образом узнать размер страницы исходного PDF?
Теперь это уже одностраничные PDF и по идее должно решить вопрос.
Пока только подгонка под ответ, но заранее я не могу знать какие файлы придут за штампами.
Но как сделать чтобы метод Конвертер.PDF2IMG сохранял файл с указанным именем а не просто 1.jpg?
Тогда можете записать в книгу пожеланий - возможность передавать в метод PDF2IMG, какой-то префикс, например:
- У меня есть файл с именем v8_639D_b.pdf
- Я запускаю метод PDF2IMG("С:\Temp\Images\v8_639D_b.pdf", "С:\Temp\Images", "v8_639D_b_")
- У меня формируются файлы v8_639D_b_1.jpg, v8_639D_b_2.jpg, v8_639D_b_3.jpg и т.д.
Как по мне реализация такого варианта вызова была бы очень удобной.
При таком подходе можно через 1с потом обойти и прочитать все файлы(картинки) и сделать с ними все что нужно и потом подчистить за собой.
Спасибо. А за конвертер плюсую.
Никак. Но им нужна бумажка прикрыть свои задницы.
Это было бы смешно, если бы не было так грустно.
Тут еще одельная статья покупки через инфостарт чего-либо за деньги, наш юр отдел это будет полгода согласовывать в результате выдаст что договор нам не подходит и в последствии только через санкции директора купим. Как-то так и живем.
Использую вашу разработку. Появилась необходимость указывать глубину цвета при сохранении PDF в картинки (PNG и JPG). Есть ли возможность добавить такой параметр?
Не планируете ли вы к компоненте добавить функционал для работы с qr-кодом? Интересует чтение и распознавание.
Спасибо за компоненту, очень проста и функциональна.
Если указываю файл размером более 24Мб , компонента грохает 1С.
ошибка:
Имя сбойного приложения: 1cv8.exe, версия: 8.3.17.1851, метка времени: 0x5fb42a15
Имя сбойного модуля: Pdfium.dll, версия: 0.0.0.0, метка времени: 0x5ac96ab9
Код исключения: 0xc0000409
Смещение ошибки: 0x0095cae0
Идентификатор сбойного процесса: 0x71f8
Время запуска сбойного приложения: 0x01d78f45fd1d458a
Путь сбойного приложения: C:\Program Files (x86)\1cv8\8.3.17.1851\bin\1cv8.exe
Путь сбойного модуля: C:\Program Files (x86)\ArrowPDF\x86\Pdfium.dll
Идентификатор отчета: 904ed298-6bcf-44df-89bf-55761f433034
Полное имя сбойного пакета:
Код приложения, связанного со сбойным пакетом:
С чем может быть связано?
1) 200 страниц 23мб.
2) 170 страниц 25мб.
На втором файле 1С крашится. Может проблема кроется в формате файла.
Платформа стабильная, вылетов не наблюдал ранее. Попробую PDF со стороннего ресурса.
Еще вопрос в догонку, у компоненты нет функции, возвращающей количество страниц в файле?
необходимо явно указать пользователя для запуска компоненты в приложениях COM+, но не получается найти компоненту.
Как она называется в "Службах компонентов" WIndows?
gci HKLM:\Software\Classes -ea 0| ? {$_.PSChildName -match '^\w+\.\w+$' -and (gp "$($_.PSPath)\CLSID" -ea 0)} | ft PSChildName
При конвертации pdf в Jpg
В результат выдает:
Absolute path information is required.
Код:
ПутьКФайлу=Выборка.ПутьКФайлу;
ПутьКФайлу="C:\Temp\Азопирам-К Эоми ТЕСТ (ВИНАР).pdf";
Файл = новый Файл(ПутьКФайлу);
Если Файл.Существует() тогда
Если Найти(ПутьКФайлу,".pdf")>0 тогда
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
Папка="С:\Temp\Images";
Конвертер.ImgFormat="JPG";
// размеры изображений
Конвертер.ImgWidth = 4000;
Конвертер.ImgHeight = 6000;
// разрешающая способность
//Конвертер.ImgDpiX = 1200;
//Конвертер.ImgDpiY = 1200;
Результат = Конвертер.PDF2IMG(ПутьКФайлу, Папка);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
КонецЕсли;
КонецЕсли; ПоказатьКонвертер = Новый COMОбъект("ArrowPDF.Converter");
Исходный = "С:/Temp/Book.pdf";
Папка = "С:/Temp/Images";
Конвертер.PdfPages = "1"; // номера страниц через запятую
Конвертер.ImgFormat = "JPG"; // или "bmp", или "TiF", или "Png" (по умолчанию)
// размеры изображений
Конвертер.ImgWidth = 4000;
Конвертер.ImgHeight = 6000;
// разрешающая способность
//Конвертер.ImgDpiX = 1200;
//Конвертер.ImgDpiY = 1200;
Результат = Конвертер.PDF2IMG(Исходный, Папка);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
Сообщить(Конвертер.Version());
Исходный = ПутьКФайлу;
Папка = стр;
Конвертер.PdfPages = "1,2,3,4,5,8,16, 19 ,28 "; // номера страниц через запятую
Конвертер.ImgFormat = "jpg"; // или "bmp", или "TiF", или "Png" (по умолчанию)
// размеры изображений
Конвертер.ImgWidth = 4000;
Конвертер.ImgHeight = 3000;
// разрешающая способность
//Конвертер.ImgDpiX = 1200;
//Конвертер.ImgDpiY = 1200;
Результат = Конвертер.PDF2IMG(Исходный, Папка);
Сообщить(Результат);
Если ПустаяСтрока(Результат) Тогда
ИмяФайлаРезультата = НайтиФайлы(Папка,"*.jpg");
Для каждого н из ИмяФайлаРезультата Цикл
ВложенияДок = Новый Структура;
ВложенияДок.Вставить("АдресВоВременномХранилище",ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(н.ПолноеИмя)));
Если Не ПустаяСтрока(ВложенияДок.АдресВоВременномХранилище) Тогда
Хранилище = ПолучитьИзВременногоХранилища(ВложенияДок.АдресВоВременномХранилище);
Если ТипЗнч(Хранилище) <> Тип("ДвоичныеДанные") Тогда
Результат = Хранилище.Получить();
Иначе
Результат = Хранилище.;
КонецЕсли;
Область = Макет.ПолучитьОбласть("Изображение");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Высота = 297;
Рисунок.Ширина = 210;
Рисунок.ГраницаСверху = Ложь;
Рисунок.ГраницаСнизу = Ложь;
Рисунок.ГраницаСлева = Ложь;
Рисунок.ГраницаСправа = Ложь;
Рисунок.РазмерКартинки = РазмерКартинки.АвтоРазмер;
Рисунок.Картинка = Новый Картинка(Результат);
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
ТабличныйДокумент.Вывести(Область);
КонецЕсли;
Возврат ТабличныйДокумент; ПоказатьНа входе два ПДФ:
1. Прайс лист, сохраненный в pdf из 1С (на ПДФ файле при выделении таблица с колонками)
2. Водяной знак - pdf файл, сохраненный из 1с табличного документа с картинкой в середине листа.
При выполнении команды добавления водяного знака получается что водяной знак не видно совсем, он как-бы за таблицей прайса остается невидим. Как сделать чтобы водяной знак получился как водяной знак, то есть фоновым рисунком под таблицей?
При инициализации выводит ошибки:
2147221164(0x80040154): Класс не зарегистрирован
{ВнешняяОбработка.ТестКонвертерПДФ.Форма.Форма.Форма(5)}:Конвертер = Новый COMОбъект("ArrowPDF.Converter");
{ВнешняяОбработка.ТестКонвертерПДФ.Форма.Форма.Форма(29)}:ПодписатьНаСервере();
по причине:
-2147221164(0x80040154): Класс не зарегистрирован
или
2147221005(0x800401F3): Недопустимая строка с указанием класса
{ВнешняяОбработка.ТестКонвертерПДФ.Форма.Форма.Форма(5)}:Конвертер = Новый COMОбъект("ArrowPDF.Converter");
{ВнешняяОбработка.ТестКонвертерПДФ.Форма.Форма.Форма(29)}:ПодписатьНаСервере();
по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса
ОС: Windows 7 Проф x64
1С:Предприятие 8.3 (8.3.20.1674)
Пробовал разворачивать и 32х и 64х версии PDFКонвертера
Пробовал запускать 1С как x32 так и x64
Результат одинаковый - с ошибкой.
Прошу помочь в решении проблемы.
ЧЯДНТ?
я поставил х64, ошибок при создании обертки нету, версию пишет 1.5, но при конвертации выдавало сначала одну ошибку, теперь другую.
Я один такой что ли? Не работает ни на клиенте, ни на сервере.
-----
Воспроизвел вашу ошибку, написав имя диска <Ц> как "С" русская. Проблема на вашей стороне...
я ведь скопировал ваш код из публикации + вставил СоздатьКаталог(), показав, что путь реален и подкаталог был создан.
Но вы оказались правы - в публикации как раз русская "С" :D
В общем, по феншую можно сделать или установщик msi не только регистрирует библиотеку. Мне нужна лишь dll без всяких установщиков.
Попробовал на локальном компе - тут вообще регистрация не проходит (класс не зарегистрирован). А что регать - не понятно. Запускал под админом. Хоть бы инструкция была для ручной регистрации
После установки Arrow pdf х-32 ком-коннектор стал нормально создаваться.
Подскажите пожалуйста, можете добавить в вашу библиотеку метод для наложения водного знака с точки зрения планов "на оборот"?
Т.е. если файл будет одной страницей, то Результат = Конвертер.AddWatermark(ВодянойЗнак, ИсходныйПДФ, НовыйПДФ);
Или в кратце описать как можно пересобрать ваш dll.
А то мне кажется, что дробить и пересобирать pdf не совсем правильное решение.
P.S. Также кажется что для полного комплекта вам нужен метод, который возвращает количество страниц.
Спасибо.
Я формирую штамп на документ, с помощью табличного документа 1С. Далее сохраняю табличный документ в PDF.
Потом накладываю этот PDF по вашей инструкции.
Результат = Конвертер.AddWatermark(ИсходныйПДФ, ВодянойЗнак, НовыйПДФ);
Но если документ состоит из сканируемых страниц, то штам не видно. Он находится за кратинкой.
Но если я меняю водяной знак и исходный ПДФ местами, то видно.
По этому вопрос, можете ли вы доработатать и сделать отдельный метод?
Вопрос, может ли компонента обрезать полученную картинку по размерам изображения. Конвертирую с её помощью небольшой отчет, по высоте с пол страницы, по ширине 2/3 страницы. Соответственно возникают лишние белые поля. Можно как-то от них избавиться с помощью настроек?
Не в курсе есть ли какая-нибудь внешняя компонента реализующая подобное или в целом возможность редактирования изображений?
Результат = Конвертер.PDF2IMG(Исходный, Папка);
Возвращает "отказано в доступе к папке(параметр "Исходный")
Давали все возможные права, запускали на разных компах - всё равно выдает отказ в доступе к папке.
Компонента хорошая, полезная, но как это обойти?
Прикрепил скриншот, на нём - показано, что на папку, в Разрешениях, предоставлены полные права. np300 - пользователь ОС, под которым работаю,
Пользователь np300 относится, как к администраторам, так и к пользователям. для обоих случаев к папке даны полные права.
Попробую запустить 1С от имени администратора. Уже не знаю , что еще можно проверить.
В режиме отладки копировал из переменных пути и переходил по ним в проводнике, т.е. пути указаны верно
Процедура ВыгрузкаИзображений()
Конвертер = Новый COMОбъект("ArrowPDF.Converter");
Сообщить(Конвертер.Version);
Исходный = "D:\temp\Input";
Папка = "D:\temp\Output";
Конвертер.PdfPages = "*"; // номера страниц через запятую
Конвертер.ImgFormat = "png"; // или "bmp", или "TiF", или "Png" (по умолчанию)
// размеры изображений
Конвертер.ImgWidth = 4000;
Конвертер.ImgHeight = 6000;
// разрешающая способность
Конвертер.ImgDpiX = 1200;
Конвертер.ImgDpiY = 1200;
Результат = Конвертер.PDF2IMG(Исходный, Папка);
Если НЕ ПустаяСтрока(Результат) Тогда
Сообщить(Результат);
КонецЕсли;
КонецПроцедуры
ПоказатьКомпоненту установил, комп перезагрузил...
Но вот эта штука:
Результат = Конвертер.PDF2IMG(АдресФайлаНаКлиенте, АдресКартинки);на выходе всегда выдает пустую строку.
Компоненту ставил 64-х битную...
Файл по указанному адресу - существует...
В конфигураторе
Конвертер = Новый COMОбъект("ArrowPDF.Converter"); - определяется как COM-объект...
Вот код:
Что я делаю не так ?
//Ставим imagemagick
sudo apt-get install imagemagick
После в 1с одной строкой можем разбить ПДФ хоть на ПНГ хоть на ДЖПГ.
ЗапуститьПриложение("convert -density 100 /home/user/Desktop/ФайлПДФ.pdf /home/user/Desktop/ФайлПДФ.jpg");Если пдф многостраничный то разделит его по маске "названиефайла+1.jpg"
Рейтинг: 1146
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1217607
Создание 31.03.20 10:00
Обновление 05.05.25 10:11
Просмотры 55779
Загрузки 241
Рейтинг
92
Комментарии 185
Код открыт Да
Рубрики Разработка внешних компонент
Кому Разработчик
Тип файла Компонента, плагин (dll, vbs,..)
Платформа 1С:Предприятие 8
Конфигурация
Универсальные
,
1С:Библиотека стандартных подсистем
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)