永中DCS产品文档 -- 多线程转换

注:永中文档产品不错,但是开发文档却很不友好,帮他整理下 markdown格式。以下为排版后的内容。


DCC 组件

永中文档转换组件(Document Conversion Component,简称 DCC)通过解析常用办公文档的格式,提供不同文档格式间的互转,实现常用格式文档的阅读等服务。永中 DCC 主要部署在网络服务器上,如 Web 服务器、邮件服务器等,提供用户文档阅读及批量文档转换功能。永中 DCC 支持阅读和转换的文档格式非常丰富,涵盖微软 Office 97~2013 等常用文档格式,同时可根据用户需求进行特定格式的合作。

运行环境

操作系统:

  • 任何可以安装 Sun 标准版 JRE 的 Windows/Linux

安装软件要求:

  • 机器必须安装 Java 运行环境

Linux 下特殊要求(转图片,转 PDF 时需要):

  • 需要添加中文字体文件,比如:yzdwsj6.ttf

配置

  • Config 放置在 Yozo_Office.jar 同一目录下,且文件名字不可随意更改
  • EMedia.jarjai_codec.jarjai_core.jar 等为引用包,开发调试时请导入工程

类介绍

applicaton.dcs.Convert

  • 文档转换引擎对象,支持多线程,提供各种转换方法。

applicaton.dcs.IPICConvertor 接口

  • 文档转换图片接口,提供了丰富的转图片方法。
  • 转图片前预先可知图片数量、图片大小。

接口 API 介绍

方法返回错误代码

int resultcode();

获取转换的图片数量

int getpagecount();

每页的 100% 真实的宽高

float[][] getAllpagewheigths();

转换图片方法

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);

关闭,内存回收

void close();

API 介绍

Convert 构造器

Convert(); // 默认构造器
Convert(String path); // 参数:path 为 Config 文件夹的路径,默认放置在 Yozo_Office.jar 同一目录下

文档转换 API

1. MS 文件转 HTML(标清版本)

int convertMStoHTML(String sourceFileName, String targetFileName);

参数:

  • sourceFileName:源文件绝对路径(包含文件名和后缀名)
  • targetFileName:目标文件绝对路径

返回值:

  • 0 - 转换成功
  • 1 - 传入的文件找不到
  • 2 - 传入的文件打开失败
  • 3 - 转换过程异常失败
  • 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 文件转 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 文件转 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 文件转 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 转 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 转 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 转 图片(仅支持 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();

通用文档转换 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

设置转换后的文档是否显示修订标记(仅针对 Word 有效)。

setConvertForPhone

设置转换后的文档是否适用于手机显示(仅适用于转换后的 HTML)。

setConvertOneSheet

设置是否只转换 Excel 的第一张工作表。

setCssOutside

设置用户指定的 CSS 文档(仅针对 PPT 有效)。

setEmptyCount

Excel 转 HTML 时的空行转换方法:

  • 如果某列连续 20 列无数据,则 20 列以后的表格不转换。
  • 如果某行连续 50 行无数据,则 50 行以后的表格不转换。

多线程转换

使用 Convert 进行多线程转换

  1. 多线程请使用 application.dcs.Convert 对象
  2. 可以用一个 Convert 池,维护 N 个 Convert 实例对象,供多线程重复调用(每次 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<>();

    // 池内维护最大 5 个实例,可以根据服务器性能调整最大值
    private static final int maxSize = 5;
    private int availSize = 0;
    private int current = 0;

    public static ConvertorPool getInstance() {
        return instance;
    }

    // 获取池内一个转换实例
    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;
    }
}

// 线程调用示例
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 供开发者调用,实现办公文档的转换,包括 MS Office、PDF、图片等格式。支持 Windows/Linux 运行,提供 Java API 进行二次开发。

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容