永中DCS產(chǎn)品文檔 -- 多線程轉(zhuǎn)換

注:永中文檔產(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)換

  1. 多線程請使用 application.dcs.Convert 對象
  2. 可以用一個 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ā)勒虾。

原文:http://192.168.208.151:8080/dcs.web/help.html#link22

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘸彤,隨后出現(xiàn)的幾起案子修然,更是在濱河造成了極大的恐慌,老刑警劉巖质况,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愕宋,死亡現(xiàn)場離奇詭異,居然都是意外死亡结榄,警方通過查閱死者的電腦和手機中贝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來潭陪,“玉大人雄妥,你說我怎么就攤上這事∫浪荩” “怎么了老厌?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長黎炉。 經(jīng)常有香客問我枝秤,道長,這世上最難降的妖魔是什么慷嗜? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任淀弹,我火速辦了婚禮丹壕,結果婚禮上,老公的妹妹穿的比我還像新娘薇溃。我一直安慰自己菌赖,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布沐序。 她就那樣靜靜地躺著琉用,像睡著了一般。 火紅的嫁衣襯著肌膚如雪策幼。 梳的紋絲不亂的頭發(fā)上邑时,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音特姐,去河邊找鬼晶丘。 笑死,一個胖子當著我的面吹牛唐含,可吹牛的內(nèi)容都是我干的浅浮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼觉壶,長吁一口氣:“原來是場噩夢啊……” “哼脑题!你這毒婦竟也來了?” 一聲冷哼從身側響起铜靶,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤叔遂,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后争剿,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體已艰,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年蚕苇,在試婚紗的時候發(fā)現(xiàn)自己被綠了哩掺。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡涩笤,死狀恐怖嚼吞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹬碧,我是刑警寧澤舱禽,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站恩沽,受9級特大地震影響誊稚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一里伯、第九天 我趴在偏房一處隱蔽的房頂上張望城瞎。 院中可真熱鬧,春花似錦疾瓮、人聲如沸脖镀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽认然。三九已至,卻和暖如春漫萄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盈匾。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工腾务, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人削饵。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓岩瘦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親窿撬。 傳聞我的和親對象是個殘疾皇子启昧,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容