Apache FOP可用于生成可以防止PDF客户端扩展和更改方向的PDF吗?

时间:2012-02-13 15:21:02

标签: java pdf pdf-generation apache-fop

我正在使用apache fop 1.0为我们的客户为客户创建一些pdf。稍后由扫描仪读取pdf的打印输出。遗憾的是,扫描仪无法处理缩放的打印输出,因此如果可以防止在pdf-client中缩放pdf以便打印输出必须以预定义的大小完成,则会出现问题。我知道pdf加密的可能性可以用来防止打印,但我需要的是有些不同。所以我的问题是:

  • 有没有办法强制pdf-client以定义的大小打印pdf而不进行缩放?
  • 也可以强制纸张方向吗?
  • 这是可能的,可以用apache fop完成吗?

实际上我不认为这是可能的,但任何帮助都会受到高度赞赏。

最好的问候

泰勒

2 个答案:

答案 0 :(得分:0)

您无法真正控制查看应用程序打印或显示PDF的方式。您可以做的最好的事情是附加ViewerPreferences字典(ISO 32000:2008第12.2节) - 但这只是观众的提示

答案 1 :(得分:0)

如果从命令行使用FOP,可以查看fop -out list,其中显示了FOP将生成的mime类型列表。另请参阅a FOP FAQ on output formats org.apache.fop.apps.MimeConstants ,以获取可以编程方式生成的输出格式列表。

为了克服重新调整大小,在这种情况下生成栅格(例如,PNG或TIFF)输出会有所帮助。例如,从命令行:

fop -xml data.xml -xsl transform.xslt -out "image/tiff" output.tiff

将生成TIFF文件。使用"image/png"获取PNG文件等。

以编程方式,你会,例如:

FopFactory fopFactory = FopFactory.newInstance();
FOUserAgent userAgent = fopFactory.newFOUserAgent();

TransformerFactory factory = org.apache.xalan.processor.TransformerFactoryImpl.newInstance();
Transformer transformer;

OutputStream out = new BufferedOutputStream(pdfOut[0].setBinaryStream(1L));

try {
  Fop fop = fopFactory.newFop(MimeConstants.MIME_PNG /* or MIME_TIFF */, userAgent, out);
  transformer = factory.newTransformer(new StreamSource(xsltIn.getCharacterStream()));
  Source src = new StreamSource(xmlIn.getCharacterStream());
  Result res = new SAXResult(fop.getDefaultHandler());
  transformer.transform(src, res);
} catch ...