我正在使用apache fop 1.0为我们的客户为客户创建一些pdf。稍后由扫描仪读取pdf的打印输出。遗憾的是,扫描仪无法处理缩放的打印输出,因此如果可以防止在pdf-client中缩放pdf以便打印输出必须以预定义的大小完成,则会出现问题。我知道pdf加密的可能性可以用来防止打印,但我需要的是有些不同。所以我的问题是:
实际上我不认为这是可能的,但任何帮助都会受到高度赞赏。
最好的问候
泰勒
答案 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 ...