java - PPTX 到 PNG 颜色渲染 – Apache POI

标签 java png apache-poi powerpoint

我正在使用 POI 库将 pptx 幻灯片转换为 png,但它无法正确呈现幻灯片的颜色,例如,它不会呈现绿松石色,而是呈现灰色。 我试图将 pptx 幻灯片转换为 svg 但遇到了同样的问题,所以我想知道它是否与 XMLSlideShow 类或 XSLFSlide 类有关。 任何帮助将不胜感激!

代码:

String file = "C:\\Users\\ABC\\demo1.pptx";
XMLSlideShow ppt = null;

ppt = new XMLSlideShow(OPCPackage.open(new File(file)));    
Dimension pgsize = ppt.getPageSize();
float scale = 1;
int width = (int) (pgsize.width * scale);
int height = (int) (pgsize.height * scale);

XSLFSlide[] slide = ppt.getSlides();

for (int i = 0; i < slide.length; i++) {
    String title = slide[i].getTitle();

    BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    Graphics2D graphics = img.createGraphics();

    graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
    graphics.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
    graphics.setColor(Color.white);
    graphics.clearRect(0, 0, width, height);
    graphics.scale(scale, scale);

    slide[i].draw(graphics);

    int sep = file.lastIndexOf(".");
    String fname = file.substring(0, sep == -1 ? file.length() : sep) + "-" + (i + 1) +".png";

    FileOutputStream out = new FileOutputStream(fname);
    ImageIO.write(img, "png", out);
    out.close();
}   

最佳答案

这是 apache POI 库的问题。请使用可能会解决您的问题的旧版本,即 3.7。

关于java - PPTX 到 PNG 颜色渲染 – Apache POI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22099129/

相关文章:

svg - 将一堆图像从 svg 转换为 png

ios - 我在哪里可以获得 `pngcrush` 工具优化 iOS 图像并可在 Linux 服务器上运行?

java - 如何使用 apache poi 为 3 个单元格设置注释

Java - 如果二维数组包含目标数字,则将其行/列清零

java - OnClickListener 空对象引用

java - 如何高效查找相似文档

java - 通过 Java 反射重新创建(通用)成员并填充/分配字段成员

XXHDPI 的 Android 背景图像大小

java - 使用 POI 在现有工作表之间创建 Excel 工作表

java - 在浏览器中打开 poi excel