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のバージョンを変更するのですか?
そのバージョンチェックの機能を回避する為にPDFのバージョンを1.4形式に変更しています。これによりMicrosoft Officeなどで作成されたPDFファイルが読み込めるようになります。
Q2: どのようなPDFファイルに対応していますか?
また、PDFファイルが暗号化されている場合は対応できませんのでご了承ください。
メモ
本格的に運用する場合はエラーチェックなどを入れてくださいね。
公式リンク
PDFDesigner Tools
http://papy.world.coocan.jp/pdftool/
PDFDesigner JavaScript version(オープンソース)
http://www.petitmonte.com/pdfdesigner/
両方とも私が作成しています^^;
エクセル講座のクイックリンク
関連記事
プチモンテ ※この記事を書いた人
![]() | |
![]() | 💻 ITスキル・経験 サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。 画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ |
| 🎵 音楽制作 BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は抒情詩、抒情的な楽曲が多い。楽曲制作は🔰2023年12月中旬 ~ | |









