ApacheFop和Java映像问题-组合多个源

ApacheFop和Java映像问题-组合多个源,java,xml,apache-fop,Java,Xml,Apache Fop,我正在尝试使用ApacheFop和Java“自动化”构建PDF。我想尽量减少硬编码,因为我事先不知道我需要支持的所有文件组合。此外,我想尝试不在硬盘上保存文件。HD上的文件引入了安全性、性能、线程和清理方面的考虑,我不想处理这些问题 我现在使用的测试用例有1个FO和2个PNG文件。其中一个PNG文件超过1MB 理想情况下,我会创建3个来源: InputStream fo = new InputStream(new File("C:\\Temp\\FOP\\Test\\blah.fo")); In

我正在尝试使用ApacheFop和Java“自动化”构建PDF。我想尽量减少硬编码,因为我事先不知道我需要支持的所有文件组合。此外,我想尝试不在硬盘上保存文件。HD上的文件引入了安全性、性能、线程和清理方面的考虑,我不想处理这些问题

我现在使用的测试用例有1个FO和2个PNG文件。其中一个PNG文件超过1MB

理想情况下,我会创建3个来源:

InputStream fo = new InputStream(new File("C:\\Temp\\FOP\\Test\\blah.fo"));
InputStream png1 = new InputStream(new File("C:\\Temp\\FOP\\Test\\image-1.png"));
InputStream png2 = new InputStream(new File("C:\\Temp\\FOP\\Test\\image-2.png"));
Source foSrc = new StreamSource(fo);
Source png1Src = new StreamSource(png1);
Source png2Src = new StreamSource(png2);
然后将它们组合在一起生成PDF。我找不到一种使用API来实现这一点的方法

FO文件通过以下方式引用图像:

<fo:external-graphic src="file:image-1.png"/>
<fo:external-graphic src="file:image-2.png"/>
此代码库仅查找两个图像中较小的图像。似乎较大的那个被忽略了,因为它大于某个极限

  • 我使用各种相对和绝对路径尝试了上述构造函数

  • 我尝试过使用默认的“fop.xconf”文件构造FopFactory,并将“C:\Temp\fop\Test”目录添加到类路径中
  • 我已经“硬编码”了文件及其在FO文件中的位置
  • 我曾尝试对图像使用中间文件结构(IFDocumentHandler、IFSerializer和IFConcatenator),并以这种方式出现错误。似乎中间文件不适用于图像
  • 我已经能够使用base64编码和语法将文件嵌入FO文件:

    <fo:external-graphic src="url('data:image/png;base64,iVBORw...ggg==')"/>
    
    
    
  • 最后一个似乎是最好的解决方案,而不是获取3个源并使用所有3个源生成PDF。关于如何使用API来组合这三个源有什么建议吗

    谢谢

    <fo:external-graphic src="url('data:image/png;base64,iVBORw...ggg==')"/>