java使用poi操作word实现电子签章

3 篇文章 0 订阅

这个电子签章其实并不算真正意义上的电子签章,有一些取巧的成分在。在代码之前我先简单讲一下这个操作的原理,其实就是在你的word模板上事先传上一张图片,将样式、大小都设置好,然后在代码中将图片文件进行替换。注:替换的只是图片的内容,样式、大小还是依照模板中原来的设置。

上代码!
依赖

        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.0</version>
        </dependency>
InputStream is = this.getClass().getResourceAsStream("/demo.docx");
        XWPFDocument document = new XWPFDocument(is);
        try {
            URL url = new URL("图片地址");//线上地址,本地地址也可以,我这里就不列举了,不难
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            //设置超时间为3秒
            conn.setConnectTimeout(3*1000);
            //防止屏蔽程序抓取而返回403错误
            conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
            //得到输入流
            //这里的rId4可不是固定的,这个其实就是图片在word文件中的标识,下方会给出获取的方法
            document.getPackagePart().removeRelationship("rId4");
            //将图片插入word
            String ind = document.addPictureData(conn.getInputStream(),XWPFDocument.PICTURE_TYPE_PNG);
            //替换图片
            document.getPackagePart().addRelationship(document.getPackagePart().getRelationship(ind).getTargetURI(), TargetMode.INTERNAL,XWPFRelation.IMAGES.getRelation(), "rId4");
        } catch (Exception e) {
            System.out.println("报错了");
            e.printStackTrace();
        }
        //导出到文件
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        document.write((OutputStream) byteArrayOutputStream);
        String filePath = "D:/uploads/demo/";
        String fileName = "demo";
        File file = new File(filePath + fileName + ".docx");
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        FileOutputStream outputStream = new FileOutputStream(filePath + fileName + ".docx");
        outputStream.write(byteArrayOutputStream.toByteArray());
        outputStream.flush();
        outputStream.close();

上文中的rId4的获取方法
首先准备一个word模板,复制一份出来,在副本word中插入一张图片,设置好需要的样式,然后将两个word的后缀改为zip,打开zip文件,在word文件夹下打开document.xml文件,对比两份xml文件,找到副本中多出来的部分,如下图
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Apache POI库来操作Word文档,下面是一个示例代码,演示如何使用POIWord文档中写入文字和图片。 ```java import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.poi.xwpf.usermodel.*; import org.apache.poi.util.IOUtils; public class WordWriter { public static void main(String[] args) throws Exception { // 创建一个新的Word文档对象 XWPFDocument doc = new XWPFDocument(); // 创建一个新的段落 XWPFParagraph para = doc.createParagraph(); // 创建一个新的文本运行 XWPFRun run = para.createRun(); // 设置文本运行的内容 run.setText("Hello World!"); // 添加一个换行符 para.createRun().addBreak(); // 读取图片文件 FileInputStream fis = new FileInputStream(new File("image.jpg")); // 将图片文件转换为二进制数组 byte[] bytes = IOUtils.toByteArray(fis); // 关闭文件输入流 fis.close(); // 创建一个新的段落 para = doc.createParagraph(); // 创建一个新的文本运行 run = para.createRun(); // 插入图片 run.addPicture(bytes, XWPFDocument.PICTURE_TYPE_JPEG, "image.jpg", Units.toEMU(300), Units.toEMU(200)); // 保存Word文档 FileOutputStream fos = new FileOutputStream(new File("output.docx")); doc.write(fos); fos.close(); } } ``` 上述代码中,首先创建了一个新的Word文档对象。然后创建了一个新的段落和文本运行,并设置了文本运行的内容。接着添加了一个换行符。接下来,读取了一个图片文件,将其转换为二进制数组,并插入到一个新的段落中。最后,将Word文档保存到文件中。 注意,在实际使用中,需要根据具体情况设置图片的类型和大小。此外,还可以设置图片的位置、对齐方式等属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值