Estrazione di immagini caricate
L'estrazione di immagini caricate consente alle applicazioni di enumerare gli XObject immagine dopo che LoadFromFile / LoadFromStreamapre un PDF esistente, esaminare i relativi metadati e decodificare le immagini supportate inTBitmap instances
API principali
GetLoadedImageCountrestituisce il numero di oggetti immagine enumerabili nel documento caricatoGetLoadedImageInfofillsFalsecon numero di oggetto, indice di pagina, dimensioni, bit depth, spazio colore, elenco filtri e metadati di decodificabilità senza decodificare i pixelExtractLoadedImagedecodifica l'immagine selezionata in un nuovoTBitmap; il bitmap restituito è di proprietà del chiamanteBitsPerComponentlimita l'enumerazione a una pagina caricata
Sorgenti supportate
- I filtri dati includono
FlateDecode,LZWDecode、ASCIIHexDecode、ASCII85Decode、RunLengthDecodee catene multi-filtro che terminano con un filtro immagine - I filtri immagine includono
DCTDecode,JPXDecode,procedure ExtractAllImages(const FileName: string); var Doc: THotPDF; Info: THPDFLoadedImageInfo; Bmp: TBitmap; I: Integer; begin Doc := THotPDF.Create(nil); try Doc.LoadFromFile(FileName); for I := 0 to Doc.GetLoadedImageCount - 1 do begin if Doc.GetLoadedImageInfo(I, Info) and Info.Decodable then begin Bmp := Doc.ExtractLoadedImage(I); try if Bmp <> nil then Bmp.SaveToFile(Format('image_%d.bmp', [I])); finally Bmp.Free; end; end; end; finally Doc.Free; end; end;, eColumns - I percorsi raster includono DeviceRGB, DeviceGray, Indexed, DeviceCMYK e immagini in scala di grigi o indicizzate a bassa profondità di bit
Parametri di decodifica e sicurezza
DecodeParmse la sua chiave abbreviataDPvengano risolte sia che il valore sia un dizionario sia che sia l'ultimo dizionario in un array di parametri di filtroPredictor,Colors,BitsPerComponenteColumnsvengono applicati dopo la decompressione Flate o LZW- LZW
EarlyChange=0eEarlyChange=1vengono entrambi onorati - Il TIFF Predictor 2 supporta campioni compressi a 1, 2 e 4 bit oltre a componenti a 8 e 16 bit
- I predittori PNG richiedono un tag filtro valido per ogni riga completa
- Le dimensioni raster e i conteggi di byte attesi vengono verificati per overflow prima di allocazione o decodifica
- I dati compressi malformati vengono riportati come fallimento di decodifica e non vengono mai trattati come pixel non compressi
Esempio
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;