java實現(xiàn)word文檔轉(zhuǎn)pdf并添加水印的方法詳解
本文實例講述了java實現(xiàn)word文檔轉(zhuǎn)pdf并添加水印的方法。分享給大家供大家參考,具體如下:
前段時間,項目需要自動生成word文檔,用WordFreeMarker生成word文檔后,又要求生成的文檔能在瀏覽器瀏覽,思來想去,把word文檔轉(zhuǎn)成pdf就好了,于是乎研究了一下。
將word文檔轉(zhuǎn)化為PDF是項目中常見的需求之一,目前主流的方法可以分為兩大類,一類是利用各種Office應(yīng)用進行轉(zhuǎn)換,譬如Microsoft Office、WPS以及LiberOffice,另一種是利用各種語言提供的對于Office文檔讀取的接口(譬如Apache POI,jacob,docx4j,openoffice),這些要么收費,要么要裝插件,要么轉(zhuǎn)換之后樣式走形,亂碼等等。
我使用Aspose.Words for Java 可以導(dǎo)出復(fù)雜WORD PDF HTML 多種數(shù)據(jù)格式
官方下載地址:http://www.aspose.com/java/word-component.aspx
我所用的版本是aspose-words-14.9.0-jdk16。需要到的兩個jar包(所需jar包下載。)。
廢話不多說,直接上代碼:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import org.slf4j.Logger;
import com.aspose.words.Document;
import com.aspose.words.SaveFormat;
/**
*
* @ClassName: Word2PdfUtilt
* @Description: PDF轉(zhuǎn)換工具類
* @author mzl
* @date 2018年7月30日 下午5:26:44
*
*/
public class Word2PdfUtilt {
protected static Logger log = Log.get();
public static void main(String[] args) {
doc2pdf("D:\\Workspaces\\小花測試_20180731094521.doc","D:\\Workspaces\\test.pdf");
}
public static void doc2pdf(String inPath, String outPath) {
FileOutputStream os =null;
try {
File file = new File(outPath); // 新建一個空白pdf文檔
os = new FileOutputStream(file);
Document doc = new Document(inPath); // Address是將要被轉(zhuǎn)化的word文檔
doc.save(os, SaveFormat.PDF);
} catch (Exception e) {
e.printStackTrace();
}finally{
if(os!=null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
轉(zhuǎn)成PDF格式后,圖片等樣式均沒有亂。

以上就是生產(chǎn)PDF的步驟了,接下來添加水印:
/**
*
* @Title: insertWatermarkText
* @Description: PDF生成水印
* @author mzl
* @param doc
* @param watermarkText
* @throws Exception
* @throws
*/
private static void insertWatermarkText(Document doc, String watermarkText) throws Exception
{
Shape watermark = new Shape(doc, ShapeType.TEXT_PLAIN_TEXT);
//水印內(nèi)容
watermark.getTextPath().setText(watermarkText);
//水印字體
watermark.getTextPath().setFontFamily("宋體");
//水印寬度
watermark.setWidth(500);
//水印高度
watermark.setHeight(100);
//旋轉(zhuǎn)水印
watermark.setRotation(-40);
//水印顏色
watermark.getFill().setColor(Color.lightGray);
watermark.setStrokeColor(Color.lightGray);
watermark.setRelativeHorizontalPosition(RelativeHorizontalPosition.PAGE);
watermark.setRelativeVerticalPosition(RelativeVerticalPosition.PAGE);
watermark.setWrapType(WrapType.NONE);
watermark.setVerticalAlignment(VerticalAlignment.CENTER);
watermark.setHorizontalAlignment(HorizontalAlignment.CENTER);
Paragraph watermarkPara = new Paragraph(doc);
watermarkPara.appendChild(watermark);
for (Section sect : doc.getSections())
{
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_PRIMARY);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_FIRST);
insertWatermarkIntoHeader(watermarkPara, sect, HeaderFooterType.HEADER_EVEN);
}
System.out.println("Watermark Set");
}
private static void insertWatermarkIntoHeader(Paragraph watermarkPara, Section sect, int headerType) throws Exception
{
HeaderFooter header = sect.getHeadersFooters().getByHeaderFooterType(headerType);
if (header == null)
{
header = new HeaderFooter(sect.getDocument(), headerType);
sect.getHeadersFooters().add(header);
}
header.appendChild(watermarkPara.deepClone(true));
}
效果圖如下,我添加的水印為我的博客昵稱:擇依MZL

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
mybatis修改int型數(shù)據(jù)無法修改成0的解決
這篇文章主要介紹了mybatis修改int型數(shù)據(jù)無法修改成0的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09
用Java實現(xiàn)小球碰壁反彈的簡單實例(算法十分簡單)
下面小編就為大家?guī)硪黄肑ava實現(xiàn)小球碰壁反彈的簡單實例(算法十分簡單)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
Maven編譯錯誤:程序包com.sun.*包不存在的三種解決方案
J2SE中的類大致可以劃分為以下的各個包:java.*,javax.*,org.*,sun.*,本文文章主要介紹了maven編譯錯誤:程序包com.sun.xml.internal.ws.spi不存在的解決方案,感興趣的可以了解一下2024-02-02

