美文网首页
永中DCS产品文档 -- 多线程转换

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

作者: _浅墨_ | 来源:发表于2025-02-06 10:47 被阅读0次

注:永中文档产品不错,但是开发文档却很不友好,帮他整理下 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

相关文章

网友评论

      本文标题:永中DCS产品文档 -- 多线程转换

      本文链接:https://www.haomeiwen.com/subject/onynujtx.html