注:永中文档产品不错,但是开发文档却很不友好,帮他整理下 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.jar
、jai_codec.jar
、jai_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 进行多线程转换
- 多线程请使用
application.dcs.Convert
对象 - 可以用一个 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 进行二次开发。