我们在AX 2009中设置了一个带有透明背景的.gif图像作为徽标。当我们打印支票我们用户的一些获取支票时,徽标的透明背景部分打印为黑色。检查签名也是如此。
如果我将GIF直接打印到同一台打印机上,它会打印得很好(图像的透明部分没有黑色)
这让我相信它是AX中的用户设置,考虑到它只发生在我们的一些用户身上,并且原始gif打印得很好。
我看到徽标存储在数据类型 image 字段的BANKCHEQUELAYOUT表中。看起来这是一个AX范围的记录(不是每个用户),所以我不认为问题是这个值。
有没有人遇到过这个问题?我应该看一下用户级别的打印设置吗?
答案 0 :(得分:1)
首先,检查位图控件的BackStyle
属性是否设置为Transparent
。这是启用任何报告或表单图像控件透明度的必需步骤。
我没有尝试使用GIF图像文件的透明度。但是,在以前版本的AX中,GIF不是受支持的图像文件,可能存在透明度错误。
我的第一个建议是将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 :(得分:1)
最后得到了这个,感谢Jan的评论。以下是我采取的步骤:
logoImage.transparent(真,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));
}
}