我面临一个问题,比如我使用 apache POI 生成 pptx powerpoint 演示文稿,所以生成的 ppt 是用 libra office 打开的,但是当我试图在 ms powerpoint 中打开时,它会产生一些问题,比如图像没有显示,这我插入了演示文稿。我在 json 数组中采用字节编码字符串,并将其传递给我 服务。有人可以帮我解决问题吗?谢谢
服务
public Response generatePptDocument(JSONObject json) throws JSONException{
JSONArray jsonArray=json.getJSONArray("image");
String [] stringArray=new String[jsonArray.length()];
XMLSlideShow ppt = new XMLSlideShow();
Response result=null;
String uniquename=null;
try{
for(int i=0;i<jsonArray.length();i++){
XSLFSlide slide = ppt.createSlide();
stringArray[i]=(String) jsonArray.get(i);
byte[] picture=Base64.decodeBase64(stringArray[i].substring(22));
int idx = ppt.addPicture(picture, XSLFPictureData.PICTURE_TYPE_PNG);
ppt.setPageSize(new java.awt.Dimension(1600, 600));
//creating a slide with given picture on it
XSLFPictureShape pic = slide.createPicture(idx);
String outputDirectory = propertyUtil.getProperty("output.save.uri");
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("ddMMyyyyHHmmss");
String date = DATE_FORMAT.format(new Date());
uniquename = 1 + "-" + date + "." + "pptx";
String streamPath = outputDirectory+uniquename;
//creating a file object
File file=new File(streamPath);
FileOutputStream out = new FileOutputStream(file);
//saving the changes to a file
ppt.write(out);
StringResponse response=new StringResponse();
response.setUniqueName(uniquename);
result=Response.ok().entity(response).build();
}
}catch(JSONException e){
log.info("Error in json Object");
result=Response.status(304).entity("Error in json Object").build();
}
catch(IOException e){
log.info("Error while creating PPT Document");
result=Response.status(304).entity("Error while generation PPT").build();
}
最佳答案
您似乎将参数作为 JSONObject
中的二进制或输入流。确保您没有使用 if 条件获取 null JSONObject
。而且,你写了:
byte[] picture=Base64.decodeBase64(stringArray[i].substring(22));
您正在削减字符串本身开头的索引 22 处的字符串。确保您以正确的方式阅读字符串。因为您正在获取的二进制字符串可能会在 decryption
由于特定索引处的子字符串而丢失某些内容。即使您错过了单个字符,您的二进制字符串也没有任何意义。
关于java - 与apache poi相关的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760252/