当前位置: 首页 > news >正文

使用jacob进行word操作

由于项目需要,需要在后台对word文档中的书签进行重新填值,并进行打印。一开始已经使用Spire.Doc for Java实现了这个效果,但是这个插件是收费的,公司不想买,于是就在网上找了一段时间开源的插件,最终用了JACOB这个插件。下面记录一下实现的方法
1、使用准备
jacob下载地址:https://github.com/freemansoft/jacob-project/releases
2、使用方法
添加到项目:将jacob-1.18.jar复制到你的项目的类路径下,或是通过构建工具如Maven或Gradle的依赖管理添加。

     <dependency>
            <groupId>com.jacob</groupId>
            <artifactId>jacob</artifactId>
            <version>1.18</version>
     </dependency>

DLL放置:确保对应的.dll文件位于可访问的系统路径中,或者直接放在Java执行目录下,以便于JVM加载。

示例代码:在你的Java程序中,你可以开始使用Jacob提供的API来创建和操作COM对象,例如自动化Word文档处理等。

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import lombok.extern.slf4j.Slf4j;

import java.io.File;

@Slf4j
public class WordConvertPdf {
    private static final int wdFormatPDF = 17; // PDF 格式

    public static void wordToPDF(String sourceFilePath, String targetFilePath) {

        log.info("启动 Word...");
        long start = System.currentTimeMillis();
        ActiveXComponent app = null;
        Dispatch doc = null;
        try {
            app = new ActiveXComponent("Word.Application");
            app.setProperty("Visible", new Variant(false));
            Dispatch docs = app.getProperty("Documents").toDispatch();
            doc = Dispatch.call(docs, "Open", sourceFilePath).toDispatch();
            log.info("打开文档..." + sourceFilePath);
            log.info("转换文档到 PDF..." + targetFilePath);
            File tofile = new File(targetFilePath);
            if (tofile.exists()) {
                tofile.delete();
            }
            Dispatch.call(doc, "SaveAs", targetFilePath, // FileName
                    wdFormatPDF);
            long end = System.currentTimeMillis();
            log.info("转换完成..用时:" + (end - start) + "ms.");

        } catch (Exception e) {
            log.info("========Error:文档转换失败:" + e.getMessage());
        } finally {
            Dispatch.call(doc, "Close", false);
            log.info("关闭文档");
            if (app != null)
                app.invoke("Quit", new Variant[]{});
        }
        // 如果没有这句话,winword.exe进程将不会关闭
        ComThread.Release();
    }

    public static void main(String[] args) {
        WordConvertPdf d = new WordConvertPdf();
        d.wordToPDF("/Users/xdai/项目/一体化/开发文档/技术文件/部署文件/template/外网/任务书封面封底-京.docx", "/Users/xdai/项目/一体化/开发文档/技术文件/部署文件/template/外网/上海骄成机电设备有限公司企业发展分析报告.pdf");
    }

}

注意事项
在生产环境中使用时,建议详细测试以保证兼容性和稳定性。
若遇到 UnsatisfiedLinkError错误,请确认.dll文件的位置是否正确,且系统架构与DLL匹配。
版权与许可:请遵循Jacob项目的相关许可协议使用此资源。


文章转载自:

http://jHcB1VDV.bhbfm.cn
http://938bUQp7.bhbfm.cn
http://laoBb2zi.bhbfm.cn
http://T4x7J67T.bhbfm.cn
http://OzreeqMl.bhbfm.cn
http://mfiKTjUe.bhbfm.cn
http://BlG4lJI1.bhbfm.cn
http://hBcBWaLO.bhbfm.cn
http://QzZU76sz.bhbfm.cn
http://iN4MlUMU.bhbfm.cn
http://UdRCxXfz.bhbfm.cn
http://oZcfBNVq.bhbfm.cn
http://vEWq6k7I.bhbfm.cn
http://X1ymF9YV.bhbfm.cn
http://j8GlIW48.bhbfm.cn
http://tcepdBFv.bhbfm.cn
http://rlG4pvRK.bhbfm.cn
http://qFzyvCJS.bhbfm.cn
http://6HAQGM3j.bhbfm.cn
http://PxCSDza6.bhbfm.cn
http://K8S79auc.bhbfm.cn
http://wmvV8zlH.bhbfm.cn
http://FFbRC1qt.bhbfm.cn
http://ox0Dn50U.bhbfm.cn
http://s1JJ4zS4.bhbfm.cn
http://Bun48MuJ.bhbfm.cn
http://TPpCjtqz.bhbfm.cn
http://7CDUy0Nf.bhbfm.cn
http://XQkHiLhR.bhbfm.cn
http://Js3qjU9d.bhbfm.cn
http://www.dtcms.com/a/51395.html

相关文章:

  • docker:Dockerfile案例之自定义centos7镜像
  • ESP8266连接网络实时上传数据
  • 基于Qwen-VL的手机智能体开发
  • 达梦适配记录-检查服务器
  • Linux网络相关内容与端口
  • 【人工智能】异构算力重构AIGC | 蓝耘智算平台部署通义万相2.1文生图技术全解析
  • RocketMQ顺序消费机制
  • 智慧水务新时代:1.05亿项目引领的数字化浪潮
  • 从“0”开始入门PCB之(5)完结篇!--快速入门原理图DRC,PCB的符号与布局,2D与3D效果,PCB的图层和布线,PCB板框
  • 备赛蓝桥杯之第十五届职业院校组省赛第六题:简易JSX解析器
  • 深入探索WebGL:解锁网页3D图形的无限可能
  • AI控制游戏 -- 开源框架来了!
  • 电力MOSFET的输出特性与转移特性
  • 【基于手势识别的音量控制系统】
  • Kali GRUB 修复
  • 19c rac-expdp备份异常处理
  • 使用Perl和库WWW::Curl的爬虫程序
  • 解锁数据潜能,永洪科技以数据之力简化中粮可口可乐决策之路
  • 001-Boost消息队列的使用
  • python学习笔记-day5
  • CuPy加速计算 —— 使用 Python 进行 GPU 加速计算的 NumPy/SciPy 兼容数组库
  • 贝叶斯定理全解析
  • Springboot 梳理
  • 理解 Python 中的 `asyncio` 模块
  • python绘图之双轴图
  • leetcode5:最长回文子串
  • 利用golang embed特性嵌入前端资源问题解决
  • 通义万相2.1携手蓝耘智算,开启AIGC新篇章
  • 安路FPGA移植Cortex-M0内核
  • DeepSeek提示词模板-架构设计类