注:永中文檔產(chǎn)品不錯,但是開發(fā)文檔卻很不友好闸度,幫他整理下 markdown格式。以下為排版后的內(nèi)容摹恨。
DCC 組件
永中文檔轉(zhuǎn)換組件(Document Conversion Component筋岛,簡稱 DCC)通過解析常用辦公文檔的格式,提供不同文檔格式間的互轉(zhuǎn)晒哄,實現(xiàn)常用格式文檔的閱讀等服務睁宰。永中 DCC 主要部署在網(wǎng)絡服務器上,如 Web 服務器寝凌、郵件服務器等柒傻,提供用戶文檔閱讀及批量文檔轉(zhuǎn)換功能。永中 DCC 支持閱讀和轉(zhuǎn)換的文檔格式非常豐富较木,涵蓋微軟 Office 97~2013 等常用文檔格式红符,同時可根據(jù)用戶需求進行特定格式的合作。
運行環(huán)境
操作系統(tǒng):
- 任何可以安裝 Sun 標準版 JRE 的 Windows/Linux
安裝軟件要求:
- 機器必須安裝 Java 運行環(huán)境
Linux 下特殊要求(轉(zhuǎn)圖片伐债,轉(zhuǎn) PDF 時需要):
- 需要添加中文字體文件预侯,比如:
yzdwsj6.ttf
配置
-
Config
放置在Yozo_Office.jar
同一目錄下,且文件名字不可隨意更改 -
EMedia.jar
峰锁、jai_codec.jar
萎馅、jai_core.jar
等為引用包,開發(fā)調(diào)試時請導入工程
類介紹
applicaton.dcs.Convert
類
- 文檔轉(zhuǎn)換引擎對象虹蒋,支持多線程糜芳,提供各種轉(zhuǎn)換方法。
applicaton.dcs.IPICConvertor
接口
- 文檔轉(zhuǎn)換圖片接口魄衅,提供了豐富的轉(zhuǎn)圖片方法峭竣。
- 轉(zhuǎn)圖片前預先可知圖片數(shù)量、圖片大小晃虫。
接口 API 介紹
方法返回錯誤代碼
int resultcode();
獲取轉(zhuǎn)換的圖片數(shù)量
int getpagecount();
每頁的 100% 真實的寬高
float[][] getAllpagewheigths();
轉(zhuǎn)換圖片方法
int converttoGIF(int start, int end, float zoom, String tarfoldname);
int converttoPNG(int start, int end, float zoom, String tarfoldname);
int converttoJPG(int start, int end, float zoom, String tarfoldname);
int converttoTIFF(int start, int end, float zoom, String tarfoldname);
int converttoBMP(int start, int end, float zoom, String tarfoldname);
關閉皆撩,內(nèi)存回收
void close();
API 介紹
Convert
構造器
Convert(); // 默認構造器
Convert(String path); // 參數(shù):path 為 Config 文件夾的路徑,默認放置在 Yozo_Office.jar 同一目錄下
文檔轉(zhuǎn)換 API
1. MS 文件轉(zhuǎn) HTML(標清版本)
int convertMStoHTML(String sourceFileName, String targetFileName);
參數(shù):
-
sourceFileName
:源文件絕對路徑(包含文件名和后綴名) -
targetFileName
:目標文件絕對路徑
返回值:
-
0
- 轉(zhuǎn)換成功 -
1
- 傳入的文件找不到 -
2
- 傳入的文件打開失敗 -
3
- 轉(zhuǎn)換過程異常失敗 -
4
- 傳入的文件有密碼 -
5
-targetFileName
的后綴名錯誤
示例:
String sourceFileName = "D:/test/input/a.doc";
String targetFileName = "D:/test/output/a.htm";
Convert convert = new Convert();
convert.convertMStoHTML(sourceFileName, targetFileName);
2. MS 文件轉(zhuǎn) HTML(高清版本)
int convertMStoHtmlOfSvg(String sourceFileName, String targetFileName);
示例:
String sourceFileName = "D:/test/input/a.doc";
String targetFileName = "D:/test/output/a.htm";
Convert convert = new Convert();
convert.convertMStoHtmlOfSvg(sourceFileName, targetFileName);
3. MS 文件轉(zhuǎn) TXT
int convertMStoTXT(String sourceFileName, String targetFileName);
示例:
String sourceFileName = "D:/test/input/a.doc";
String targetFileName = "D:/test/output/a.txt";
Convert convert = new Convert();
convert.convertMStoTXT(sourceFileName, targetFileName);
4. MS 文件轉(zhuǎn) PDF
int convertMStoPDF(String sourceFileName, String targetFileName);
示例:
String sourceFileName = "D:/test/input/a.doc";
String targetFileName = "D:/test/output/a.pdf";
Convert convert = new Convert();
convert.convertMStoPDF(sourceFileName, targetFileName);
5. HTML 轉(zhuǎn) MS 文件
boolean convertHTMLtoMS(String sourceFileName, String targetFileDir);
示例:
String sourceFileName = "D:/test/input/a.html";
String targetFileDir = "D:/test/output";
Convert convert = new Convert();
convert.convertHTMLtoMS(sourceFileName, targetFileDir);
6. PDF 轉(zhuǎn) HTML
int convertPdfToHtml(String sourceFileName, String targetFileDir);
示例:
String sourceFileName = "D:/test/input/a.pdf";
String targetFileDir = "D:/test/output/a.html";
Convert convert = new Convert();
convert.convertPdfToHtml(sourceFileName, targetFileDir);
7. PDF 轉(zhuǎn) 圖片(僅支持 PNG)
IPICConvertor convertPDFtoPic(String srcfilename);
示例:
String sourceFileName = "D:/test/input/a.pdf";
String targetFileDir = "D:/test/output";
Convert convert = new Convert();
IPICConvertor picc = convert.convertPDFtoPic(sourceFileName);
int resultcode = picc.resultcode();
if(resultcode == 0) {
picc.converttoPNG(0, 2, 0.5f, targetFileDir);
}
picc.close();
通用文檔轉(zhuǎn)換 API
int convert(String sourceFileName, String targetFileName);
示例:
String sourceFileName = "D:/test/input/a.doc";
String targetFileName = "D:/test/output/a.txt";
Convert convert = new Convert();
convert.convert(sourceFileName, targetFileName);
其他 API
setAcceptTracks
設置轉(zhuǎn)換后的文檔是否顯示修訂標記(僅針對 Word 有效)哲银。
setConvertForPhone
設置轉(zhuǎn)換后的文檔是否適用于手機顯示(僅適用于轉(zhuǎn)換后的 HTML)毅访。
setConvertOneSheet
設置是否只轉(zhuǎn)換 Excel 的第一張工作表沮榜。
setCssOutside
設置用戶指定的 CSS 文檔(僅針對 PPT 有效)盘榨。
setEmptyCount
Excel 轉(zhuǎn) HTML 時的空行轉(zhuǎn)換方法:
- 如果某列連續(xù) 20 列無數(shù)據(jù)喻粹,則 20 列以后的表格不轉(zhuǎn)換。
- 如果某行連續(xù) 50 行無數(shù)據(jù)草巡,則 50 行以后的表格不轉(zhuǎn)換守呜。
多線程轉(zhuǎn)換
使用 Convert 進行多線程轉(zhuǎn)換
- 多線程請使用
application.dcs.Convert
對象 - 可以用一個 Convert 池,維護 N 個
Convert
實例對象山憨,供多線程重復調(diào)用(每次new Convert()
有性能損耗)查乒。
ConvertorPool 示例代碼
/**
* @(#)ConvertorPool.java, Sep 14, 2009.
*
* Copyright 2009 Yozo, Inc. All rights reserved.
*/
import java.util.ArrayList;
import application.dcs.Convert;
/**
* Convertor 池
* @author admin
*/
public class ConvertorPool {
private ConvertorPool() {}
private static final ConvertorPool instance = new ConvertorPool();
private ArrayList<ConvertorObject> pool = new ArrayList<>();
// 池內(nèi)維護最大 5 個實例,可以根據(jù)服務器性能調(diào)整最大值
private static final int maxSize = 5;
private int availSize = 0;
private int current = 0;
public static ConvertorPool getInstance() {
return instance;
}
// 獲取池內(nèi)一個轉(zhuǎn)換實例
public synchronized ConvertorObject getConvertor() {
if (availSize > 0) {
return getIdleConvertor();
} else if (pool.size() < maxSize) {
return createNewConvertor();
} else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
return getConvertor();
}
}
// 歸還 Convertor 實例到池中
public synchronized void returnConvertor(ConvertorObject convertor) {
for (ConvertorObject co : pool) {
if (co == convertor) {
co.available = true;
availSize++;
notify();
break;
}
}
}
private synchronized ConvertorObject getIdleConvertor() {
for (ConvertorObject co : pool) {
if (co.available) {
co.available = false;
availSize--;
return co;
}
}
return null;
}
private synchronized ConvertorObject createNewConvertor() {
ConvertorObject co = new ConvertorObject(++current);
co.convertor = new Convert();
co.available = false;
pool.add(co);
return co;
}
// 包裝 Convert 類郁竟,可記錄是否在使用中
public class ConvertorObject {
public ConvertorObject(int id) {
this.id = id;
}
public int id;
public Convert convertor;
public boolean available;
}
}
// 線程調(diào)用示例
public static void main(String[] args) {
// 獲取 Convertor
ConvertorObject convertobj = ConvertorPool.getInstance().getConvertor();
convertobj.convertor.convertMStoHTML("D:/2.txt", "D:/1.html");
// 資源釋放
ConvertorPool.getInstance().returnConvertor(convertobj);
}
總結
DCC 提供了豐富的 API 供開發(fā)者調(diào)用玛迄,實現(xiàn)辦公文檔的轉(zhuǎn)換,包括 MS Office棚亩、PDF蓖议、圖片等格式。支持 Windows/Linux 運行讥蟆,提供 Java API 進行二次開發(fā)勒虾。