1с не открывает файлы pdf

Обновлено: 07.07.2024

Средства работы с двоичными данными

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

Информация, которая нас интересует:

  • Ширина изображения в пикселах,
  • Высота изображения в пикселах,
  • Глубина цвета (количество битов на один пиксел).

Краткое описание формата JPEG

Кратко опишем некоторые детали формата, существенные для решения нашей задачи. За более подробным описанием формата JPEG можно обратиться к соответствующим источникам:

Файл JPEG содержит последовательность маркеров , каждый из которых начинается с байта 0xFF, свидетельствующего о начале маркера, и байта-идентификатора. Некоторые маркеры состоят только из этой пары байтов, другие же содержат дополнительные данные, состоящие из двухбайтового поля с длиной информационной части маркера (включая длину этого поля, но за вычетом двух байтов начала маркера, то есть 0xFF и идентификатора) и собственно данных. Такая структура файла позволяет быстро отыскать маркер с необходимыми данными (например, с длиной строки, числом строк и числом цветовых компонентов сжатого изображения).

Решение

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

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

Теперь, когда мы написали основную функцию для анализа JPEG-файла, напишем вспомогательную функцию - ПрочитатьМаркер , которая читает очередной маркер и возвращает информацию о нем:

  • РазмерСекции : размер секции, начало которой отмечает маркер
  • ЭтоОписаниеИзображения : признак того, что секция, отмеченная маркером, содержит нужную нам информацию об изображении.

И, наконец, соберем всё вместе и напишем функцию, которая будет анализировать все файлы в заданной папке и выдавать полученную информацию в виде таблицы.

Вы можете скачать приложенную конфигурацию прямо сейчас

Постановка задачи

Ответ от сервиса будет иметь следующий вид:

В качестве обработчика для метода создаем в модуле сервиса функцию ДляВсех_Get :

Создаем новую общую форму. На форму добавляем реквизиты типа Строка:

Далее добавляем элементы управления:

Создаем обработчик команды:

Вся работа по запросу сервиса и отображению результата выполняется в серверной функции ВыполнитьЗапрос :

(17) погодите с категоричностью. Я уже изложил, что раз в пользовательском варианте возможность сделать это есть, должна быть и в программном.

(18) ничего там такого нет. Только в разрешенные поля внести текст, больше ничего. Это просто бланки с графическим оформлением. Причем, это оформление сыпется при попытке именно изменить pdf. Внести данные текстовые поля - никаких проблем, пользователь может легко это сделать и сохранить результат.

(19) напиши в техподдержку Adobe, какие оне противные и не дают возможность программно менять их формы :)
Соббсно, вроде как из jsсript в рамках страницы можно достучаться до форм внутри

>раз в пользовательском варианте возможность сделать это есть, должна быть и в программном.

это ложная ассоциация

(24) а какие? можете дать имена объектов?
(25) можно. Я ж об этом и говорил. Но через jscript из 1С немного неудобно. Во-первых, java практически не знаю, то есть, у меня нет примеров обращений к объектам, из которых можно было бы как-то подчерпнуть методы и/или имена объектов. Во-вторых, 1С для работы даже через java все равно требуется COM-объект, имя которого мне неизвестно.
(26) если Вам неизвестно решение, это не значит, что его нет. Или Вы - сотрудник Adobe и знаете наверняка? Да и насчет ложности могу сказать, что у меня большие сомнения в том, что такая фирма как Adobe не предусмотрела чего-то такого.

(28) мне на надо быть сотрудником адоба

помню они чего-то в jscript докручивали у себя не так давно - pdf с "плохим" внедренным скриптом мог сделать что-то вредоносное на компе
(34) открылась форма, а поверх другая со смещением - куда кликать будешь?
(39) Т.е. заполнение будет происходить на экране, хоть и программно?
А если Esc нажмут?

Может не заниматься копанием канала выданной лопатой?
А сделать "Дано" > "Надо" простым способом?

Задача то отвлекаясь от PDF какая?

