TOP > カテゴリ > Excel >

VBAでPDFファイルをテキストに変換する[ExcelのTIPS]

VBAでPDFファイルをテキストに変換する方法です。変換処理には個人・法人問わず利用、再配布可能な「PDFDesigner Tools」(無料)を使用します。

エクセル以外にもワード、パワーポイントなどでも使用可能です。

PDFDesigner Toolsのダウンロード

最初に「PDFDesigner Tools」をダウンロードします。

PDFDesigner Tools
http://papy.world.coocan.jp/pdftool/

左上にある「pdftool.zip」をダウンロードして展開すると「pdftool.dll」が作成されます。

PDFファイルのテキストを取得する

エクセルを起動して「マクロ有効ファイル」をデスクトップなどに作成します。そのマクロ有効ファイルと同じフォルダに「pdftool.dll」を移動します。

標準モジュール

次にVBAで「標準モジュール」を追加して「pdftool.dll」のAPIを宣言します。

' PDFDesigner Tools API
Public Declare Function GetPDFText Lib "pdftool.dll" (ByVal OpenFileName As String, ByVal SaveFileName As String) As Long

PDFのバージョンを1.4形式に変更するChangePDFVersion()関数とPDFファイルをテキストに変換するvba_GetPDFText()関数を「標準モジュール」に追記します。

' PDFのバージョンを1.4形式にする(コピーしたファイルを編集)
Public Sub ChangePDFVersion(ByVal OpenFileName As String, ByVal SaveFileName As String)
  Dim Stream() As Byte  ' ストリーム
  Dim FileNo As Integer ' ファイルNO

  ' ファイルを読み込む
  FileNo = FreeFile
  ReDim Stream(FileLen(OpenFileName) - 1)

  Open OpenFileName For Binary As #FileNo
    Get #FileNo, , Stream
  Close #FileNo

  ' PDFの形式を1.4にする
  Stream(5) = "&H31":   Stream(7) = "&H34"

  ' ファイルの出力
  FileNo = FreeFile
  Open SaveFileName For Binary Access Write As #FileNo
    Put #FileNo, , Stream
  Close #FileNo
End Sub

' PDFファイルのテキストを取得する
'  戻り値  : 1:成功 -1:失敗 -2:PDFファイルが暗号化されてる
Public Function vba_GetPDFText(ByVal PDF As String, ByVal SaveFileName As String) As Long
  Dim p As Long
  Dim tmp As String
  Dim Result As Long
  
  ' 拡張子をtmpに変換する
  tmp = Replace(PDF, ".pdf", ".tmp", compare:=vbTextCompare)
  
  ' 元のPDFファイルをコピーしてバージョンを1.4形式に変更する
  Call ChangePDFVersion(PDF, tmp)
  
  ' PDFファイルのテキストを取得する
  Result = GetPDFText(tmp, SaveFileName)
  
  ' テンポラリファイルを削除する
  Kill (tmp)
  
  vba_GetPDFText = Result
End Function

イベント

ボタンを押すとPDFファイルの全ページの文字列を取得してテキストファイルに変換します。

Private Sub CommandButton1_Click()
  ' カレントディレクトリをExcelファイルとpdftool.dllがある場所に変更
  ChDir ThisWorkbook.Path
  ' PDFファイルをテキストに変換する
  call vba_GetPDFText("C:\対象.pdf","C:\結果.txt")
End Sub

注意事項

WindowsやエクセルのバージョンによってはCドライブ直下(c:¥test.pdfなど)のファイルはセキュリティ制限で操作できない場合があります。その場合はC:¥Users¥ユーザー名¥Desktop¥など他のフォルダのファイルを指定してください。

また、pdftool.dllは32bitで作成されていますので、32bitのエクセルを使用してください。64bitのエクセルだとpdftool.dllが読み込めずに「実行時エラー 48 ファイルが見つかりません」とエラーが発生します。

Q & A

Q1: 何故、PDFのバージョンを変更するのですか?

「pdftool.dll」は2003年に作成したDelphiのクラスライブラリを元に作成されています。当時は存在しないPDFのバージョンは読み込めないようにしています。

そのバージョンチェックの機能を回避する為にPDFのバージョンを1.4形式に変更しています。これによりMicrosoft Officeなどで作成されたPDFファイルが読み込めるようになります。

Q2: どのようなPDFファイルに対応していますか?

「Microsoft Office、OpenOffice、Chrome」などで作成されたPDFファイルです。形式で言いますとPDF1.4形式(ISO 19005-1など)に準拠しているファイルです。「PDFの純正ツール」で作成したPDF1.5形式以降のファイルは基本的に対応していません。但し、PDF1.5形式以降のファイルでも内部的にPDF1.4形式ならば読み込めます。

また、PDFファイルが暗号化されている場合は対応できませんのでご了承ください。

メモ

本格的に運用する場合はエラーチェックなどを入れてくださいね。

公式リンク

PDFDesigner Tools
http://papy.world.coocan.jp/pdftool/
PDFDesigner JavaScript version(オープンソース)
http://www.petitmonte.com/pdfdesigner/

両方とも私が作成しています^^;

エクセル講座のクイックリンク

ホーム 新機能 基本(初級) 基本(中級) 基本(上級) 関数 マクロ VBA TIPS





関連記事



公開日:2016年01月05日 最終更新日:2016年06月29日
記事NO:01686