PDF bisa menyimpan gambar raster yang tertanam langsung di dalam objek halaman. PDFium Component mengekspos gambar-gambar tersebut per halaman melalui properti BitmapCount dan array Bitmap[]. Artikel ini membahas cara membuka dokumen dengan benar, mengiterasi halaman, mengekstrak setiap gambar, dan menyimpannya sebagai JPEG atau BMP
Membuka dokumen dan menjaga terhadap kegagalan diam
PDFium Component tidak memunculkan exception saat LoadFromFile gagal karena file rusak atau dilindungi sandi; alih-alih, properti Active tetap False. Selalu periksa kondisi ini sebelum mengakses properti lain:
procedure TExtractForm.OpenDocument(const PdfFile: string);
begin
Pdf.LoadFromFile(PdfFile);
if not Pdf.Active then
begin
ShowMessage('Cannot open: ' + PdfFile);
Exit;
end;
StatusBar.SimpleText := Format('%d page(s) loaded', [Pdf.PageCount]);
end;
Mengekstrak semua gambar dari setiap halaman
procedure TExtractForm.ExtractAllImages(const OutputDir: string);
var
Page, Img: Integer;
Bmp: TBitmap;
OutPath: string;
begin
if not Pdf.Active then Exit;
for Page := 1 to Pdf.PageCount do
begin
Pdf.PageNumber := Page;
for Img := 0 to Pdf.BitmapCount - 1 do
begin
Bmp := Pdf.Bitmap[Img]; // PDFium owns this object; do NOT free it
if Assigned(Bmp) then
begin
OutPath := Format('%spage%d_img%d.bmp', [OutputDir, Page, Img]);
Bmp.SaveToFile(OutPath);
end;
end;
end;
end;
Objek TBitmap yang dikembalikan oleh Bitmap[Img] dimiliki oleh komponen PDFium. Jangan panggil Free pada objek tersebut. Jika Anda perlu memodifikasi atau menyimpan gambar dalam format berbeda, salin dulu ke instance TBitmap yang Anda miliki menggunakan Assign
Menyimpan gambar sebagai JPEG
procedure TExtractForm.SaveBitmap(Bmp: TBitmap; const FileName: string;
AsJpeg: Boolean);
var
Jpeg: TJPEGImage;
Copy: TBitmap;
begin
if AsJpeg then
begin
Jpeg := TJPEGImage.Create;
Copy := TBitmap.Create;
try
Copy.Assign(Bmp); // own copy — safe to pass to TJPEGImage
Jpeg.CompressionQuality := 85;
Jpeg.Assign(Copy);
Jpeg.SaveToFile(FileName);
finally
Copy.Free;
Jpeg.Free;
end;
end
else
Bmp.SaveToFile(FileName); // BMP: direct save, no copy needed
end;
Langkah salinan (Copy.Assign(Bmp)) diperlukan sebelum TJPEGImage.Assign karena TJPEGImage mengharapkan bitmap dengan piksel yang dapat dibaca secara bebas, sementara objek milik PDFium mungkin memiliki pembatasan akses piksel di beberapa build
Untuk teknik ekstraksi konten lainnya, lihat artikel mengekstrak teks dari PDF, atau kunjungi halaman produk PDFium Component