上周三晚上十点多,同事突然发来一条消息——她手上十几份电子发票全是OFD格式,公司报销系统只认png图片。她急得不行,问我有没有办法。这种事我遇到过好几回了,所以今天干脆把OFD转png格式怎么转这件事写清楚,省得大家来回折腾。

OFD这个格式,可能有些朋友还不太熟。它是咱们国家自己推的版式文档标准,跟PDF有点像,但打开它需要专门的阅读器。麻烦就麻烦在这儿——很多系统不认它。转成png图片就好办了,谁都能看,传哪儿都行。

百家号头图下面要说的法子有好几种,我按实际使用的顺手程度排了序。头一个重点讲的,是汇帮OFD转换器,这也是我自己平时用得比较多的一个工具。

汇帮OFD转换器:操作步骤拆解

第一步,打开电脑上的“汇帮OFD转换器”。界面上能看到好几个功能入口——ofd转PDF、ofd转word、ofd转图片等等。咱们要的是图片,所以直接点“ofd转图片”进去。

汇帮OFD转换器主界面第二步,把要转换的ofd文件拖进软件中间的空白区域。也可以点“添加文件”按钮,在弹出来的窗口里一个个选。两种方式都行,看个人习惯。对了,它支持一次添加多个文件,文件大小也没什么限制,批量处理的时候省事。

添加OFD文件到软件中第三步,文件导进来之后,看软件底部有个“导出格式”的选项。点开,选png。这一步别选错了,选成jpg也行,但咱们今天说的是png,所以就选它。

选择PNG作为导出格式第四步,这儿有个“拼接成长图”的勾选项。要不要勾,看你的实际需要。如果一份ofd有好几页,你想把它们合成一张长图,那就勾上;如果希望每页单独出一张png,就别勾。我一般是不勾的,单页单张用起来灵活些。

拼接成长图选项第五步,设置输出目录。这个目录就是转换出来的png图片存哪儿。可以选原目录——也就是ofd文件所在的文件夹,也可以自定义一个路径。我习惯单独建个文件夹放,回头找起来方便。

设置输出目录第六步,所有设置确认一遍,没问题就点“开始执行”。软件就开始跑了,转换速度跟文件大小和页数有关,一般几秒钟到几十秒不等。

点击开始执行按钮等进度条走完,打开输出目录,png图片就在里面了。

转换完成的PNG图片整个流程走下来,熟练的话一分钟不到就能完成一次转换。步骤不算多,关键是每一步都明确,不容易出错。

速捷电脑端软件

第二种法子,是用速捷这款电脑软件来转。它也是个格式转换工具,支持的类型挺杂,OFD只是其中一种。操作逻辑跟汇帮不太一样,但也不复杂。

打开软件,页面上能找到“OFD转图片”的入口,点进去。然后把ofd文件添加进来。文件加载完之后,在页面下方选一下输出图片的格式,再把保存位置定好,点“立即转换”就完事了。

速捷软件OFD转图片界面速捷软件转换设置这软件里面还塞了不少别的功能,PDF转换、CAD转换、语音文字转换之类的都有。如果你平时转换需求比较杂,倒是可以留着备用。

速捷软件其他功能展示### 速捷在线OFD转换工具

不想装软件的话,在线工具是个选择。速捷也有网页版的OFD转换功能。进到操作页面,展开“文档转换”菜单,在里面找到“OFD转图片”点进去。然后把文件添加上传。传完之后,图片格式可以选JPG或者PNG,选好点“开始转换”,等它处理完下载就行。

速捷在线工具OFD转图片入口在线转换格式选择在线工具的好处是不挑设备,有浏览器就能用。但有个问题得提醒一句——文件要上传到别人的服务器上。如果ofd文件涉及合同、发票这类敏感内容,建议慎重考虑。

OFD阅读软件另存为

如果你电脑上已经装了OFD阅读软件,那用它也能转。步骤不复杂:打开阅读软件,打开ofd文件,在菜单栏找到“文件”然后选“另存为”,在弹出的对话框里把输出格式选成PNG,点保存,等它转完就行。

这个方法胜在不用额外装东西,但有个小毛病——它一次只能处理一个文件,批量转换的时候就比较费时间了。而且不同阅读软件的菜单布局不太一样,具体操作位置可能有差别。

Java编程方式

这一条是给开发人员看的。普通办公用户可以直接跳过。

用Java来实现ofd转png,需要引入ofdrw-converter这个库。在项目的pom.xml里加上依赖:

<dependency>
    <groupId>org.ofdrw</groupId>
    <artifactId>ofdrw-converter</artifactId>
    <version>1.13.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

然后封装一个转换工具类,调用ImageMaker来逐页生成图片。核心代码大概长这样:

public static List<BufferedImage> ofdToImage(String ofdBase64){
    List<BufferedImage> list = new ArrayList<>();
    if (StringUtils.isEmpty(ofdBase64)){
        return list;
    }
    byte[] decode = DECODER.decode(ofdBase64.getBytes(StandardCharsets.UTF_8));
    try(
        ByteArrayInputStream stream = new ByteArrayInputStream(decode);
        OFDReader reader = new OFDReader(stream);
    ) {
        ImageMaker imageMaker = new ImageMaker(reader, 15);
        for (int i = 0; i < imageMaker.pageSize(); i++) {
            list.add(imageMaker.makePage(i));
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return list;
}

这段代码的逻辑就是:把base64编码的ofd数据解码成字节流,用OFDReader读进来,然后用ImageMaker按页码逐页生成BufferedImage对象。15这个数字是缩放比例,可以按需调整。适合有开发能力的朋友,普通用户不用折腾这个。

转转在线工具

最后再提一个在线方案——转转。在搜索引擎里搜“ofd转图片在线转换”,找到转转的页面进去。在界面上找到“图片转换”,再点“ofd转图片”。进入功能页之后,点“选择文件”把ofd传上去。传完开始转换,等它处理完把图片下载到本地就行了。

转转在线工具入口跟前面说的在线工具一样,方便是方便,但隐私方面自己掂量着来。

说在最后

OFD转png格式怎么转这个问题,其实没有唯一答案。选哪个法子,看你的具体场景。

如果你经常需要转换、文件涉及敏感信息、或者要批量处理,那装个汇帮OFD转换器在电脑上是最省心的。步骤清晰,操作起来也快,关键是不用把文件传到别人的服务器上。

不管走哪条路,核心思路就一个——把OFD这个不太通用的格式,变成谁都能打开的png图片。目的达到了,方法就是好方法。

希望这篇内容能帮你把问题解决掉。如果操作过程中遇到什么卡住的地方,欢迎在评论区说说具体情况。