一、OFD文件在线转换
OFD(Open Financial Document)是一种开放的金融文档标准,主要用于企业金融报告、财务发票等场景。由于OFD格式并不支持浏览器直接渲染,因此需要进行在线转换。
OFD文件在线转换的方式有很多种,其中一种比较常见的方案是使用第三方库进行转换,比如使用java开发的ofd2html工具。其原理是将OFD文件解析成XML格式,并生成对应的html文件。这样就可以在浏览器中打开OFD文件了。下面是一段示例代码:
import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import org.ofdrw.converter.FontLoader; import org.ofdrw.converter.OFD2HtmlConverter; import org.ofdrw.converter.PageInfo; import org.ofdrw.core.OFD; import org.ofdrw.font.FontName; import org.ofdrw.font.FontSet; public class OFD2HTMLDemo { public static void main(String[] args) throws Exception { String srcOFD = "test.ofd"; FontSet fontSet = new FontSet().add(FontName.SimSun); FontLoader fontLoader = new FontLoader().loadFontSet(fontSet); OFD ofd = new OFD(new File(srcOFD).toURI()); //将OFD文件转换成html PageInfo pageInfo = new OFD2HtmlConverter().setDrawBoundary(false).convert(ofd, fontLoader); ByteArrayOutputStream out = new ByteArrayOutputStream(); pageInfo.html().toStream(out, pageInfo.getMediaSize()); FileOutputStream fos = new FileOutputStream("test.html"); fos.write(out.toByteArray()); fos.close(); } }
二、OFD文件转PDF在线
OFD文件并不是所有软件都支持,比如在某些特定的场景下需要将OFD文件转换成PDF文件。这时可以选择在线转换服务。目前市场上有一些比较成熟的转换服务,比如AliYun和Foxit。这些服务可以通过API方式进行调用,将OFD文件转换成PDF格式。
下面是通过AliYun进行OFD文件转换的示例代码:
//引入相关的包 import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.Base64; import org.apache.commons.io.FileUtils; //将OFD文件转换为PDF格式 public String convertOFD2PDF(String srcOFDFilePath) { try { String host = "http://ofdrenderview.market.alicloudapi.com"; String path = "/api/render/ofd2pdf"; String method = "POST"; String appcode = "your_app_code"; String querys = ""; String bodys = Base64.getEncoder().encodeToString(FileUtils.readFileToByteArray(new File(srcOFDFilePath))); URL url = new URL(host + path + querys); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod(method); conn.setRequestProperty("Authorization", "APPCODE " + appcode); conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); //读取返回的数据 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8")); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); //将返回的PDF文件保存到本地 String destPDFFilePath = "test.pdf"; FileUtils.writeByteArrayToFile(new File(destPDFFilePath), Base64.getDecoder().decode(response.toString())); return destPDFFilePath; } catch (Exception e) { e.printStackTrace(); } return ""; }
三、浏览器预览不了OFD文件
OFD文件并不是浏览器原生支持的格式,在线预览时需要借助第三方插件或者进行转换。常见的OFD文件在线浏览解决方案有两种,一种是基于OFD转成html或者PDF并在浏览器中展示,另一种是基于第三方的插件进行展示。
下面是基于第三方插件进行OFD文件在线预览的示例代码,需要在HTML页面中引入OFD浏览器插件:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>OFD文件在线预览</title> </head> <body> <object data="test.ofd" type="application/ofd" width="600" height="800"> <param name="ladpversion" value="7.1.0.0"> <param name="page" value="1"> </object> </body> </html>
四、OFD文件在线预览前端实现
OFD文件在线预览也可以通过前端技术实现,支持更加灵活的用户交互方式。通常的做法是通过JavaScript将OFD文件解析成对应的HTML和CSS,然后在浏览器中展示。OFD.js是一个比较成熟的OFD解析库,可以方便地实现OFD文件的在线预览。
下面是通过OFD.js实现OFD文件在线预览的示例代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>OFD文件在线预览</title> <!--引入CSS--> <link rel="stylesheet" href="OFDJSViewer/OFDJSViewer.css"> <!--引入JavaScript--> <script src="OFDJSViewer/OFDJSViewer.min.js"></script> </head> <body> <div id="ofd_viewer"></div> <script> var viewer = new OFDJSViewer({ container: document.getElementById("ofd_viewer"), ofdFile: "test.ofd", toolbar: true, toolbarPosition: OFDJSViewer.TOOLBAR_POSITION_TOP }); viewer.render(); </script> </body> </html>
五、结语
OFD文件在线预览涉及的技术包括文件格式转换、API调用、第三方插件、JavaScript等多个方面。开发人员可以根据具体情况选择不同方案进行实现,使用户能够方便地在线预览OFD文件。