本章节介绍OFD文件怎么添加图片。本文以全国统一发票监制章图片为例。
首先,需要将展示的图片在公共资源库进行注册,注册后返回资源ID。有了该资源ID,就可以在其他页面page进行展示了。
注意:本文中所有的单位除特殊说明外都MM。
通过OFDocument类的getOfdCommonData()就可以获取功OFD公共资源存储的管理类。该类除了图片功能外,还有其他指定该文档页面区域的默认大小和位置、模版页序列等功能,具体见OFD标准指南-7.5.1 文档公共数据结构
样例代码如下:
// 创建一个OFD文档
OFDocument ofDocument = new OFDocument();
ofDocument.getOfdCommonData().addMultiMedia(....);
该类的图片资源的注册如下,需要多媒体的主类型Type, 资源的格式Format ,资源的名称(保存的名称)name和资源的字节流信息byte[]。
public int addMultiMedia(java.lang.String Type, java.lang.String Format, java.lang.String name, byte[] bytes)
Type
- 多媒体的主类型。支持 Image, Video, Audio 三种多媒体类型,eg:ImageFormat
- 资源的格式。图像主类型的文件格式支持 BMP、Jpeg、TIFF及PNG,其中 TIFF 格式不支持多页 eg:PNGname
- 指向 OFD 包内的多媒体文件的位置 eg:image_14.pngbytes
- 文件的字节样例代码如下:
//公共资源增加图片
File file = new File("image/123.png");
int picID=ofDocument.getOfdCommonData().addMultiMedia( "Image","PNG" ,file.getName(),this.getFileBytes(file));
File file=new File("path/abc.png");
FileInputStream fis = null;
try {
fis = new FileInputStream(file);
byte[] fileBytes = new byte[(int) file.length()];
fis.read(fileBytes);
return fileBytes;
} finally {
if (fis != null) {
fis.close();
}
}
有了图片的资源ID后,我们就可以在页面上确定图片的展示位置CTBoundary,最后通过PAGE的addImageObject方法添加到页面中
public CTPageBlock.ImageObject addImageObject(int resID, java.lang.String filename, java.lang.String Format, CTBoundary boundary)
resID
- 在功能资源中的IDfilename
- 资源的名称Format
- 资源的格式。图像主类型的文件格式支持 BMP、Jpeg、TIFF及PNG,其中 TIFF 格式不支持多页 eg:PNGboundary
- 图片资源的展示的矩形边界样例代码如下:
int picID=ofDocument.getOfdCommonData().addMultiMedia( ...);
CTBoundary boundary= new CTBoundary(40,40,40,30);
page.addImageObject(picID,file.getName(),"PNG",boundary);
// 1 创建一个OFD文档
OFDocument ofDocument = new OFDocument();
// 2 创建一页
OFDPage page = new OFDPage(ofDocument);
ofDocument.addPage(page);
//3 在公共资源增加图片获取ID
File file = new File("image/123.png");
int picID=ofDocument.getOfdCommonData().addMultiMedia( "Image","PNG" ,file.getName(),this.getFileBytes(file));
//4 设置图片的开始位置、宽度和高速在页面添加图片
CTBoundary boundary= new CTBoundary(40,40,40,30);
page.addImageObject(picID,file.getName(),"PNG",boundary);
// page2.addImageObject(picID,file.getName(),"PNG",boundary); 不同页面复用图片
//5 保存
OutputStream os new FileOutputStream("path/image.ofd");
ofDocument.save(os);
OFD软件展示结果如下图: