Вставка картинки в отчет DIRECTUM

19 18

Иногда бывают такие ситуации, когда заказчик требует вставить логотип компании в отчет, формируемый системой DIRECTUM. Поиск по  базе знаний на сайте поддержки DIRECTUM выдал ссылку на статью №2767 «Как в RTF-отчет вставить WMF-файл?». Прочитав статью, стало понятно как вставить картинку в отчет DIRECTUM, но в ручную оперировать RTF-тегами не было ни желания ни времени. Предлагаю следующий вариант решения данной задачи, при котором вставка картинки в отчет DIRECTUM у меня заняла максимум минут 10.

1. Как правило логотип компании уже имеется в электронном виде на фирменном бланке заказчика.

 2. Копируем логотип в буфер обмена.

 

 3. Открываем WordPad и вставляем логотип в документ. Далее сохраняем его как «Документ RTF».

 

 4. Открываем сохраненный документ блокнотом. Там будет что-то вроде такого:

{\rtf1\ansi\ansicpg1251\deff0\deflang1049{\fonttbl{\f0\fswiss\fcharset204{\*\fname Arial;}Arial CYR;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20{\pict\wmetafile8\picwgoal2851\pichgoal1147
010009000003c91d00000800ae0f00000000ae0f000026060f00521f574d464301000000000001
00d5aa0000000001000000301f000000000000301f0000010000006c00000002000000fcffffff
a4040000dc0100000000000000000000a3130000f507000020454d4600000100301f0000c20000
...........................................................................................................................

00000000000000000000000000000000000000000000000000040000002d01050004000000f001
0400040000002701ffff040000002701ffff040000002d010300040000002d0103000300000000
00
}\par
}
 5. Копируем в буфер обмена выделенный фрагмент.

 6. Открываем расчет отчета и заводим там переменную, которой присваиваем значение выделенного фрагмента. Например, вот так:

Picture = "{\pict\wmetafile8\picwgoal2851\pichgoal1147 
010009000003c91d00000800ae0f00000000ae0f000026060f00521f574d464301000000000001
00d5aa0000000001000000301f000000000000301f0000010000006c00000002000000fcffffff
a4040000dc0100000000000000000000a3130000f507000020454d4600000100301f0000c20000
...........................................................................................................................

00000000000000000000000000000000000000000000000000040000002d01050004000000f001
0400040000002701ffff040000002701ffff040000002d010300040000002d0103000300000000
00
}\par"

 7. Открываем шаблон отчета и выводим картинку в нужном нам месте в отчете:

#[Picture]

Для более точного позиционирования картинки в отчете, можно воспользоваться функцией:

РТФКадр(
ПозХ: Дробное число;
ПозУ: Дробное число;
Ширина: Дробное число;
Высота: Дробное число;
Знач: Строка;
[Обрам: Строка = 'Н'])

В шаблоне отчета это будет выглядеть примерно так:

Logo = РТФКадр(2;-0.5;5.03;2.01;Picture)
#[Logo]

Размер кадра можно посмотреть в свойствах рисунка:

Ну и в результате получается примерно такой отчет DIRECTUM:

19
Авторизуйтесь, чтобы оценить материал.
4
Дмитрий Тарасов

Пытался куски кода вставить по кнопке "Код", но они почему-то не вставляются :(

В итоге просто текстом вставил.

Дмитрий Тарасов

В опере не вставлялось, а в эксплорере вставилось :)

Денис Садыков

Дмитрий, отличный материал, 5 баллов!

Иван Жижик

Красивое решение :)

Дмитрий Тарасов

Пользуйтесь на здоровье :)

Алексей Язынин

Изящно

Денис Баранов

Мы так же примерно действуем. Но до функции позиционирования научная мысль пока не доходила. :) Хорошо придумано.

Dmitry Korotaev

Вопрос к Денису Баранову - а как же насчет ограничений? На размер строки, на форматы изображений?

Дмитрий Тарасов

