使用PdfBox绘制透明PNG到PDF时出现灰色边缘光晕求助
修复PdfBox绘制透明PNG边缘灰色光晕问题
针对你使用PdfBox 2.0.28的PdfBoxGraphics2D绘制透明PNG时出现边缘灰色光晕的问题,可尝试以下修复方案:
处理颜色预乘不匹配问题
灰色光晕大多源于PNG的alpha通道与RGB颜色值的预乘/非预乘格式不匹配。修改你重写的encodeImage方法,先将BufferedImage转换为预乘alpha格式后再创建PDImageXObject:// 转换为预乘alpha的BufferedImage BufferedImage premultipliedImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_ARGB_PRE); Graphics2D g2d = premultipliedImage.createGraphics(); g2d.drawImage(bufferedImage, 0, 0, null); g2d.dispose(); // 使用转换后的图像生成PDImageXObject pdImageXObject = LosslessFactory.createFromImage(document, premultipliedImage); if (imageKey != null) { ((PdfResourceCache) document.getResourceCache()).addImageToCache(imageKey, pdImageXObject); }直接读取原始PNG文件
跳过手动转换BufferedImage的步骤,改用PdfBox直接读取原始PNG数据,完整保留透明通道信息:// 替换LosslessFactory创建逻辑,直接读取原始PNG pdImageXObject = PDImageXObject.createFromFileByContent(new File("你的透明PNG路径.png"), document); if (imageKey != null) { ((PdfResourceCache) document.getResourceCache()).addImageToCache(imageKey, pdImageXObject); }确认PdfBoxGraphics2D的透明度配置
初始化PdfBoxGraphics2D时明确开启透明度支持:// 构造方法中transparency参数设为true PdfBoxGraphics2D pdfBoxGraphics2D = new PdfBoxGraphics2D(contentStream, page.getMediaBox(), true);
内容的提问来源于stack exchange,提问作者gopi
相关产品推荐
相关产品推荐

