読み込み済み画像の抽出
読み込み済み画像の抽出機能により、LoadFromFile や LoadFromStream で既存の PDF を開いた後に image XObject を列挙し、メタデータを調べ、対応している画像を TBitmap インスタンスへデコードできます
主な API
GetLoadedImageCountは、読み込み済みドキュメント内の列挙可能な画像オブジェクトの数を返しますGetLoadedImageInfoは、オブジェクト番号、ページインデックス、サイズ、ビット深度、色空間、フィルターリスト、デコード可否のメタデータをピクセルをデコードせずにTHPDFLoadedImageInfoへ設定しますExtractLoadedImageは、選択した画像を新しいTBitmapへデコードします。返されたビットマップの所有者は呼び出し側ですGetLoadedImageCountPerPageは、列挙を 1 つの読み込み済みページに限定します
対応ソース
- データフィルターは
FlateDecode、LZWDecode、ASCIIHexDecode、ASCII85Decode、RunLengthDecode、および画像フィルターで終わる複数フィルターのチェーンに対応します - 画像フィルターは
DCTDecode、JPXDecode、JBIG2Decode、CCITTFaxDecodeに対応します - ラスターのパスは、DeviceRGB、DeviceGray、Indexed、DeviceCMYK、および低ビット深度のグレースケール / インデックス画像に対応します
デコードパラメーターと安全性
DecodeParmsとその省略形DPキーは、値がディクショナリの場合も、フィルターパラメーター配列の最後のディクショナリの場合も解決されますPredictor、Colors、BitsPerComponent、Columnsは、Flate または LZW の解凍後に適用されます- LZW の
EarlyChange=0とEarlyChange=1のどちらも処理できます - TIFF Predictor 2 は、パックされた 1 / 2 / 4 ビットのサンプルに加えて 8 / 16 ビットのコンポーネントに対応します
- PNG predictor では、完全な各行ごとに有効なフィルタータグが必要です
- ラスターの寸法と予想バイト数は、割り当てやデコードの前にオーバーフローチェックされます
- 壊れた圧縮データはデコード失敗として報告され、非圧縮ピクセルとして扱われることはありません
例
var
Doc: THotPDF;
Info: THPDFLoadedImageInfo;
Bmp: TBitmap;
I: Integer;
begin
Doc := THotPDF.Create(nil);
try
Doc.LoadFromFile('input.pdf');
for I := 0 to Doc.GetLoadedImageCount - 1 do
if Doc.GetLoadedImageInfo(I, Info) and Info.Decodable then
begin
Bmp := Doc.ExtractLoadedImage(I);
try
if Assigned(Bmp) then
Bmp.SaveToFile(Format('image-%d.bmp', [I]));
finally
Bmp.Free;
end;
end;
finally
Doc.Free;
end;
end;