学习Spire.Office 10.3.0版本的科学实践(一)
Spire Office
admin 发布于:2025-04-26 14:00:41
阅读:loading
Spire是e-iceblue公司的一个产品系列,专注于高效、功能丰富的文档处理解决方案。e-iceblue成立于2009年,致力于为开发者提供简单易用的文档处理工具,以满足各种业务需求。Spire 产品广泛应用于企业办公、教育、金融等多个行业。e-iceblue旗下有多个产品系列,也支持多种编程语言,如:NET、C++、Java、Python、JavaScript、Android等,本次以Spire.Office for Java支持的产品种类为例,经过一些时间的分析与摸索,实现它的组件应用的无水印和页数限制,以时下最新的版本为例摸索出它的科学实现分享。特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权)。
在查找与Aspose相类似的技术网站时,发现了Spire产品相关的介绍,了解了一下它官网相关的介绍发现其有多种语言的多款产品,给我的感觉是非常强大,而且它还是国内的一家公司,怎能是一个牛子了得。既然决定了解一下那么就把Spire for Java相关产品组件挨个给过了一下,都是以文档转换为例,编写了文档转换的例子发现转换出来的效果还是不错的,但是非授权版本的示例是有水印和页数限制的。所以我优先选择了Spire.doc产品,进行了摸索,我承认在看到它jar文件中的class内容时,还是很颠覆我的认知的 ,以前虽见识过为保护class文件的防伪手段,但是却没见识过还能以特殊字符定义变量、定义方法、方法调用的,着实是大开了眼界,随便给出一个class相关的代码参考如下:
public class Column extends DocumentSerializable {
private float spr’ = 0.0F;
private float spr‱ = 0.0F;
/*节省一些篇幅*/
public void setSpace(float value) {
this.spr‱ = value;
}
public Column(IDocument doc) {
super((Document)doc, (DocumentObject)null);
}
public void spr__⃡/* $FF was: spr⅔㈫⃡*/(IXDLSAttributeWriter writer) {
super.spr⅔㈫⃡(writer);
writer.writeValue("Width", this.getWidth());
writer.writeValue("Spacing", this.getSpace());
}
public void spr__/* $FF was: spr⑄℃*/(IXDLSAttributeReader reader) {
super.spr⑄℃(reader);
this.setWidth(reader.readFloat("Width"));
this.setSpace(reader.readFloat("Spacing"));
}
@sprfaa
public Column spr__/* $FF was: spr└–*/() {
Column a = (Column)super.spr↮ℂ();
a.spr’ = this.spr’;
a.spr‱ = this.spr‱;
return a;
}
}
经过半天一天的瞎摸索捣鼓,发现自己这两下子想要在短时间内得到成效还是比较困难的(实际上它的难度也确实是遇到过最大的),比如上述的代码是摘自一个class中的反编译代码,通过反射得到上述方法的所有字段和方法,所以它的所有字段分别是:spr’、spr‱,部分方法名称则为:spr⅔、spr⑄℃、spr└–,可以肯定的是它们都能够使用反射进行字段和方法的调用。基于这么高的复杂度,我也懒得再费力气了,于是我考虑网上搜索了,发现CSDN上还是有一些组件能够付费进行下载得到的,综合考虑后在一个好评比较多的资源页中充值后下载了,这也是我第一次在CSDN进行充值付费下载资源,抱着试试的心态来进行参考,顺便给出这个资源的地址:“https://download.csdn.net/download/qq_40957277/89582629”。
上述资源下载的jar确实是可以正常运行的,不过它的版本是“Spire.Doc for Java 11.4.2”的,不知是几年前的老旧版本了,我转换了一些文档得到的内容并不够精准,也许是我的文档比较复杂或特殊吧,一般的文档估计也是够用的。本来是抱着来涨知识的态度学习的,但是发现下载得到的资源是被作者大佬特殊处理过的(我不知道是怎么做到的),几乎改写了全部class的包名称,如果要拿下载得到的版本与官网指定版本的jar中class进行对比,发现其中差异真的是多不胜数的,参考如下图所示:
(jar中class差异对比)
(某个class对比)
可以看到的是作者改写了jar中class的包路径,也许是为了保护他自己科学实现的成果吧,总之普通人真想要从这个jar中找到一些关键调整的实现难度还是非常大的,要不然就是每个类单独的挨个查看,不过鉴于我的实力还是有的,在看了一些关键类的改动后,也对于官方这个版本的jar进行了摸索,令人愉悦的是并不需要改动太多地方就成功了,除了找到几个需要调整点以为,关键的调整位置我发现似乎并不需要过度的去设置参数,实际设置的点也过多了,不知这也是一些烟雾弹还是什么,总的来说这个Spire.Doc for Java 11.4.2也是我照着作者摸索的第一步。不过我的习惯总是要摸索最新的版本,因为新版是一直都是处于不断更新的状态,而且距离老旧版本来说更新的版本已经又是过了几年的产品了,况且最新的版本相对于今后的年头来说,它的“保质期”将更会更久远。
本来吧想要对于Spire for Java的各个软件都按最新的版本来科学实践,但是呢我发现没有那么多的耐心去摸索,原因吗随便一说就是好几个方面:
(1)商业软件,摸索只为自我突破,学习到了就行。
(2)类似的更强大的Aspose、GroupDocs也已经掌握了。
(3)Spire的class代码极其复杂,难度系数非常高。
(4)个人没有那么大的耐心和时间,不愿意长时间进行毫无收益事情上浪费。
所以,虽然单独的Spire for Java的各个软件都不是基于最新的版本,但是基于Spire.Office for Java的最新版本“10.3.0”来的,虽然单独的组件版本不是最新,但是整体的Spire.Office版本是最新的,而且距离单独的最新组件版本也只是差了一丢丢。最后,导入Spire.Office的Maven坐标后,得到的相关产品版本信息如下:
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.office</artifactId>
<version>10.3.0</version>
<type>pom</type>
</dependency>
(1)Spire.Doc版本为:spire.doc-13.3.0.jar,专注于 Word 文档处理的组件;
(2)Spire.XLS版本为:spire.xls-15.3.1.jar,用于处理 Excel 电子表格的组件;
(3)Spire.Presentation版本为:spire.presentation-10.3.7.jar,专注于 PowerPoint 演示文稿的组件;
(4)Spire.PDF版本为:spire.pdf-11.3.5.jar,用于处理 PDF 文档的组件;
(5)Spire.Barcode版本为:spire.barcode-5.1.11.jar,用于处理条形码的组件;
(6)Spire.OCR版本为:spire.ocr-1.9.22.jar,用于处理图像文字识别的组件;
4.其它说明
(1)Spire.Office不是开源免费的使用,Github上有示例项目,包含了大量的示例,示例的结果就是生成了一些《Evaluation Warning》警告、水印、内容页数限制、内容文本限制等;
(2)Spire.Office公司旗下有许多编程语言支持的多种Office文档产品,都是商业付费版本,常见于各种文档格式文件的操作,都需要商业授权使用官网也有更多更详细的说明;
(3)科学实现将是改动jar中class的方式,有必要说的是这个jar文件中并未使用RSA/SF的文件class加密,也可以可以不用改动jar文件的,只需要将改动的class文件单独放置在一个jar文件中,运行是使用java -cp或jar -jar命令时优先加载改动的class,最后加载原始jar中class的形式即可实现不改动jar文件;
(4)Spire.Office下辖的各个产品组件为独立存在的各个产品,Office是提取全集产品中的汇总,囊括了全部产品组件的范围,对内提供统一的版本管理,对外提供一个产品范围体系;
(5)Spire的官网有提供Free Spire.Office for Java免费版本,免费版有篇幅限制,除了文档篇幅限制外,没有任何警告信息,但官方仅对免费版进行不定期维护,不提供技术服务或其他支持服务;
(6)本次学习摸索的目的是基于专业版进行的专业实践,实践的结果就是无水印,无内容页数限制;
(7)特别说明:只为单纯的学习摸索与自我突破,商业软件请勿直接使用于生产环境(购买商业授权);
点赞