#axapta
#axapta
Вопрос:
У нас есть GIF-изображение с прозрачным фоном, установленное в качестве логотипа в AX 2009. Когда мы печатаем чеки, некоторые из наших пользовательских чеков получают чеки с прозрачной фоновой частью логотипа, напечатанной черным цветом. То же самое относится и к подписи чека.
Если я печатаю GIF непосредственно на том же принтере, он печатается нормально (в прозрачной части изображения нет черного цвета)
Это наводит меня на мысль, что это пользовательская настройка в AX, учитывая, что это происходит только для некоторых наших пользователей и что необработанный gif печатается просто отлично.
Я вижу, что логотип сохраняется в таблице BANKCHEQUELAYOUT в поле изображения типа данных. Похоже, что это запись для всей оси (не для каждого пользователя), поэтому я не думаю, что проблема связана с этим значением.
Кто-нибудь сталкивался с этой проблемой? Существуют ли настройки печати на уровне пользователя, на которые я должен обратить внимание?
Комментарии:
1. Вы пытались понять, связано ли это как-то с темами Windows? Ax настроен так, чтобы соответствовать темам Windows, так что … просто мысль
Ответ №1:
Сначала убедитесь, что BackStyle
свойство элемента управления bitmap установлено в Transparent
значение . Это обязательный шаг для обеспечения прозрачности любого отчета или элемента управления изображением формы.
Я не пробовал прозрачность с файлами изображений GIF. Однако GIF не был поддерживаемым файлом изображения в предыдущих версиях AX, возможно, есть ошибка с прозрачностью.
Мое первое предложение — преобразовать GIF в PNG, обновить изображение в макете проверки и повторить попытку.
Моим вторым вариантом было бы удалить прозрачность и заменить цвет фона (белый?).
Обновление: AX сохраняет изображения в CompanyImage
таблице. Размер изображений можно рассчитать, реализовав этот метод:
display ImageSize imageSize()
{
ImageSize size;
BinData b;
if (this.Image)
{
b = new BinData();
b.setData(this.Image);
size = b.size();
}
return size;
}
К сожалению new Image(this.Image).size()
, не работает. Перетащите метод в группу AutoReport
полей, затем откройте таблицу в обозревателе таблиц.
В моем примере файл PNG имел размер 1476 байт, а файл BMP — 42062 байта.
Комментарии:
1. BackStyle установлен на прозрачный. Кроме того, единственными типами файлов, которые он будет принимать, являются .bmp, .gif, .jpg и .jpeg. Файлы в формате PNG не допускаются. Я пробовал каждый тип файла, и возникает та же проблема. Я думаю, что AX преобразует его в формат .bmp перед сохранением в базе данных, независимо от того, какой тип файла вы используете
2. Формат PNG поддерживается AX, но не CompanyImage. Вы можете изменить это в FormsCompanyImageDesignsDesign[Group:GroupImage][ButtonGroup:ButtonGroup]Button:ChangeMethodsclicked
3. Хорошо, спасибо. Я добавил файл .png в список, изменил его на .png, и он по-прежнему печатается с черным фоном. Я вижу, как вы использовали размер, чтобы указать, что он не преобразуется в bmp. Я собираюсь еще немного поиграть с отчетом о проверке, установив его в формате png и посмотреть, что получится.
4. Это интересно. Я могу печатать на своем физическом принтере CutePDF (который печатает в PDF-файл), отправлять в OneNote (который добавляет распечатку в документ OneNote), и независимо от того, что он всегда выходит черным. Кроме того, когда я использую тест печати, я могу щелкнуть правой кнопкой мыши изображение в окне предварительного просмотра, скопировать изображение и вставить его в Paint. ЧИСТЫЙ и там тоже черный.
5. Какой цвет вы выбрали в качестве прозрачного цвета?
Ответ №2:
Наконец-то я понял это благодаря комментарию Яна. Вот шаги, которые я предпринял:
- Создайте GIF-изображение с белым фоном.
- Измените свойство BackStyle изображения в отчете о проверке на непрозрачный.
- В методе showLogo формы CompanyImage добавьте эту строку кода:
Изображение логотипа.прозрачный (true, 255,255,255);
таким образом, полный метод showLogo выглядит следующим образом:
void showLogo()
{
Image logoImage;
;
try
{
element.lock();
if (imageContainer)
{
logoImage = new Image();
logoImage.setData(imageContainer);
logoImage.transparent(true,255,255,255);
image.image(logoImage);
image.widthValue(logoImage.width());
image.heightValue(logoImage.height());
}
else
{
image.imageResource(0);
image.widthValue(32);
image.heightValue(32);
}
element.resetSize();
element.unLock();
}
catch (Exception::Warning)
{
throw error(strfmt("@SYS19312", imageFilePathName));
}
}