2

PDF を非常に高解像度の画像 (最大 100,000 * 80,000 ピクセル以上) にレンダリングする必要があります。

レンダリングをいくつかのスライスに分割し、NSOperationQueue を使用してそれぞれをレンダリングし、基本的に drawInRect:fromRect:operation:fraction: を使用して NSImage pdf 表現を新しい NSImage に描画し、TIFFRepresentation をファイル。

すべてが良好で、マルチコアで高速で、ほぼ満足しています。いずれにせよ、それらのスライスをレンダリングした後で再度結合して、単一の TIFF ファイルを取得する必要があります。

NSInputStream と NSOutputStream を使用してファイルをマージしようとしますが、各ファイルは完全な tiff 表現であるため、未加工のバイトをマージすると、画像ファイルが読み取れなくなります。イメージ ファイルを RAM に完全にロードせずに、つまり NSImage メソッドを使用せずにマージする方法はありますか?

それ以外の場合は、tiff 表現の代わりに生のピクセル バイトを保存し、それらを NSInputStream/NSOutputStream に結合できますが、巨大なものを RAM にロードすることなく、バイト ファイル全体を認識可能な TIFF に変換するにはどうすればよいでしょうか?

4

1 に答える 1

-1

この手法は、おそらくあなたの極端な要求にはうまくいきません (詳細については、メッセージの最後を参照してください) が、スクリーンショットやスナップショット アクロバット ツールよりもはるかに高い解像度の画像を PDF から取得するのに役立つことを願っています。特にエレガントではありませんが、仕事は完了します。

Windows XP の Acrobat 9 Reader に基づく手順 (スナップショット/「マーキー選択」ツールがあれば、以前のバージョンとそれ以降のバージョンでも動作するはずです)。Adobe Reader を実行する他のほとんどのプラットフォームに当てはまると思います。(今考えてみると、実際にはトリックなしでこれを実行できる代替の PDF 表示ソフトウェアが存在する可能性があります。おそらくゴーストスクリプトに基づいたものでしょうか?)いずれにせよ、これが機能することはわかっています。

  1. モニター上の画像が目的のピクセル解像度になるまで、pdf を拡大します。モニターに表示されるよりも多くのピクセルで画像をキャプチャしようとしている場合 (これがこの手法を使用する唯一の理由です)、画面には画像の一部しか表示されません。
  2. 必要に応じてスクロールして、キャプチャする PDF の隅を見つけます。
  3. スナップショット/「マーキー選択」ツールを選択します。
  4. コーナーをクリックし、マウス ボタンを押したまま (ドラッグ選択)、マウスをウィンドウの反対側のコーナーに移動します。
  5. 画面は、画像の反対側の隅に向かって自動スクロールを開始します。しばらく時間がかかるかもしれませんが、そこに到達します。
  6. 反対側の端に到達したら、マウスから指を離します。高解像度の画像がクリップボードに保存されているはずです。

ここで、初期画像の「サイズ」に応じて (Acrobat は PDF の DPI 情報に基づいて元のサイズの 6400% までしかズームしません)、この手法を使用すると、理論的には 100k x 80k ピクセルに到達できます。今日のほとんどの PC で問題になるのは、コピー バッファーに 22 GB の画像データを保持するのに十分な RAM が必要なことです...

于 2010-11-24T02:22:49.137 に答える