aspose转pdf去除水印操作附源码干货

aspose转pdf去除水印操作附源码干货,第1张

最近项目上需要用到office文档转pdf的需求,之前了解到aspose插件可做此事,因此本文总结一下相关经验。

闲话少说,本文结尾处附有.NET源码,如对过程没兴趣,可跳过;

主要是做转换word,excel,ppt;

要实现此功能一般有两种做法,分别是使用第三方插件和使用office自带的另存为功能。

以下是我使用这两个的方案的对比:

本文仅介绍使用aspose这个第三方插件的使用。

office接口实现方式,请看我的另外两篇文章:

1. Windows服务-Office转PDF文件

2. Windows服务-Office转PDF服务部署到服务器一系列问题

网上有很多资料,我这边放一下我参考的资料:

https://blog.csdn.net/bianqing0305/article/details/94602472

此文基本就实现了这个插件的转化功能。

这里面还有一个很好的干货,就是有一个可用的aspose key,这对于我来做测试是再好不过的了,心里暗喜!

但是我在使用的时候遇到了一些问题,就是PPT文件转pdf始终是失败,后台分析原因发现可能是版本的问题。

于是我做了以下尝试:

以下是源码地址:

https://gitee.com/zxws1009/Aspose.DocumentConvert.git

温馨提醒,如要使用此插件,请购买正版aspose key;

欢迎一起留言交流!

OpenOffice java api:

简单的说就是利用java程序可以操作OpenOffice的所有功能,比如创建doc文档,插入文字,设置文字格式等等。

1. OpenOffice 给程序员提供了一个叫UNO (UniversalNetwork Objects)的组件技术.我理解的UNO: OpenOffice 类似于web程序中的服务器,程序员写的代码类似于客户端,利用UNO提供的接口和服务去完成对OpenOffice文档的操作。所以写程序首先要搭建 UNO环境:

1. 下载 OpenOffice

2.复制UNO提供的jar包: unoil.jar, java_uno.jar, juh.jar, jurt.jar, ridl.jar, unoloader.jar. (ps: 安装了SDK之后在文件夹找)到自己的工程中,引入它们。

3. 下载文档:DevelopersGuide.pdf.

4. 安装了SDK后,重新启动一下机器,然后就可以按照 DevelopersGuide 来学习 UNO 编程了。

5. 需要ava 环境。

补充: 安装了SDK后, java, c++帮助文档,样例程序,其他关于sdk的信息 都放在本地openOffice安装路径一个叫sdk目录下面,enjoy it !

总结一下已经实现的功能和碰到的问题汇总:

1. 首先要得到远程office组件的上下文.通过:

com.sun.star.uno.XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap()

得到,如果OpenOffice安装路径不是在工程的路径下面(我自己猜的), 就会报:

com.sun.star.comp.helper.BootstrapException: no office executable found!

解决办法: 黑其源代码, 看了源代码就会发现其实OpenOffice是在寻找本地的soffice的shell文件,所以弄个变量来保存soffice在系统中的路径,重新写一 个Bootstrap就可以了。详细请参照:论坛 。

2. 得到 XMultiComponentFactory (ComponentFactory 工厂)

com.sun.star.lang.XMultiComponentFactory xMCF = xContext.getServiceManager()

3. 得到各种组件可以通过下面代码:

// docType 是 与 soffice 同目录下面的OpenOffice的其他shell文件,swrite等等

protected XComponent newDocComponent(String docType)

throws java.lang.Exception {

String loadUrl = "private:factory/" + docType

mxRemoteServiceManager = this.getRemoteServiceManager()

Object desktop = mxRemoteServiceManager.createInstanceWithContext(

"com.sun.star.frame.Desktop", mxRemoteContext)

XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime

.queryInterface(XComponentLoader.class, desktop)

PropertyValue[] loadProps = new PropertyValue[0]

return xComponentLoader.loadComponentFromURL(loadUrl, "_blank", 0,

loadProps)

}

4.得到 XTextDocument

XComponent xEmptyWriterComponent = newDocComponent("swriter")

XTextDocument mxDoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,

xEmptyWriterComponent)

5. 得到一个文档的引用

XText mxDocText = mxDoc.getText()

6. 得到文档的属性列表

XPropertySet mxDocProps = (XPropertySet) UnoRuntime.queryInterface(

XPropertySet.class, mxDoc)

7. 建立光标,用来插入新的内容。

XTextCursor mxDocCursor = mxDocText.createTextCursor()

XSentenceCursor xSentenceCursor = (XSentenceCursor) UnoRuntime

.queryInterface(XSentenceCursor.class, mxDocCursor)

XWordCursor xWordCursor = (XWordCursor) UnoRuntime.queryInterface(

XWordCursor.class, mxDocCursor)

8.得到光标属性列表

XPropertySet xCursorProps = (XPropertySet) UnoRuntime .queryInterface(XPropertySet.class, mxDocCursor)

9.设置插入文字格式

xCursorProps.setPropertyValue("CharFontName", "宋体")

xCursorProps.setPropertyValue("CharWeight", new Float(FontWeight.BOLD))

xCursorProps.setPropertyValue("CharHeight", new Float(10.5))

// 居中显示

xCursorProps.setPropertyValue("ParaAdjust", com.sun.star.style.ParagraphAdjust.CENTER)

10.在该光标处插入信息

mxDocText.insertString(xSentenceCursor, “Hello World", true)

11. 保存的关键代码

protected void storeDocComponent(XComponent xDoc, String storeUrl)

throws java.lang.Exception {

XStorable xStorable = (XStorable) UnoRuntime.queryInterface(

XStorable.class, xDoc)

PropertyValue[] storeProps = new PropertyValue[1]

storeProps[0] = new PropertyValue()

storeProps[0].Name = "FilterName"

storeProps[0].Value = "MS Word 97"

openOfficeJavaLogger.debug("... store \"" + xDoc.toString() + "\" to \"" + storeUrl

+ "\".")

xStorable.storeAsURL(storeUrl, storeProps)

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/662733.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-07-25
下一篇2023-07-25

发表评论

登录后才能评论

评论列表(0条)

    保存