我正在重新实现pdftk的一个子集(pdftk使用较新版本的pdf失败),其中一个功能就是能够将交互式pdf文件输出到命令行(用于管道目的)。我目前正在这样做
if("".equals(output)){
File tmp=new File("tmp.pdf");
doc.save(tmp);
output= new String(Files.readAllBytes(Paths.get("tmp.pdf")), "UTF-8");
tmp.delete();
}
System.out.println(output);
问题是当我把它传递给out.pdf时。并打开它,只有表单字段在新的pdf字段中。我的第一个想法是第二行是错误的,但tmp.pdf是完整的pdf文件,表明问题出在我正在阅读pdf的行。有什么建议吗?
编辑: 我找到了一种主要使用/ dev / nul或CON(os依赖)的不同方式。这种方式更好,因为它不创建临时文件,但在Windows上它不能正确管道。有什么办法使它成为管道?
if("".equals(output)){
if("W".equals(System.getProperty("os.name").substring(0,1)))
doc.save(new File("CON"));
else
doc.save(new File("/dev/stdout"));
System.out.println(output);
答案 0 :(得分:1)
如评论中所述 - 您可以保存到System.out:
,而不是保存到临时文件doc.save(System.out);
虽然我从未测试System.out是否可用于此目的并保持内容完整,但我建议您进行一些二进制测试以比较原始PDF和您获得的内容走出管道。