2016-06-22 14 views
0

私はpdftkのサブセットを再実装しています(pdftkは新しいバージョンのpdfで失敗します)。その1つは、インタラクティブな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フィールドにはフォームフィールドのみが表示されます。私の最初の考えは、2番目の行が欠陥のある行になることですが、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)これはPDFBoxとどのように関連していますか? 2)3行目では、tmp.pdfに何か(何?)を保存しています。次に、バイナリデータをStringに読み込んでいます。非常に奇妙な。 –

+0

3行目は、doc(pdfboxのPDDocument)をファイルに保存します。私はただファイルを文字列に変換するだけですが、pdfboxはファイルを文字列として読み込む良い方法はありません。 –

+0

私は現在、別の解決法を使用しています: if( "W" .equals(System.getProperty( "os.name")。substring(0,1)) doc.save(新しいファイル( "CON")) ; else doc.save(新しいファイル( "/ dev/stdout"));ほとんどが動作する このバージョンの唯一の問題は、Windowsで出力をパイプすることができないことです。 –

答えて

1

コメントで述べたように - 代わりに、一時ファイルに保存するのには、System.outに保存することができます:

doc.save(System.out); 

私はのSystem.outをのために使用することができるかどうかをテストしたことがありませんが、そのような目的を達成し、内容をそのままにしておきます。元のPDFとパイプから出るものを比較するバイナリテストを行うことをお勧めします。

関連する問題