概述
文件转换及在线预览
因为项目是做OA这一块,有很多附件需要实现在线预览附件,在网上也看了很多相关的资料。主要实现方式就是 (openoffice+swftools+flexpaper)和(aspose+pdfjs预览)。
主要步骤:
1.需要先将文档转换为PDF文件。
2.用pdfjs预览PDF文件
转换步骤:使用OpenOffice/Aspose 将ppt、word、excel、txt类型的文件转换为pdf
预览步骤:高版本浏览器上,使用pdf.js直接预览PDF文件
低版本浏览器上,使用swftools将PDF文件转换为swf文件,再使用flexpaper预览swf(没有做这个步骤)
组件安装:
Aspose
由于OpenOffice的转换效果并不太佳,这里选择了Aspose
在Aspose官网下载Aspose的Java版本,主要选择
Aspose.words
Aspose.cells(Excel)
Aspose.slides(PPT)
Aspose.pdf
下载完成后,在工程中引用jar包即可。
功能实现:
这里采用的所有组件版本为:
名称 版本
Aspose.words 16.8.0
Aspose.cells 9.0.0
Aspose.slides 116.7.0
Aspose.pdf 11.8.0
文档转换为PDF
使用Aspose进行文档转换很简单,直接引入相应的jar包,调用save方法,转换为PDF即可。
注意:使用Aspose时,每一个模块(words,cells)都可能有相同的类,如License类,SaveOptions类,SaveFormat类。而在各自模块使用时,一定要用对应模块的类,这个坑我已爬过。
使用Aspose时,需要每次进行转换操作前调用设置License方法。
水印功能
编辑卡片描述
部署Aspose附件转换服务,该服务主要功能是将系统中所有附件(格式为word、EXCEL、PPT、PDF)转换为H5页面,类似百度文库查看word附件的效果,转换的文件后,在系统打开附件时,呈现的效果就是在线阅览并且带有水印的模式
水印功能
Aspose.words之插入水印
1. 前言
继几个月前的word模板打印美化之后,最近又接到的一个需求是需要给由word转换为的pdf打上水印。经过几个小时的折腾发现直接在pdf打上的水印将下面的字体覆盖效果过于明显,试图插入背景图片又发现会被pdf自身的背景色给遮挡。无奈只能从源头的word入手。
2. 详解
以下就是核心代码了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120/**
* Inserts a watermark into a document. you need saved the doc by yourself.
*
* @param doc The input document file.
* @param watermarkText Text of the watermark.
*/
public static void insertWatermarkText(Document doc, String watermarkText){
// 居中
insertWatermarkText(doc, watermarkText, new Function() {
@Override
public Object apply(Shape watermark){
// Place the watermark in the page center.
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
watermark.setWrapType(WrapType.NONE); // TOP_BOTTOM : 将所设置位置的内容往上下顶出去
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
return null;
}
});
// 顶部
insertWatermarkText(doc, watermarkText, new Function() {
@Override
public Object apply(Shape watermark){
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.MARGIN);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.MARGIN);
watermark.setWrapType(WrapType.NONE);
// 我们需要自定义距离顶部的高度
// watermark.setVerticalAlignment(VerticalAlignment.TOP);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置距离顶部的高度
watermark.setTop(160);
return null;
}
});
// 底部
insertWatermarkText(doc, watermarkText, new Function() {
@Override
public Object apply(Shape watermark){
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.MARGIN);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.MARGIN);
watermark.setWrapType(WrapType.NONE);
// 我们需要自定义距离顶部的高度
// watermark.setVerticalAlignment(VerticalAlignment.BOTTOM);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
// 设置距离顶部的高度
watermark.setTop(480);
return null;
}
});
}
private static void insertWatermarkText(Document doc, String watermarkText,
Function watermaskPositionConfigFunc){
// Create a watermark shape. This will be a WordArt shape.
// You are free to try other shape types as watermarks.
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
// Set up the text of the watermark.
watermark.getTextPath().setText(watermarkText);
// Set up the text of the watermark.
// 这里设置为宋体可以保证在转换为PDF时中文不是乱码.
watermark.getTextPath().setFontFamily("宋体");//Arial;
try {
// 水印大小
watermark.setWidth(200);
watermark.setHeight(50);
} catch (Exception e) {
throw new RuntimeException(e);
}
// Text will be directed from the bottom-left to the top-right corner.
// 左下到右上
watermark.setRotation(-40);
// Remove the following two lines if you need a solid black text.
final String colorStr = "E0E0E0";
watermark.getFill().setColor(new java.awt.Color(Integer.parseInt(colorStr, 16))); // Try Color.lightGray to get more Word-style watermark
watermark.setStrokeColor(new java.awt.Color(Integer.parseInt(colorStr, 16))); // Try Color.lightGray to get more Word-style watermark
// Place the watermark in the special location of page .
watermaskPositionConfigFunc.apply(watermark);
// Create a new paragraph and append the watermark to this paragraph.
Paragraph watermarkPara = new Paragraph(doc);
watermarkPara.appendChild(watermark);
// Insert the watermark into all headers of each document section.
for (Section sect : doc.getSections()) {
// There could be up to three different headers in each section, since we want
// the watermark to appear on all pages, insert into all headers.
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY);
// 以下注释掉不影响效果, 未作深入研究, 时间有限.
// insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST);
// insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN);
}
// 参考下API : https://apireference.aspose.com/java/words/com.aspose.words/ShapeBase
//watermark.setZOrder(-100);
}
private static void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect,
int headerType){
HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType(headerType);
if (header == null) {
// There is no header of the specified type in the current section, create it.
header = new HeaderFooter(sect.getDocument(), headerType);
sect.getHeadersFooters().add(header);
}
// Insert a clone of the watermark into the header.
try {
header.appendChild(watermarkPara.deepClone(true));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
4. 效果
最后
以上就是欣慰蛋挞为你收集整理的aspose转pdf横版_Aspose实现文件转PDF在线预览及水印功能的全部内容,希望文章能够帮你解决aspose转pdf横版_Aspose实现文件转PDF在线预览及水印功能所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复