ホーム > カテゴリ > Excel・VBA >

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


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律