IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 输出word文件中插入图片 -> 正文阅读

[移动开发]Android 输出word文件中插入图片

1.POI的坑把人踩废了,4.0之后的都试过多少有点问题,着急麻黄终于用3.9的搞定了,分享一下
2.需要的lib包:下载链接
在这里插入图片描述
3.代码实现
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlToken;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;

public void writeImgList2Word(List imgFile,String saveFile,
boolean useA4Size,Callback result){

  if(TextUtils.isEmpty(saveFile)) {
    result.success(null);
    return;
  }

  final File out = new File(saveFile);
  if(writeThread != null) {
    writeThread.interrupt();
  }
  writeThread = new Thread(){
    @Override
    public void run() {
      OutputStream os = null;
      InputStream is = null;
      XWPFDocument d = null;
      try {
        Log.d("FileWriter", "file write start:" + imgFile);
        d = new XWPFDocument();
        XWPFParagraph paragraph = d.createParagraph();
        XWPFRun run = paragraph.createRun();
        for (int i = 0, imgFileSize = imgFile.size(); i < imgFileSize; i++) {
          String s = imgFile.get(i);
          File igf = new File(s);
          is = new FileInputStream(igf);
          //默认A4大小,留有边距,A4大小595*846
          int width = 550;
          int height = 740;
          if (!useA4Size){
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(s, options);
            width = options.outWidth;
            height = options.outHeight;
          }
          run.addPicture(is, XWPFDocument.PICTURE_TYPE_PNG, igf.getName(), width, height);
          createPicture(i, width, height, paragraph, d);
        }
        os = new FileOutputStream(out, true);
        d.write(os);
        Log.d("FileWriter", "file write finish");
      } catch (IOException | InvalidFormatException e) {
        e.printStackTrace();
      } finally {
        if(is != null) {
          try {
            is.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }
        if(os != null) {
          try {
            os.close();
          } catch (IOException e) {
            e.printStackTrace();
          }
        }

        if(!isInterrupted()) {
          if(out.exists()) {
             Log.d("FileWriter", "file write success");
             result.success(saveFile);
          } else {
             Log.d("FileWriter", "file write fail");
             result.success(null);
          }
     	}
       }//final
     }//run
  };
  writeThread.start();

}

//感谢大神支援的方法,https://blog.csdn.net/kzhzhang/article/details/84924579
//没有这个方法图片写进去了,但是打开文档显示不出来
public void createPicture(int id, int width, int height, XWPFParagraph paragraph,XWPFDocument document) {
final int EMU = 9525;
width *= EMU;
height *= EMU;
String blipId = document.getRelationId(document.getAllPictures().get(id));
CTInline inline = paragraph.createRun().getCTR().addNewDrawing()
.addNewInline();
String picXml = “”
+ “<a:graphic xmlns:a=“http://schemas.openxmlformats.org/drawingml/2006/main”>”
+ " <a:graphicData uri=“http://schemas.openxmlformats.org/drawingml/2006/picture”>"
+ " <pic:pic xmlns:pic=“http://schemas.openxmlformats.org/drawingml/2006/picture”>"
+ " pic:nvPicPr" + " <pic:cNvPr id=""
+ id
+ “” name=“Generated”/>"
+ " pic:cNvPicPr/"
+ " </pic:nvPicPr>"
+ " pic:blipFill"
+ " <a:blip r:embed=""
+ blipId
+ “” xmlns:r=“http://schemas.openxmlformats.org/officeDocument/2006/relationships”/>"
+ " <a:stretch>"
+ " <a:fillRect/>"
+ " </a:stretch>"
+ " </pic:blipFill>"
+ " pic:spPr"
+ " <a:xfrm>"
+ " <a:off x=“0” y=“0”/>"
+ " <a:ext cx=""
+ width
+ “” cy=""
+ height
+ “”/>"
+ " </a:xfrm>"
+ " <a:prstGeom prst=“rect”>"
+ " <a:avLst/>"
+ " </a:prstGeom>"
+ " </pic:spPr>"
+ " </pic:pic>"
+ " </a:graphicData>" + “</a:graphic>”;

inline.addNewGraphic().addNewGraphicData();
XmlToken xmlToken = null;
try {
  xmlToken = XmlToken.Factory.parse(picXml);
} catch (XmlException xe) {
  xe.printStackTrace();
}
inline.set(xmlToken);

inline.setDistT(0);
inline.setDistB(0);
inline.setDistL(0);
inline.setDistR(0);

CTPositiveSize2D extent = inline.addNewExtent();
extent.setCx(width);
extent.setCy(height);

}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:44:08  更:2022-03-04 15:45:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:50:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码