java程序替换word2007中的图片

1、新建word2007文档h2do.docx;

2、QQ截图粘贴到文档,添加些文字;

3、用winrar打开(修改扩展名docx为rar或右键->打开方式->选择winrar程序),目录结构如下:

.

│  [Content_Types].xml

├─docProps

│      app.xml

│      core.xml

├─word

│  │  comments.xml

│  │  document.xml

│  │  endnotes.xml

│  │  fontTable.xml

│  │  footnotes.xml

│  │  numbering.xml

│  │  settings.xml

│  │  styles.xml

│  │  webSettings.xml

│  │

│  ├─media

│  │      image1.png

│  │      image2.png

│  │

│  ├─theme

│  │      theme1.xml

│  │

│  └─_rels

│          document.xml.rels

└─_rels

.rels

以下代码通过java程序替换word文件中的图片image1.png

public static void main(String[] args) throws Throwable
{
    ZipInputStream  zis = new ZipInputStream (new FileInputStream ("h2do.docx") );
    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("e2say.docx"));
    
    ZipEntry ze = null;
    byte[] b = new byte[1024];
    while((ze = zis.getNextEntry()) != null)
    {
        System.out.println(ze.getName() + ":" + ze.getMethod());
        ZipEntry entry = new ZipEntry(ze.getName());
        zos.putNextEntry(entry);
        
        /*将源压缩文件中每个文件写至新压缩文件*/
        InputStream is = zis;
        if(ze.getName().endsWith(".xml"))
        {
            String line = null;
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            while((line = br.readLine()) != null)
            {
                //TODO:进行查证替换
                zos.write((line+"\r\n").getBytes());
            }
        }else{//非xml文件,二进制流数据
            //替换图片
            if(ze.getName().endsWith("image1.png")){
                is = new FileInputStream("temp.png");
            }

            int r = -1; 
            while((r = is.read(b)) != -1){
                zos.write(b, 0, r);
            }
            
        }
        
        if(is != zis){
            is.close();
        }
    }
    
    zos.close();
    
}
时间: 2024-11-05 14:50:00

java程序替换word2007中的图片的相关文章

ofbiz,普通java程序,osgi中类加载

OSGI中类加载 在osgi中,存在多个类加载器,每一个类加载器加载一个独立的模块,当其他模块需要寻找这个类时,通过osgi框架依赖关系表去查找这个类所在的加载器,委托这个加载器去运行 ofbiz中类加载 ofbiz中集成了许多应用程序,像订单,安全,登陆,网店等,还有tomcat也被集成到ofbiz中,在ofbiz中是通过将这些应用程序的jar包和资源文件加载到同一个类加载器中(包括tomcat) 普通java程序 和ofbiz中类加载器一致

JAVA抠取Excel中的图片

EXCEL中扔了一堆的图片,老大让对应到数据库中的数据上.思路先把图片抠出存成单个图片.然后上传到服务器,取下路径更新到数据库中. 注释掉的部分为有多个Excel时使用. package com.zhaopin; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOu

面试?顺谈Java程序员学习中各阶段的建议

第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题.说实话,LZ只能隐约想起并发.JVM.分布式.TCP/IP协议这些个关键字,具体的问题真的是几乎都没记住.而且就算LZ记住了,也告诉你了,你也背会了,但LZ觉得,在面试中,你被问到一模一样问题的可能性依然很小. 甚至,就算你运气好被问到了,你也照着背下来了,也不一定就能对你的面试起到正面的作用,因为面试官万一多问一句,你可能就露馅了,那还不如干脆点说不会更好. LZ参加的是阿里的社招面试,而社招不同

Java动态替换InetAddress中DNS的做法简单分析1

在java.net包描述中, 简要说明了一些关键的接口. 其中负责networking identifiers的是Addresses. 这个类的具体实现类是InetAddress, 底层封装了Inet4Address与Inet6Address的异同, 可以看成一个Facade工具类. A Low Level API, which deals with the following abstractions: Addresses, which are networking identifiers,

Java程序在Linux中实现后台运行

1.运行脚本 脚本如下,这个脚本存在一点问题,Log4j稍微有点问题,但是对运行及日志记录没有影响,日志是通过将所有控制台数据全部写入文件的形式记录的. #!/bin/sh #author:wangchengwei #date:2015-7-7 #desc:Run java application #Java的安装目录 JAVA_HOME=/usr/lib/java-1.7.0 #运行程序所使用的用户 OWNER=root #Java程序的目录 APP_HOME=/software/TaxiDa

Java程序员面试中最容易答错的8道面试题,你中坑了吗?

1. static 和 final 的用法 static 的作用从三个方面来谈,分别是静态变量.静态方法.静态类. 静态变量:声明为 static 的静态变量实质上就是全局变量,当声明一个对象时,并不产生static 变量的拷贝,而是该类所有实例变量共用同一个 static 变量.也就是说这个静态变量只加载一次,只分配一块储存空间. 静态方法: 声明为static的静态方法有以下几个特点: (1)静态方法只能调用静态方法: (2)静态方法只能访问静态数据: (3)静态方法不能以任何方式引用thi

Java程序员面试中的多线程问题

很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的.这篇文章收集了Java线程方面一些典型的问题,这些问题经常被高级工程师所问到. 0.Java中多线程同步是什么? 在多线程程序下,同步能控制对共享资源的访问.如果没有同步,当一个Java线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果. 1.解释实现多线程的几种方法? 一Java线

微信小程序富文本中的图片大小超出屏幕

这个问题我在小程序社区中提的,后来有个帮我回答了这个问题,我试了一下可以. 解决办法是过滤富文本内容,给图片标签添加一个样式,限制图片的最大宽度. replace(/\<img/gi,   '<img class="rich-img" ' ); 就可以了 rich-text   .rich-img { width: 100% ; height: auto ; } 原文地址:https://www.cnblogs.com/fangyinghua/p/9264425.html

Java动态替换InetAddress中DNS的做法简单分析2

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.HttpURLConnection; import java.net.InetAddress;