1

WebView を使用して Web サイトにアクセスし、そのページからデータを抽出する JavaFX アプリケーションを作成しています。ある時点で、PDF ファイルを表示する新しいウィンドウを開くリンクをクリックしたいと思います。JavaFX での PDF サポートの幸運により、考えられる解決策の 1 つは、その PDF の http 応答を読み取り、バイナリ データから PDF を作成することではないかと考えています。

PDFページのURLは動的であるため、ファイルの実際の名前がわからないため、サードパーティのツールを使用してPDFを生成することはできません.

どんな考えでも大歓迎です。

ありがとう

4

1 に答える 1

1

Swing ベースの PDF ビューアを起動する

以下は、JavaFX で作成した小さな Web ブラウザー ( willow-browserという名前) から抽出したコードです。

webEngine.locationProperty().addListener(new ChangeListener<String>() {
  @Override public void changed(ObservableValue<? extends String> observableValue, String oldLoc, String newLoc) {
    if (newLoc.endsWith(".pdf")) {
      try {
        final PDFViewer pdfViewer = new PDFViewer(false);
        pdfViewer.openFile(new URL(newLoc));
      } catch (Exception ex) {
        // handle bad pdf url . . . most likely no action required
      }
    }
  }
}

このコードは、URL をロードするために起動するサードパーティの Swing ベースの pdf ビューアを使用します。Swing pdf ビューアは別のウィンドウで実行されるため、Swing/JavaFX 統合の問題はなく、動作しているように見えました。

動作させるには、柳のブラウザー ソースのコピーをダウンロードしてビルドします (サイトでホストされているサンプル バイナリには pdf ビューアーが含まれておらず、ソース ビルドのみが含まれています)。

理想的には、コードは uri 文字列に加えて http コンテンツ タイプをクエリして、ファイルが pdf であることを判断しますが、これには、WebView の場合に取得するのが難しい、少し低レベルのネットワーク アクセスが必要です。多くのサイトで pdf コンテンツを完全に正確に検出することに関心がない場合は、コンテンツ タイプを使用して pdf を判別しなくても問題ありません。

Swing pdf ビューアで期待どおりの結果が得られない場合は、他にもjpedalfxICEpdfなどの pdf ビューアを試すことができます。

ネイティブ PDF ビューアを起動する

必要に応じて、pdf の URL でHostServices.showDocument(uri)を呼び出すことができます。これにより、ローカルの Web ブラウザーで URL を開くことがトリガーされます。一部のブラウザーには、pdf ビューアーが組み込まれているか、Acrobat リーダーを使用して pdf を表示するように設定されています。

この場合、表示する PDF の URL を決定するコードは上記のコードと同じです。

于 2013-06-08T10:37:55.300 に答える