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)を取得します。
1 2 3 4 5 6 7 |
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ベースのデータをファイルに保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
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を反復処理するだけで、インデックスを用いて画像を取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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ドキュメントからテキストをフェッチし、コンテンツをファイルに保存することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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社によって提供されます。
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition