Free Support Forum - aspose.com

Excel 转 pdf 图片透明度有问题

我们准备购买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

@kongc,

源文件中的图像是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图像,我们无法预知客户所使用的图片格式。

@kongc,

可能很快将不支持该功能。我们将检查是否可以为您提供预计到达时间。

@kongc,

当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();
        }
    }
}

我们还将探索其他选项,并可能会更新您。