1 Star 0 Fork 514

ycj0808 / ofdrw

forked from ofdrw / ofdrw 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 4.48 KB
一键复制 编辑 原始数据 按行查看 历史
Cliven 提交于 2021-05-26 22:07 . 1.9.6

OFD Reader & Writer 文档转换

致谢:

OFDRW社区感谢你们对convert模块的辛勤开发!

OFDR&W文档转换支持

  • OFD => PDF
  • OFD => 图片
  • OFD => SVG(矢量图形)

SVG相较于图片可以无失真的缩放。

PDF转换概述: 通过对OFD的文档进行解析,使用 Apache Pdfbox生成并转换OFD中的元素为PDF内的元素实现PDF的转换。

图片转换概述: 通过对OFD的文档进行解析,采用java.awt绘制图片,支持转换为PNGJPEG图片格式。

SVG矢量图形转换概述: 使用Apachebatik-transcoder提供的图形绘制实现java.awtAPI绘制,最终生成SVG矢量图形。

Quick Start

pom引入相关模块


<dependency>
    <groupId>org.ofdrw</groupId>
    <artifactId>ofdrw-converter</artifactId>
    <version>1.9.6</version>
</dependency>

转换PDF

转换文档你需要:

  1. 提供待转换OFD文档,支持Path、InputStream。
  2. 提供转换后PDF文档位置。
  3. 调用转换工具执行文档转换。
public class HelloWorld {

    public static void main(String[] args) {
        // 1. 文件输入路径
        Path src = Paths.get("发票示例.ofd");
        // 2. 转换后文件输出位置
        Path dst = Paths.get("发票示例.pdf");
        try {
            // 3. OFD转换PDF
            ConvertHelper.toPdf(src, dst);
            System.out.println("生成文档位置: " + dst.toAbsolutePath());
        } catch (GeneralConvertException e) {
            // GeneralConvertException 类型错误表明转换过程中发生异常
            e.printStackTrace();
        }
    }
}

转换得到PDF效果如图

转换结果截图

注意:如果OFD中的字体来自于操作系统,可能会导致转换过程中由于缺少字体导致的异常,请在部署环境的操作系统目录中加入相关字体。

转换图片

转换文档你需要:

  1. 提供待转换OFD文档。
  2. *配置字体(非必须,自定义字体目录时使用)。
  3. 创建转换转换对象,并设置PPM(每毫米像素数量 Pixels per millimeter)。
  4. 指定页码转换图片。
  5. 存储为指定格式图片。
public class HelloWorld {
    public static void main(String[] args) {
        // 1. 文件输入路径
        Path src = Paths.get("发票示例.ofd");
        // 2. 加载指定目录字体(非必须)
        // FontLoader.getInstance().scanFontDir(new File("src/test/resources/fonts"));
        // 3. 创建转换转换对象,设置 每毫米像素数量(Pixels per millimeter)
        ImageMaker imageMaker = new ImageMaker(new OFDReader(src), 15);
        for (int i = 0; i < imageMaker.pageSize(); i++) {
            // 4. 指定页码转换图片
            BufferedImage image = imageMaker.makePage(i);
            Path dist = Paths.get("target", i + ".png");
            // 5. 存储为指定格式图片
            ImageIO.write(image, "PNG", dist.toFile());
        }
    }
}

效果图如下:

转图片效果

转换 SVG

SVG相较于图片可以无失真的缩放,且速度快。

转换文档你需要:

  1. 提供待转换OFD文档。
  2. *配置字体(非必须,自定义字体目录时使用)。
  3. 创建转换转换对象,并设置PPM(每毫米像素数量 Pixels per millimeter)。
  4. 指定页码转换SVG,得到SVG(XML)。
  5. 存储SVG到文件。
public class HelloWorld {
    public static void main(String[] args) {
        // 1. 文件输入路径
        Path src = Paths.get("发票示例.ofd");
        // 2. 加载指定目录字体(非必须)
        // FontLoader.getInstance().scanFontDir(new File("src/test/resources/fonts"));
        // 3. 创建转换转换对象,设置 每毫米像素数量(Pixels per millimeter)
        SVGMaker svgMaker = new SVGMaker(new OFDReader(src), 20);
        for (int i = 0; i < imageMaker.pageSize(); i++) {
            // 4. 指定页码转换SVG,得到SVG(XML)
            String svg = svgMaker.makePage(i);
            Path dist = Paths.get("target", i + ".svg");
            // 5. 存储到文件。
            Files.write(dist, svg.getBytes());
        }
    }
}

效果图如下:

转图片效果

Java
1
https://gitee.com/yangchj/ofdrw.git
git@gitee.com:yangchj/ofdrw.git
yangchj
ofdrw
ofdrw
master

搜索帮助