我有一个用例,我必须在pdf上显示动态图像。我正在使用PDF生成的FApacheFOP 2.1。我从API调用获取图像行,然后我将该图像转换为基本64格式。
请找到java coe转换图片:
String jpgFileName = ConfigManager.getImageFilePath() + "/jpgImage-"+System.currentTimeMillis()+".jpg";
Blob imageDataBlob = (Blob) faesRow.get("imageData");
FileUtil.writeToFile(imageDataBlob, jpgFileName);
String base64Result = Base64.getEncoder().encodeToString(FileUtil.readFromFile(jpgFileName).getBytes("utf-8"));
result = base64Result;
我在xslfo中使用base64类型数据在PDF上打印图像,请在下面找到xslfo,这里$!signatureImage是上面java代码发送的数据:
<xsl:param name="Name">data:image/jpg;base64,{$!signatureImage}</xsl:param>
<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in">
<fo:block text-align="left">
<fo:external-graphic content-width="scale-to-fit"
content-height="100%"
width="100%"
scaling="uniform"
src="url({$Name})"/>
</fo:block>
</fo:block-container>
在模板渲染的输出中,我可以在xslfo文件中获得base64流。请在下面找到输出:
<xsl:param name="Name">data:image/jpg;base64,{77+977+977+977+9ABBK... }</xsl:param>
<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in">
<fo:block text-align="left">
<fo:external-graphic content-width="scale-to-fit"
content-height="100%"
width="100%"
scaling="uniform"
src="url({$Name})"/>
</fo:block>
</fo:block-container>
现在问题是图像没有按照生成的PDF输出定价。 你能帮我找一个在这里打印图片的方法。
额外信息: 1.我没有收到任何错误来生成PDF。 2. PDF能够打印静态图像和条形码。
答案 0 :(得分:2)
我在那种情况下发现了问题。
第一个问题是使用base64转换,我们需要使用如下转换:
File file= new File(jpgFileName);
FileInputStream fileInputStream= new FileInputStream(file);
byte[] b= new byte[(int) file.length()];
fileInputStream.read(b);
String base64Result = new String(Base64.getEncoder().encode(b),"UTF-8");
除此之外,xslfo模板也需要进行一些更改,请在下面找到更改:
<fo:block-container absolute-position="absolute" left="3.50in" top="9.25in" width="4.0in" height="2.0in">
<fo:block text-align="left">
<fo:external-graphic content-width="scale-to-fit"
content-height="100%"
width="100%"
scaling="uniform"
src="url('data:image/jpeg;base64,$!signatureImage')"/>
</fo:block>
</fo:block-container>