Или вообще нафик эти PDF и с чем то другим работать (начальные PDF можно сконвертить на другом компе/сервере)

все клиенты (банк или биллинг) что видел допускали кроме pdf еще экспорт в xls или csv как минимум.

парсинг pdf это "распечатать 2 камаза бумаги, чтобы потом эти 2 камаза распознавать"

(31) Не надо лишних окон. Клиентам это не понравится.
(44) Задача - данный pdf (и именно его и именно в pdf), нарисованный в векторе (и именно поэтому не допускающий переконвертаций, дабы не потерять расцветку для типографии) заполнить и сохранить в виде другого pdf. Заполнение изначальным pdf-ом предусматривается (так называемая, форма заполнения) и работает в пользовательском режиме в Acrobat Reader. Мне необходимо тоже самое провернуть программно из 1С.
(44) забыл сказать, софтовая расширяемость практически отсутствует. Клиентов не уговорить поставить что-то еще.
(46) pdf в векторе для типографии. )) откройте для себя корел дроу.

(47) у клиентов есть интернет?

просто задача из разряда хочу на легковушке гараж перетащить.

варианты решения:
1. имитация из 1С действий юзверя по работе с реадером
2. отправка исходника и данных заполнения на другой комп/сервер возможно через инет
3. установка доп.софта, любого от полного акробата или корел дроу или ВК для 1с

(48) В котором и делались эти pdf и который никто не собирается покупать. Он стоит только у дизайнера этих pdf.
(49) Ни одно из решений не является приемлемым.
1. Лишние окна.
2. Куда? И зачем? Как будто кто-то одобрит установку софта на другом компе той же компании. А свой домашний я этим нагружать не стану, и уж тем более, он не будет включен, пока я на работе, это электричество это никто не оплатит.
3. Не обсуждается даже. ВК разве что протолкнуть, и то, если для ее установки нужны права администратора (а скорее всего так оно и есть) - админ не пропустит.

Есть версии, подходящие под условия, которые у меня имеются?

(50) есть. ценник озвучьте для операций на гландах. ректально

сразу все появится и админский доступ и софт какой надо купят и поставят

(52) ректальную тонзилэктомию сейчас дешево делают лазером. И ее нынче частенько прописывают особо вредным пожилым. а ладно.
А если серьезно, расценки назначаю не я, так что выставить дикий ценник попросту не в моих силах.

а зачем нужно именно в пдф засовывать данные?

и потом из 1с просто в нужные места печатать что надо?

(54) Опять же, вопрос немного не по адресу. Но дело в том, что сейчас именно так, через pdf, делается вручную, они просто хотят автоматизировать процесс, чтобы исключить ошибки при наборе и в целом упростить процесс.
Блин, сейчас сижу и попросту не въезжаю. неужели без извращений и окольных путей не существует варианта приобщить 1с к Adobe Reader?
(56) я так понимаю, проблема не в приобщении, а в том, что адобе ридер не предоставляет COM-интерфейса, который позволял бы автоматизированно заполнять PDF формы. Т.е. вопрос в данном случае к фирме адобе, а не к 1С.
(57) Может, и так. Хотя на java можно это сделать, очевидно, через иной интерфейс. Тут вопрос в том, что java я почти не знаю, а хоть сколь-нибудь рабочего примера, на который можно было бы опереться в экспериментах, найти не удалось.
(59) я точно знаю, что из 1С можно дотянуться через javascript до глубин OpenOffice, уже проделывал это (но у меня был под рукой sdk и множество рабочих примеров, которые я, правда, переводил из, кажется, vb на 1С). Можно ли через те же скрипты дотянуться до ридера - фиг знает.
(61) спасибо, но это перебор. И что-то мне подсказывает, что эта компонента несколько иначе реализована, чем мне нужно, то есть даже разобрав ее, я не получу искомого. То есть, такой функционал - явно больше, чем можно получить от ридера.
(62) Отпишись если решишь задачу в заданых условиях.
Как вариант через скрипты операционки иметировать деятельность пользователя, но боюсь документы не имеют шаблона.

