同步操作将从 zouyf/wps 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Notice: Licenses for 'dependencies\api-1.1.jar' can be found in the ‘dependencies\license_for_api-1.1.txt’ file.
WPS JavaAPI 属于WPS的跨平台二次开发解决方案的一部分,使用 Java 作为开发语言,具备快速开发、跨平台等优良特性。使用Java原生swing和awt作为窗体容器,大大提升了对平台和操作系统的兼容性。在窗体中通过Java API直接与WPS进行交互,特性如下:
具有完整的功能。可通过多种不同的方法对文档、表单和演示文稿进行创作、格式设置和操控;通过鼠标、键盘执行的操作几乎都能通过 Java API 完成;结合Java程序语言的编程逻辑,可以轻松实现自动化文档编辑;
交互方式灵活。支持通过的接口调用的方式实现功能,还支持事件注册回调的方式实现自由交互。
标准化集成。API 文档完整,接口设计符合 Java 语法规范,上手难度低,缩短开发周期。
在第三方开发的系统中想要实现一些文档编辑功能,然而自行开发一套文档编辑系统成本非常高也不现实,所以可以直接将WPS集成到第三方的系统中,通过调用WPS二次开发接口实现想要的文档编辑功能。
此场景仅适用于将WPS客户端(Windows/Linux)与Java客户端集成,在桌面计算机面向用户使用;不建议将WPS客户端安装在服务端与业务系统集成,此类场景可集成WPS在线预览/在线编辑服务
Java中不提供函数默认参数,因而调用接口时必须给定义的所有参数都传参,如果某个对应位置的参数需要使用默认值,请传递 Variant.getMissing()
,例如:
app.get_ActiveDocument().Protect(WdProtectionType.wdAllowOnlyReading,Variant.getMissing(),Variant.getMissing(),Variant.getMissing(),Variant.getMissing());
获取对象或数值的接口可以直接判断返回值是否为null进行容错校验,操作类型的接口,容错校验需捕获Exception异常,以此判断操作是否执行成功。
所有对象的属性在设置和获取时,在java中均需使用加上get_或put_前缀的对应方法,无法通过“对象名.属性”直接调用,例如:
CommandBarControl controlOfd = commandBar.get_Controls().get_Item(26);
controlOfd.put_Visible(false);
// 不能使用 controlOfd.visible = false;
遇到接口参数名为lcid
的参数,默认传递2052即可。
环境搭建
File>>Project Structure>>Libraries>>Add(+)>>Java>>选择所有jar包>>apply>>ok
编写代码测试主类创建空白swing窗体
import javax.swing.*;
public class TestMain {
public static void main(String[] args) {
java.lang.System.setProperty("sun.awt.xembedserver", "true"); //Linux下必须加这一句
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame mainFrame = new JFrame();
mainFrame.setTitle("WPS JAVA接口调用演示"); //设置显示窗口标题
mainFrame.setSize(1524, 768); //设置窗口显示尺寸
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //置窗口是否可以关闭
mainFrame.setResizable(false);//禁止缩放
mainFrame.setVisible(true); //设置窗口是否可见
}
});
}
}
创建用于装载WPS的Panel:
//紧接着上一步main函数中的:mainFrame.setVisible(true)之后
//创建一个JPanel用于装载画布
JPanel wpsPanel = new JPanel();
wpsPanel.setLayout(new BorderLayout());
//初始化一个空白的画布用于装载WPS
Canvas client = new Canvas() {
public void paint(Graphics g) {
super.paint(g);
}
};
wpsPanel.add(client, BorderLayout.CENTER); //添加画布
mainFrame.add(wpsPanel); //添加JPane
将WPS嵌入到窗体内
// 获取用于装载WPS的Canves的句柄
WindowIDProvider pid = (WindowIDProvider) client.getPeer();
XEmbedCanvasPeer peer = (XEmbedCanvasPeer) pid;
peer.removeXEmbedDropTarget();
//将画布句柄和长宽等信息作为参数初始化WPS窗体
WpsArgs args = WpsArgs.ARGS_MAP.get(WpsArgs.App.WPS);
args.setWinid(pid.getWindow());
args.setHeight(client.getHeight());
args.setWidth(client.getWidth());
ClassFactory.createApplication();// 创建WPS Application对象
注意:
- 获取用于装载WPS的Canves的句柄(pid和peer)的语句,必须在
mainFrame.setVisible(true)
之后调用,否则拿到空指针。- 获取用于装载WPS的Canves的句柄(pid和peer)的语句,不能写在JPanel的构造函数里,必须在JPanel对象创建完成后再获取,否则拿到空指针。
创建WPS App对象
// ......
// ClassFactory.createApplication();
Application app = ClassFactory.createApplication()// 创建一个WPS Application对象
通过app调用二次开发接口操作文档。
//获取WPS app对象
Application app = ClassFactory.createApplication();
//打开文档
app.get_Documents().Add(Variant.getMissing(), Variant.getMissing(), Variant.getMissing(), Variant.getMissing());
//获取版本号
String version = app.get_Build();
//光标位置插入文本,此处写入版本号
app.get_Selection().TypeText(version);
//保存文档
app.get_ActiveDocument().SaveAs(
"~/桌面/test.wps", //保存文件位置
0, //文件类型 0-->wps|doc
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing(),
Variant.getMissing()
);
//关闭文档
app.get_ActiveDocument().Close(false, Variant.getMissing(), Variant.getMissing());
注册关闭事件
EventCookie cookie = app.advise(ApplicationEvents4.class, new ApplicationEvents4() {
@Override
public void DocumentBeforeClose(Document doc, Holder<Boolean> cancel) {
JOptionPane.showMessageDialog(null,"关闭事件被拦截");
cancel.value = true; //cancel为true,代表取消关闭
}
});
取消注册关闭事件
cookie.close();
cookie = null;
给按钮注册事件
// 添加一个按钮
CommandBar bar = app.get_CommandBars().Add("test",1, Variant.getMissing(), Variant.getMissing());
CommandBarControl control = bar.get_Controls().Add(1,1,"test",1,"test");
bar.put_Visible(true);
control.put_Visible(true);
control.put_Caption("test");
//给按钮注册事件
EventCookie cookie = control.advise(_CommandBarButtonEvents.class, new _CommandBarButtonEvents() {
@Override
public void Click(CommandBarButton ctrl, Holder<Boolean> cancelDefault) {
JOptionPane.showMessageDialog(null,"你点击了按钮 test");
cancelDefault.value = true;
}
});
取消注册按钮事件
cookie.close();
cookie = null;
参见本项目demo
。
安装支持二次开发的2019版wps,安装jdk1.7和eclipse, 打开eclipse导入demo工程,运行main函数即可启动界面。
000209FF-0000-0000-C000-000000000046
00024500-0000-0000-C000-000000000046
91493441-5A91-11CF-8700-00AA0060263B
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。