• OFD板式文件创建JAVA工具-EASYOFD 三、图像 Image


         JAVA版本的OFD板式文件创建工具easyofd.
         功能包含了图像、 图像、 文字、和模版页功能。同时也支持OFD文件的数字签名及验签,电子签章及验签。
         本JAVA版本的easyofd使用原生方式创建板式文件,不依赖JAVA的SWT库。

         代码地址:https://github.com/11627685/easyofd-java   

         项目地址:http://wiki.easyofd.cn/zh/JAVA
         浏览器查看OFD文件控件地址: http://www.easyofd.cn/

    本章节介绍OFD文件怎么添加图片。本文以全国统一发票监制章图片为例。
      首先,需要将展示的图片在公共资源库进行注册,注册后返回资源ID。有了该资源ID,就可以在其他页面page进行展示了。

    注意:本文中所有的单位除特殊说明外都MM。

    一、公共资源区注册资源

    1.1 注册资源

      通过OFDocument类的getOfdCommonData()就可以获取功OFD公共资源存储的管理类。该类除了图片功能外,还有其他指定该文档页面区域的默认大小和位置、模版页序列等功能,具体见OFD标准指南-7.5.1 文档公共数据结构

    样例代码如下:

    1. // 创建一个OFD文档
    2. OFDocument ofDocument = new OFDocument();
    3. ofDocument.getOfdCommonData().addMultiMedia(....);

    Copy

      该类的图片资源的注册如下,需要多媒体的主类型Type, 资源的格式Format ,资源的名称(保存的名称)name和资源的字节流信息byte[]。

    • addMultiMedia
      public int addMultiMedia(java.lang.String Type,
                               java.lang.String Format,
                               java.lang.String name,
                               byte[] bytes)

      一个多媒体对象,一般为图片

      参数:

      Type - 多媒体的主类型。支持 Image, Video, Audio 三种多媒体类型,eg:Image

      Format - 资源的格式。图像主类型的文件格式支持 BMP、Jpeg、TIFF及PNG,其中 TIFF 格式不支持多页 eg:PNG

      name - 指向 OFD 包内的多媒体文件的位置 eg:image_14.png

      bytes - 文件的字节

      返回:

      ID

    样例代码如下:

    1. //公共资源增加图片
    2. File file = new File("image/123.png");
    3. int picID=ofDocument.getOfdCommonData().addMultiMedia( "Image","PNG" ,file.getName(),this.getFileBytes(file));

    Copy

    1.2 如何转换字节流

    1. File file=new File("path/abc.png");
    2. FileInputStream fis = null;
    3. try {
    4. fis = new FileInputStream(file);
    5. byte[] fileBytes = new byte[(int) file.length()];
    6. fis.read(fileBytes);
    7. return fileBytes;
    8. } finally {
    9. if (fis != null) {
    10. fis.close();
    11. }
    12. }

    Copy

    二、页面添加展示图片

      有了图片的资源ID后,我们就可以在页面上确定图片的展示位置CTBoundary,最后通过PAGE的addImageObject方法添加到页面中

    • addImageObject
      public CTPageBlock.ImageObject addImageObject(int resID,
                                                    java.lang.String filename,
                                                    java.lang.String Format,
                                                    CTBoundary boundary)

      在页面增加图片资源

      参数:

      resID - 在功能资源中的ID

      filename - 资源的名称

      Format - 资源的格式。图像主类型的文件格式支持 BMP、Jpeg、TIFF及PNG,其中 TIFF 格式不支持多页 eg:PNG

      boundary - 图片资源的展示的矩形边界

      返回:

      ImageObject

      另请参阅:

      OFD标准指南-图像-10.1 图像

    样例代码如下:

    1. int picID=ofDocument.getOfdCommonData().addMultiMedia( ...);
    2. CTBoundary boundary= new CTBoundary(40,40,40,30);
    3. page.addImageObject(picID,file.getName(),"PNG",boundary);

    Copy

    三、 完整代码

    1. // 1 创建一个OFD文档
    2. OFDocument ofDocument = new OFDocument();
    3. // 2 创建一页
    4. OFDPage page = new OFDPage(ofDocument);
    5. ofDocument.addPage(page);
    6. //3 在公共资源增加图片获取ID
    7. File file = new File("image/123.png");
    8. int picID=ofDocument.getOfdCommonData().addMultiMedia( "Image","PNG" ,file.getName(),this.getFileBytes(file));
    9. //4 设置图片的开始位置、宽度和高速在页面添加图片
    10. CTBoundary boundary= new CTBoundary(40,40,40,30);
    11. page.addImageObject(picID,file.getName(),"PNG",boundary);
    12. // page2.addImageObject(picID,file.getName(),"PNG",boundary); 不同页面复用图片
    13. //5 保存
    14. OutputStream os new FileOutputStream("path/image.ofd");
    15. ofDocument.save(os);

    Copy

    1.4 文件效果

      OFD软件展示结果如下图:

    image.png

  • 相关阅读:
    学Python如此简单--OS模块
    JAVA基础-正则表达式(12)
    Acwing-反转链表
    记Windows的一个存在了十多年的bug
    494.目标和·深度优先搜索·背包问题
    经典算法之折半查找(BinarySearch)
    MySQL数据库详解 二:数据库的高级语句(高级查询语句)
    FastAPI 学习之路(十二)接口几个额外信息和额外数据类型
    【已解决】socket.gaierror: [Errno -3] Temporary failure in name resolution
    React报错之Rendered more hooks than during the previous render
  • 原文地址:https://blog.csdn.net/likewindy/article/details/141096407