Если вставлять картинку в WordPad через буфер обмена, то она всегда получается wmetafile8 (только что проверил на jpg и gif). Попробовал вставить 5 мегабайтный jpg-рисунок в отчет, он вставился без проблем, при этом описание картинки открытой в блокноте состояло из 60503 строк.

Татьяна Филиппова: обновлено 19.04.2017 в 13:27
Евгений Евгеньев

У меня в связи с этим возник следующий вопрос. А можно ли как то в RTF-отчет вставить картинку сформированную динамически? Т.е. заранее мы не знаем что за картинка будет в отчете (например в шаблоне отчета генерируется файл с картинкой и его надо вставить). Необходимо как то самому сгенерировать hex-представление картинки. Хотелось бы для этого использовать стандартные средства (т.е. без использования библиотек сторонних разработчиков). Я нашел такой способ:

#{\field
#{\*\fldinst
#{INCLUDEPICTURE [!Путь_к_файлу_с_картинкой] \\* MERGEFORMAT \\d }}}

В данном случе, в отчет помещается только ссылка на файл с изобржением. Но в этом случае, я не нашел как управлять масштабом картинки :(

Евгений Кочуров

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

Евгений Евгеньев

Да, изображение в формате wmf. Но я не понимаю каким средстваи его представить в виде "010009000003c91d00000800ae0f00000000ae0".

Есть вариант считать файл в бинарном формате и конвертировать по 4 бита в hex. Но не факт, что для RTF отчета нужен именно такой формат.

Евгений Кочуров

Вообще, содержимое wmf-файла должно совпадать с тем, что лежит в 16-ричном формате внутри rtf. Правда, если вставлять wmf-файл в Word через буфер обмена, то заголовки меняются и начальные отрезки в 16-ричном формате перестают совпадать. Насколько это критично - не знаю, надо экспериментировать.

Денис Фаткулин

У меня возник вот какой вопрос: в справочнике Работники есть реквизит фотография. Аналогичным образом я создал реквизит Факсимиле, который содержит картинку jpeg с подписью работника. Можно ли каким-то образом вытащить эту картинку при создании документа Word из шаблона? Может кто сталкивался.

Евгений Кочуров

Можно сохранить эту картинку в файл, выделить место в документе, куда должна быть вставлена картинка, а затем сделать что-нибудь типа:

Selection.InlineShapes.AddPicture ("имя файла")

Алексей Лапихин

классное решениеУлыбка

Борис Густяков

Можно по подробнее про Selection.InlineShapes.AddPicture ("имя файла")?

есть кусок кода который осуществляет макро подстановку данных в шаблон вордовского документа:

//------------------------------------------------------------------------------
    findtext = "[ПОДПИСЬ]"
    replaceWithText = StringPodpis

    MSWord.Selection.Find.Execute(findtext;matchCase;matchWholeWord;matchWildCards;matchSoundLike;
    nmatchAllWordForms;forward;wrap;format;replaceWithText;replace;matchKashida;matchDiacritics;
    matchAlefHamza;matchControl)
//------------------------------------------------------------------------------ 

где StringPodpis = текстовая строка. Есть реквизит карточки работника с картинкой rabcode.Requisites('Реквизит5').value

Вопрос - как подставить вместо ПОДПИСЬ не текст, а картинку из реквизита?

 

Александр Пчелинов

Добрый день. Помогите разобраться с качеством вставляемой картинки. Заметил, что если первый раз вставить картинку в WordPad, качество значительно хуже чем в оригинале. Попробовал сначала создать файл rtf, затем после его сохранения вставил нужную картинку. В этом случае набор символов сильно отличается от указанного в статье, но всё же получилось выбрать кусок кода, чтобы в отчёте картинка показалась, причём качество не на много, но стало лучше, но всё же до идеала далеко. Видимо, нужно вставить остальной код, но не получается его правильно выдернуть, т.к. нет понимания своих действий :( 

Авторизуйтесь, чтобы написать комментарий