就是读取WORD的时候,,,WORD里面的那些例如数学公式,,,会变成一个WMF图片... 直接用原来的POI的图片读取方法...是读取不了这个WMF图片的,,生成了一个没用的文件.. 后来我自己用基本的IO流(但是得到图片的字节数组的方法还是用POI的)生成了一个WMF图片,,可以用图片浏览器浏 览...但是无法在html页面上面显示..
而且一个本来可以在html页面上面显示的WMF图片, 经过了POI的读取之后, 也是可以用图片浏览器浏览, 但是在HTML 页面上显示的时候还是显示不了, 一个X... 有没有人知道大概是怎么回事???
而且一个本来可以在html页面上面显示的WMF图片, 经过了POI的读取之后, 也是可以用图片浏览器浏览, 但是在HTML 页面上显示的时候还是显示不了, 一个X... 有没有人知道大概是怎么回事???
解决方案 »
- Could not connect to SMTP host: smtp.163.com, port: 25
- 请教中文乱码问题
- 关于网采用php与jsp的选择?(咨询贴)
- 关于session取值的疑惑
- 这段代码为什么会出错误
- 怎样捕捉例外?
- 多用户版"日程管理",源码开放!提供下载!
- 关于JSP中文字符处理的问题?
- JAVA1.8下 Applet出现错误:Missing Permissions manifest attribute in main jar:
- java利用openoffice将excel转为pdf,怎样将excel的所有列都在pdf的一页里显示.求指教。
- 寻求一个复选框问题的解决办法
- 高手来啊 图片上传问题
/**
* 将图片导入到特定的文件夹下面
*
* @param directory : WEB应用当前的路径+存放图片的路径
* @throws IOException
*/
public void extractImagesIntoDirectory( String directory ) throws IOException { PicturesTable pTable = msWord.getPicturesTable();
int numCharacterRuns = msWord.getRange().numCharacterRuns(); for (int i = 0; i < numCharacterRuns; i++) {
CharacterRun characterRun = msWord.getRange().getCharacterRun(i);
if (pTable.hasPicture(characterRun)) {
Picture pic = pTable.extractPicture(characterRun, true);
String extName = pic.suggestFileExtension();
File f = new File( directory + "/" + folderName );
if( !f.exists() ){
f.mkdir();
}
OutputStream out = new FileOutputStream(new File( directory + "/" + folderName + "/" + imgCount + "."+extName )); imgCount++;
out.write( pic.getContent() );
//pic.writeImageContent(out); //这个方法生成的图片是不可用的, 连图片浏览器都读不了
out.flush();
out.close();
}
}
}
/**
* @return picture's content as byte array
*/
public byte[] getContent()
{
if (content == null || content.length<=0)
{
fillImageContent();
}
return content;
}private void fillImageContent()
{
byte[] rawContent = getRawContent(); // HACK: Detect compressed images. In reality there should be some way to determine
// this from the first 32 bytes, but I can't see any similarity between all the
// samples I have obtained, nor any similarity in the data block contents.
if (matchSignature(rawContent, COMPRESSED1, 32) || matchSignature(rawContent, COMPRESSED2, 32))
{
try
{
InflaterInputStream in = new InflaterInputStream(new ByteArrayInputStream(rawContent, 33, rawContent.length - 33));
ByteArrayOutputStream out = new ByteArrayOutputStream();
/*content = new byte[40960];
in.read(content);*/
byte[] buf = new byte[4096];
int readBytes;
while ((readBytes = in.read(buf)) > 0)
{
out.write(buf, 0, readBytes);
}
content = out.toByteArray();
}
catch (IOException e)
{
// Problems reading from the actual ByteArrayInputStream should never happen
// so this will only ever be a ZipException.
log.log(POILogger.INFO, "Possibly corrupt compression or non-compressed data", e);
}
} else {
// Raw data is not compressed.
content = rawContent;
}
}public byte[] getRawContent()
{
if (rawContent == null || rawContent.length <= 0)
{
fillRawImageContent();
}
return rawContent;
}
private void fillRawImageContent()
{
this.rawContent = new byte[size];
System.arraycopy(_dataStream, pictureBytesStartOffset, rawContent, 0, size);
}
/**
* 将图片导入到特定的文件夹下面
*
* @param directory : WEB应用当前的路径+存放图片的路径
* @throws IOException
*/
public void extractImagesIntoDirectory( String directory ) throws IOException { PicturesTable pTable = msWord.getPicturesTable();
int numCharacterRuns = msWord.getRange().numCharacterRuns(); for (int i = 0; i < numCharacterRuns; i++) {
CharacterRun characterRun = msWord.getRange().getCharacterRun(i);
if (pTable.hasPicture(characterRun)) {
Picture pic = pTable.extractPicture(characterRun, true);
String extName = pic.suggestFileExtension();
File f = new File( directory + "/" + folderName );
if( !f.exists() ){
f.mkdir();
}
OutputStream out = new FileOutputStream(new File( directory + "/" + folderName + "/" + imgCount + "."+extName )); imgCount++;
out.write( pic.getContent() );
//pic.writeImageContent(out); //这个方法生成的图片是不可用的, 连图片浏览器都读不了
out.flush();
out.close();
}
}
}
/**
* @return picture's content as byte array
*/
public byte[] getContent()
{
if (content == null || content.length<=0)
{
fillImageContent();
}
return content;
}private void fillImageContent()
{
byte[] rawContent = getRawContent(); // HACK: Detect compressed images. In reality there should be some way to determine
// this from the first 32 bytes, but I can't see any similarity between all the
// samples I have obtained, nor any similarity in the data block contents.
if (matchSignature(rawContent, COMPRESSED1, 32) || matchSignature(rawContent, COMPRESSED2, 32))
{
try
{
InflaterInputStream in = new InflaterInputStream(new ByteArrayInputStream(rawContent, 33, rawContent.length - 33));
ByteArrayOutputStream out = new ByteArrayOutputStream();
/*content = new byte[40960];
in.read(content);*/
byte[] buf = new byte[4096];
int readBytes;
while ((readBytes = in.read(buf)) > 0)
{
out.write(buf, 0, readBytes);
}
content = out.toByteArray();
}
catch (IOException e)
{
// Problems reading from the actual ByteArrayInputStream should never happen
// so this will only ever be a ZipException.
log.log(POILogger.INFO, "Possibly corrupt compression or non-compressed data", e);
}
} else {
// Raw data is not compressed.
content = rawContent;
}
}public byte[] getRawContent()
{
if (rawContent == null || rawContent.length <= 0)
{
fillRawImageContent();
}
return rawContent;
}
private void fillRawImageContent()
{
this.rawContent = new byte[size];
System.arraycopy(_dataStream, pictureBytesStartOffset, rawContent, 0, size);
}