Table of Contents
はじめに
PDFium Component Suite for FireMonkeyは、PDFドキュメントを扱うさまざまな機能を提供します。この製品では、PDFiumオープンソースPDFレンダリングエンジンを用いており、Windows、macOS、iOS、Androidをサポートしています。
PDFium自身は、Chromiumプロジェクトで使用されています。つまり、PDFiumの「ium」は、Chromiumに由来しています。これは完全なオープンソースプロジェクトですので、こちらからコントリビュートすることができます。
インストール
PDFium Component Suiteはコンポーネントであり、複数OSをサポートしているため、インストールファイルがあります。もし、インストールに関して不明点がある場合には、PDFium Component Suite for FireMonkeyのインストール方法を紹介するショートビデオをご覧ください。
概要
インストールに成功すると、パレットには以下の2つのコンポーネントが追加されます。

TFPdfは、PDFドキュメントを扱います。このコンポーネント用いれば、PDFドキュメントの作成と処理が可能になります。
TFPdfViewは、FireMonkeyアプリケーションでPDFドキュメントを表示するためのコンポーネントです。
PDFium Suiteでできること
- PDFドキュメントの作成
- PDFドキュメントからの画像抽出
- テキスト抽出
- テキストページ抽出
- PDFドキュメントのマージ
- PDFのJPGへの変換
開発
PDFium Suiteで、PDFドキュメントをJPGイメージファイルに変換する方法を見てみましょう。
FormCreateでは、GetDisplayMetrics関数を用いて、1インチあたりのピクセル数(PPI)を取得します。
procedure TFormMain.FormCreate(Sender: TObject);
var DeviceBehavior: IDeviceBehavior;
begin
PixelsPerInch := 96;
if TBehaviorServices.Current.SupportsBehaviorService(IDeviceBehavior, DeviceBehavior, Self) then
PixelsPerInch := DeviceBehavior.GetDisplayMetrics(Self).PixelsPerInch;
end;
「Convertor」ボタンを押すことで、処理を実行します。ページ番号0から開始し、RenderPageプロシージャを用いて、ページをレンダリングします。そして、TBitmapベースのデータをファイルに保存します。
procedure TFormMain.ButtonConvertClick(Sender: TObject);
var
I: Integer;
FileName: string;
Bitmap: TBitmap;
begin
ProgressBar.Value := 0;
EditPdfFile.Enabled := False;
ButtonPdfFile.Enabled := False;
ButtonConvert.Enabled := False;
FormMain.Cursor := crHourGlass;
try
FPdf.FileName := EditPdfFile.Text;
FPdf.PageNumber := 0;
FPdf.Active := True;
ProgressBar.Max := FPdf.PageCount;
FileName := ExtractFileName(FPdf.FileName);
FileName := Copy(FileName, 1, Length(FileName) - Length(ExtractFileExt(FPdf.FileName)));
FileName := ExtractFilePath(FPdf.FileName) + FileName;
for I := 1 to FPdf.PageCount do
begin
FPdf.PageNumber := I;
Bitmap := FPdf.RenderPage(0, 0,
Round(PointsToPixels(FPdf.PageWidth, PixelsPerInch)),
Round(PointsToPixels(FPdf.PageHeight, PixelsPerInch)));
try
Bitmap.SaveToFile(FileName + '_Page' + IntToStr(I) + '.jpg');
finally
Bitmap.Free;
end;
ProgressBar.Value := I;
Application.ProcessMessages;
end;
finally
FormMain.Cursor := crDefault;
FPdf.Active := False;
EditPdfFile.Enabled := True;
ButtonPdfFile.Enabled := True;
ButtonConvert.Enabled := True;
end;
end;
PDFドキュメントから画像を抽出
PDFドキュメントから画像を取得する場合も、処理を実行する前にファイル名とパスを指定して初期設定を行う点は同じです。あとは、BitmapCountを使ってTFPdfを反復処理するだけで、インデックスを用いて画像を取得できます。
for I := 1 to FPdf.PageCount do
begin
FPdf.PageNumber := I;
for J := 0 to FPdf.BitmapCount - 1 do
begin
Bitmap := FPdf.Bitmap[J];
try
Bitmap.SaveToFile(FileName + '_Page' + IntToStr(I) + '_Image' + IntToStr(J + 1) + '.bmp');
finally
Bitmap.Free;
end;
end;
ProgressBar.Value := I;
Application.ProcessMessages;
end;
テキストの抽出
Text関数を用いれば、PDFドキュメントからテキストをフェッチし、コンテンツをファイルに保存することができます。
FileStream := TFileStream.Create(FileName + '.txt', fmCreate);
try
for I := 1 to FPdf.PageCount do
begin
FPdf.PageNumber := I;
Text := UTF8Encode(FPdf.Text);
if Text <> '' then
begin
FileStream.WriteBuffer(Text[1], Length(Text));
FileStream.WriteBuffer(NewLine[1], Length(NewLine));
FileStream.WriteBuffer(NewLine[1], Length(NewLine));
end;
ProgressBar.Value := I;
Application.ProcessMessages;
end;
finally
FileStream.Free;
end;
以上の操作を実際にご覧いただくには、以下のデモアクションビデオをチェックしてください。
PDFium Component Suite for FireMonkeyの機能詳細については、こちらのページをご覧ください。
PDFium Component Suite for FireMonkeyは、WinSoft社の製品です。この記事に記載された機能を利用するには、WinSoft社のサイトからPDFium Component Suite for FireMonkeyを購入する必要があります。PDFium Component Suite for FireMonkeyに関するサポートは、WinSoft社によって提供されます。
Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Free Delphi Community Edition Free C++Builder Community Edition







