我们准备购买aspose.cells 时,在测试时发现excel中透明图片,转pdf后图片不透明了,遮挡了后面的字体,使用的是 aspose-cells-20.9.jar ,问题文档和图片见附件,麻烦协助处理一下,谢谢!问题文档.zip (1.5 MB)
@kongc,
我们已经使用最新版本20.9.8观察到了该问题,并将其记录在我们的数据库中以进行进一步调查和修复。只要有反馈准备好分享,我们就会在这里写回。
该问题记录为:
CELLSJAVA-43320 - Image transparency lost while converting Excel file to PDF
源文件中的图像是EMF图像。它使用EMR_STRETCHDIBITS记录通过SrcAnd BitBltRasterOperation绘制图像(请参阅参考:https://docs.microsoft.com/zh-cn/openspecs/windows_protocols/ms-emf/89c0d808-0dea-413f-be40-2e9e51fa36ac)。
当前,恐怕不支持SrcAnd BitBltRasterOperation。
您是否可以使用透明的PNG图像将其替换为源文件中的EMF图像?
麻烦您们考虑后期是否支持,如果支持需要多长时间,我们不能保证客户每一个人不使用EMF图像,我们无法预知客户所使用的图片格式。
当EMF图像使用SrcAnd BitBltRasterOperation在记录EMR_STRETCHDIBITS中生成透明颜色时,会发生此问题。我们仍然找不到这种情况的解决方案。
在.NET中,我们可以使用代码作为解决方案。但是,由于您使用的Java可能不适合您。
例如
样例代码:
.
Workbook wb = new Workbook("浙江赛英电力科技有限公司TBEA-XK-CG-202009142520.xlsx");
byte[] data = wb.Worksheets[0].Pictures[0].Data;
wb.Worksheets[0].Pictures[0].Data = MetafileToPng(data);
wb.Save("output.pdf");
internal static byte[] MetafileToPng(byte[] data)
{
using (Image image = Image.FromStream(new MemoryStream(data)))
{
if (image is Bitmap)
{
return data;
}
using (Image dest = new Bitmap(image.Width, image.Height))
{
using (Graphics g = Graphics.FromImage(dest))
{
g.DrawImage(image, 0, 0, dest.Width, dest.Height);
}
MemoryStream destStream = new MemoryStream();
dest.Save(destStream, ImageFormat.Png);
return destStream.ToArray();
}
}
}
我们还将探索其他选项,并可能会更新您。