(13) По поводу этого AcroExch. только что проверил идею.
на компе полный Акробат не стоит. Попробовал в Ворде вставить объект "Adobe Acrobat Document", сохранив действия в макрос. Вот что получилось:
Sub Макрос1()
Из чего делается предположение, что AcroExch - таки объект Ридера. И работать с ним - можно. И обращаться к его коллекции Fields, и прописывать в нужные поля ФИО участника семинара, название, город, и проч.

Ну а дальше - пробуйте. Результат очень интересен и полезен. Хотелось бы, чтобы у Вас получилось! Успехов!

Чтобы зарегистрировать компоненту в Windows - запустить reg.bat
(для удаления информации о компоненте в Windows - запустить unreg.bat)

*** Добавление на форму 1С:

v7.7: 1C++ и FormEx
v8.x: Меню "Форма" - "Вставить ActiveX. " - Выбрать элемент "Душелов.PDFViewer1C"

*** Контекст компоненты:

*** Свойства:

*** Методы:

- ЗагрузитьДокумент(ПутьКФайлу); //булево
- Закрыть(); //очистка памяти, рекомендуется вызывать при закрытии формы

*** События:

Основана на библиотеке xPDF.

Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

Это, по скорострельности быстрее, чем активикс от фоксридер или адоберидер ?

На таблицу помещаем рисунок, в свойстве Текст пишем
ПриВыводеКартинки(Таб.ТекущийОбъект,Файл) , где Файл - переменная хранящая путь к пдф, в модуле соответственно процедура:

Процедура ПриВыводеКартинки(Картинка,Файл)
Картинка.РежимРисования(1);
Попытка
Картинка.Загрузить(Файл);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры

Код не мой, рабочий.

Фоксридер или фоксит ридер?
Фоксит, наверное быстрее будет, хотя не знаю.
Но могу сказать, что быстрее адобе (и дешевле ;) )

Фоксит в 1Су встроить можно? У адобы есть активикс свой.

Блин.. нет ставить на сервак неохота :(
Ладно, попробую потестить на на локальной тачке..
Но если ужо быстрее адобе, то + А в 7.7 ведь можно просмотреть пдф без активиксов, через картинку. В чем плюсы использования активикса автора? супер!
предложение - сделать масштабирование (100%, по ширине, страница целиком) (12) Автомасштаб автоматически работает при растягивании формы.
Добавил свойство "Масштаб" для ручной установки масштабирования. (13) Мот добавишь метод LoadFromFile . ?
чтоб при открытии формы сразу открывался нужный pdf. Классно!
Есть предложение - добавить функции редактирования файла pdf, или программно заполнять определенные поля в pdf (17) Для редактирования берем активикс от адобе (про версии) и читаем мануал по его методам.

************** Текст исключения **************
System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в AFPDFDocInterop.RenderPage(AFPDFDocInterop* , Int32 )
в PDFLibNet.PDFWrapper.RenderPage(IntPtr handler)
в Душелов.PDFViewer1С.tsbZoomOut_Click(Object sender, EventArgs e)
в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
в System.Windows.Forms.ToolStripButton.OnClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleClick(EventArgs e)
в System.Windows.Forms.ToolStripItem.HandleMouseUp(MouseEventArgs e)
в System.Windows.Forms.ToolStripItem.FireEventInteractive(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStripItem.FireEvent(EventArgs e, ToolStripItemEventType met)
в System.Windows.Forms.ToolStrip.OnMouseUp(MouseEventArgs mea)
в System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.ToolStrip.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

************** Оперативная отладка (JIT) **************
Для подключения оперативной (JIT) отладки файл .config данного
приложения или компьютера (machine.config) должен иметь
значение jitDebugging, установленное в секции system.windows.forms.
Приложение также должно быть скомпилировано с включенной
отладкой.

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

Читайте также: