0

我正在使用 Apache POI 库来操作 PowerPoint 文件。它在 GAE 上非常适用于检查 PPTX 文件的内容。但是,如果我尝试更改 PowerPoint 文件的内容,则会收到以下 GAE 错误:

java.lang.NoClassDefFoundError: java.awt.geom.RectangularShape 是一个受限类。有关详细信息,请参阅 Google App Engine 开发人员指南。在 com.google.apphosting.runtime.security.shared.stub.java.awt.geom.RectangularShape.(RectangularShape.java) 在 org.apache.poi.xslf.usermodel.XSLFSimpleShape.getAnchor(XSLFSimpleShape.java:176)

有没有人在 GAE 上解决过这个问题或类似的 java.awt 问题?我正在考虑破解 Apache POI 源,但宁愿在 GAE 中对 java.awt 提供某种本机支持。我做了一些研究,并且:

1) 在 GAE 上针对 java.awt 支持提出了很多问题,并且已被接受为问题。想知道这是否在内部取得了进展?它于 2011 年 8 月被接受。

2)有一个项目:http ://code.google.com/p/appengine-awt/是java.awt的纯java实现。我想知道这是否支持 java.awt.geom.RectangularShape?

4

1 回答 1

0

因此,我设法为使用 GAE 的其他感兴趣的 Apache POI 用户解决了这个问题。您可以对预定义的 PowerPoint 模板进行一些操作,只是避免使用任何需要使用底层 java.awt 库(在 GAE 上受限)的方法。我的问题是使用 createSlide() 和 importContent() 方法。我只需要修改文本,以便在内存版本的 PPT 文件上使用:

XSLFShape[] shapes = slide.getShapes();
    for (XSLFShape shape : shapes) {
        if (shape instanceof XSLFTextShape) {
            XSLFTextShape textShape = (XSLFTextShape)shape;

            switch (shape.getShapeId()) 
            case 1:
                textShape.setText("1st text box");

解决了我的问题。

Plea to Google - 请提供一个 API 用于直接操作 Google Docs/Presentations。目前唯一的解决方案是将 Google 演示文稿下载到 GAE(内存中),使用 Apache POI 进行操作,然后作为不同的 Google 演示文稿上传。

于 2012-07-31T09:43:37.477 回答