Проверка (чек) AX 2009 Логотип печатается неправильно

#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:

Наконец-то я понял это благодаря комментарию Яна. Вот шаги, которые я предпринял:

  1. Создайте GIF-изображение с белым фоном.
  2. Измените свойство BackStyle изображения в отчете о проверке на непрозрачный.
  3. В методе 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));
}
  

}