AcroExch.AVDoc: FindText メソッド

TOP > AcroExch.AVDoc > FindText      [...]


説明

指定されたテキスト(文字列)を検索して、それが目に見えるように画面スクロールし、選択状態にします。

※当サイト管理人は使用を推奨しません。<注意>を参照。

形式

VARIANT_BOOL FindText(BSTR szText,
                                     long bCaseSensitive,
                                     long bWholeWordsOnly,
                                     long bReset);

戻り値

  • 戻り値が0の場合は検索成功。
  • 戻り値が0以外の場合は検索出来なかった。

引数

  1. 第1引数(BSTR szText):
    検索する文字列。
  2. 第2引数(long bCaseSensitive):
    正の数の場合は検索では大文字と小文字を区別します。
    0の場合は区別しません。
  3. 第3引数(long bWholeWordsOnly):
    正の数の場合は単語単位で検索します。
    0の場合は部分単位で検索します。
  4. 第4引数(long bReset):
    正の数の場合はドキュメントの最初のページから検索を始めます。
    0の場合、現在のページから検索を始めます。

動作するバージョン

VersionAdobe
Acrobat
備考
4NOAcrobat 4.0    ※Windows 98SE + Excel 2000
5
NO
Acrobat 5.0.5
6
NO
Acrobat 6.0.3 Pro
7OKAcrobat 7.0.9 Pro
Acrobat 7.1.4 Pro
8OKAcrobat 8.2.2 Pro
9OKAcrobat 9.3.2 Extended
10-Acrobat X (10.1.8) Extended
11-Acrobat XI (11.0.04) Extended
  • OK = 動作する。
  • NO = 動作しない。 戻り値が0を返す。 プログラム処理が出来ない。
  • - = 未確認。

Acrobat v4 , v5

FindTextメソッドは実行出来ますが、最後まで検索が終わると以下のダイアログ画面が出てしまうので、「NO」扱いにします。

FindText : Acrobat v4 の実行結果

なお、上記ダイアログ画面で「キャンセル」ボタンをクリックすると、戻り値は「0」が返ります。

Acrobat v6

FindTextメソッドを実行すると、Acrobat画面右側に検索結果ペインが表示されます。

そして次にFindTextメソッドを連続実行するとこの検索結果ペインが邪魔をしてうまく検索が出来なくなります。

※サンプル②は正常に処理されません。

(検索頁番号が取得出来ない。検索結果で該当文字列が選択状態にならない。)

FindText : Acrobat v6 の実行結果

 

 


サンプル①:ExcelのVBA

説明:該当文字列がPDF上に存在するかチェックする。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。
001 Sub AcroExch_AVDoc_FindText() 002 003 'Acrobatオブジェクトの定義&作成 004 'Acrobat 4,5,6 の時 005 ' Dim objAcroApp As Acrobat.CAcroApp 006 ' Dim objAcroAVDoc As Acrobat.CAcroAVDoc 007 ' Set objAcroApp = CreateObject("AcroExch.App") 008 ' Set objAcroAVDoc = CreateObject("AcroExch.AVDoc") 009 010 'Acrobat 7,8,9,10,11 の時 011 Dim objAcroApp As New Acrobat.AcroApp 012 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 013 014 '以降はAcrobat全て共通 015 Dim lRet As Long '戻り値 016 017 '①PDFファイルを開く。(メモリ上) 018 lRet = objAcroAVDoc.Open("C:\work\Test01.pdf", "") 019 '②Acrobatアプリケーションを起動し、画面表示する。 020 lRet = objAcroApp.Show 021 022 'Test01.pdfから"Acrobat"文字列を検索する。 023 lRet = objAcroAVDoc.FindText("Acrobat", 1, 1, 1) 024 025 'PDFファイルを閉じます。 026 '※変更は保存されません。 027 lRet = objAcroAVDoc.Close(1) 028 029 'Acrobatアプリケーションを終了する。 030 lRet = objAcroApp.Hide 031 lRet = objAcroApp.Exit 032 033 'オブジェクトを強制解放する 034 Set objAcroAVDoc = Nothing 035 Set objAcroApp = Nothing 036 037 End Sub


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 


サンプル②:ExcelのVBA

説明:PDF上の該当文字列を頁単位でカウントする。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。
001 Sub AcroExch_AVDoc_FindText1() 002 003 'Acrobatオブジェクトの定義&作成 004 'Acrobat 4,5,6 の時 005 ' Dim objAcroApp As Acrobat.CAcroApp 006 ' Dim objAcroAVDoc As Acrobat.CAcroAVDoc 007 ' Dim objAcroPDDoc As Acrobat.CAcroPDDoc 008 ' Dim objAcroAVPageView As Acrobat.CAcroAVPageView 009 ' Set objAcroApp = CreateObject("AcroExch.App") 010 ' Set objAcroAVDoc = CreateObject("AcroExch.AVDoc") 011 ' Set objAcroPDDoc = CreateObject("AcroExch.PDDoc") 012 013 'Acrobat 7,8,9,10,11 の時 014 Dim objAcroApp As New Acrobat.AcroApp 015 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 016 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 017 Dim objAcroAVPageView As Acrobat.AcroAVPageView 018 019 '以降はAcrobat全て共通 020 Dim lRet As Long '戻り値 021 022 Dim i As Long '添え字 023 Dim lAllPageCnt As Long '開いたPDFの全頁数 024 Dim lGetPageNum As Long '現在処理中が頁番号 025 Dim lPageFindCnt() As Long '各頁番号に含まれている検索キーの合計 026 Dim lCnt As Long '各種処理件数:ワーク 027 028 Dim strText As String '1ページ単位の抽出テキスト 029 Dim lFileNo As Long 'ファイル番号 030 031 '最大処理件数 032 Const COM_MAX_LOOP_CNT = 9999 'デバッグ用 033 'PDFファイル 034 Const CON_PDF_FILE = "C:\work\test4.pdf" 035 'ログファイル:Test用 036 Const CON_OUT_FILE = "C:\work\test7.txt" 037 '検索キー 038 Const CON_SELTEXT = "JavaScript" 039 040 '①PDFファイルを開く(メモリ上) 041 lRet = objAcroAVDoc.Open(CON_PDF_FILE, "") 042 '②Acrobatアプリケーションを起動し、画面表示する 043 lRet = objAcroApp.Show 044 045 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc() 046 '開いたPDFドキョメントの全ページ数を取得する 047 lAllPageCnt = objAcroPDDoc.GetNumPages() 048 '事前チェック 049 If lAllPageCnt = 1 Then 050 MsgBox "1頁しかないPDFファイルは処理出来ません。" _ 051 & vbCrLf & "処理は中断しました。", vbOKOnly, "実行エラー" 052 GoTo AcroExch_AVDoc_FindText1_Exit: 053 End If 054 055 '配列の動的再作成 056 ReDim lPageFindCnt(lAllPageCnt + 1) 057 058 Set objAcroAVPageView = objAcroAVDoc.GetAVPageView() 059 '最初のページに移動 060 lRet = objAcroAVPageView.Goto(0) 061 062 '初期化 063 For i = LBound(lPageFindCnt) To UBound(lPageFindCnt) - 1 064 lPageFindCnt(i) = 0 065 Next i 066 lGetPageNum = 0 067 lCnt = 0 068 069 '各頁の検索件数をlPageFindCnt配列に格納する 070 For i = 0 To COM_MAX_LOOP_CNT 071 072 '画面の最前列に表示します。 073 lRet = objAcroAVDoc.BringToFront() 074 'テキスト検索をする 075 If i = 0 Then 076 '先頭ページから検索 077 lRet = objAcroAVDoc.FindText(CON_SELTEXT, 0, 0, 1) 078 Else 079 '先頭ページ以外を検索 080 lRet = objAcroAVDoc.FindText(CON_SELTEXT, 0, 0, 0) 081 End If 082 083 If lRet = 0 Then 084 'EOFになった。 085 Exit For 086 End If 087 088 Set objAcroAVPageView = objAcroAVDoc.GetAVPageView() 089 '③検索できたPDF上の頁番号を取得する 090 lRet = objAcroAVPageView.GetPageNum 091 If lGetPageNum > lRet Then 092 '先頭ページの戻ったので検索終了 093 Exit For 094 End If 095 '現在処理中のページ番号を保存 096 lGetPageNum = lRet 097 098 '検索したカウントを集計する 099 lPageFindCnt(lGetPageNum) = lPageFindCnt(lGetPageNum) + 1 100 lCnt = lCnt + 1 101 102 Next i 103 104 '処理の制限チェック 105 If i >= COM_MAX_LOOP_CNT Then 106 MsgBox "当処理は制限処理件数(" & COM_MAX_LOOP_CNT & ") を越えました。" _ 107 & "処理は中断しました。", vbOKOnly, "実行エラー" 108 GoTo AcroExch_AVDoc_FindText1_Exit: 109 End If 110 111 '結果をテキストファイルに書き出す:Test用 112 lFileNo = FreeFile() 113 Open CON_OUT_FILE For Output Access Write As lFileNo 114 Print #lFileNo, "PDF-File=(" & CON_PDF_FILE & ")" 115 For i = LBound(lPageFindCnt) To lAllPageCnt - 1 116 Print #lFileNo, "Page(" & i + 1 & ")=" & lPageFindCnt(i) 117 Next i 118 Print #lFileNo, "合計(" & lCnt & ")件 " 119 Close #lFileNo 120 121 AcroExch_AVDoc_FindText1_Exit: 122 123 'PDFファイルを閉じます。 124 lRet = objAcroAVDoc.Close(1) 125 126 'Acrobatアプリケーションを終了する。 127 lRet = objAcroApp.Hide 128 lRet = objAcroApp.Exit 129 130 'オブジェクトを強制解放する 131 Set objAcroAVPageView = Nothing 132 Set objAcroPDDoc = Nothing 133 Set objAcroAVDoc = Nothing 134 Set objAcroApp = Nothing 135 136 End Sub


 Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
 


補足

  • 連続して次の文字列を検索したい時は
    lRet = objAcroAVDoc.FindText("Acrobat", 1, 1, 0)
    と第4引数を 0 にして使う。 ※サンプル②参照
  • 文字列の検索は以下のサンプルを見本にして下さい。
    AcroExch.HiliteList:Add メソッド
    https://pdf-file.nnn2.com/?p=175
    strText変数にPDF上の1ページ分の文字列が全て入っています。
    (PDFを見た感じとは異なり、フッダー、ヘッダー、本文の順と入っている場合有り)
    その文字列からVBAならInStr関数で検索します。

注意

  • FindTextメソッド間にSendKeysステートメントなどの命令を入れるとFindTextメソッドは正常に検索してくれません。
  • Showメソッドの位置に注意が必要です。
    Openメソッドの後にShowメソッドを使用しないと何もPDFドキュメントを開いていない画面が表示されたり、Test01.PDFが画面表示されない不具合が発生します。(Acrobat v8 v9 の場合)
  • 当サイトではFindTextメソッドの使用は推奨しません。
    理由① : EOFが戻り値に無いので、PDFページが1頁しか無い時に検索の終了判定が出来ない。
    理由② : FindTextメソッドが成功しても、その該当PDFページ番号を得れるとは限らない。
    理由③ : CPUに非常に負荷が掛かっている時に動作させると、検索をスキップしてしまう場合がマレに有る。
    ※テスト結果より。
  • FindTextメソッドを使用するには以下の条件が必要です。
    ① 2頁以上の頁を持つ
    ②CPUに負荷が掛かっていない
    ③ページ単位の関数カウントを行わない。※PDF全体の件数カウントはOK
  • Acrobat v6で検索対象文字列が無くても、lRet=-1(True)が返る。不具合みたいです。
    ※ゼロ件テスト要!

動作確認環境

  • Windows98SE( + WindowsUpdate)
    + Acrobat 4.0 + Office 2000
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 5.0.5 + Office 2003( + SP3)
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 6.0.3 Pro + Office 2003( + SP3)
  • WindowsXP Pro( + SP2 + WindowsUpdate)
    + Acrobat 7.0.9 Pro + Office 2003
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 7.1.4 Pro + Office 2003( + SP3)
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 8.2.2 Pro + Office 2003( + SP3)
  • WindowsXP Pro( + SP3 + WindowsUpdate)
    + Acrobat 9.3.2 Extended + Office 2003( + SP3)

Adobe Web 解説 URL(英語) v9.1

http://livedocs.adobe.com/acrobat_sdk/9.1/Acrobat9_1_HTMLHelp/IAC_API_OLE_Objects.103.37.html

戻る


キーボード

ブラウザ画面の文字サイズを変更するショートカットキー

  1. [ CTRL ] + [ + ]  :  文字を大きく

  2. [ CTRL ] + [ - ]  :  文字を小さく
Shortcut Keys

  1. [ CTRL ] + [ + ]  :  Up the font size

  2. [ CTRL ] + [ - ]  :  Down the font size

「AcroExch.AVDoc: FindText メソッド」への16件のフィードバック

  1. こちらのサイトはPDFプログラムに関する資料が豊富でとても助かっております。

    さっそくですが、FindTextメソッドの戻り値について質問ですが、
    文字列が検索できなくてもTrueが返ってきます。

    具体的には、下記のvbsスクリプトで試していますが、
    「あああ」のないPDFで試しても
    Trueが返ってきます。

    よろしければご教授願います。

    'ファイル名を取得
    FileName = WScript.Arguments(0)

    'ドキュメントを開く
    Set AVDoc1 = CreateObject("AcroExch.AVDoc")
    Ret = AVDoc1.Open(FileName,"")

    'Acrobatを起動
    Set objAcroApp = CreateObject("AcroExch.App")
    Ret = objAcroApp.Show

    '文字の検索
    'PDFドキュメントの先頭ページから文字列検索する
    KensakuText = "あああ"

    Ret = AVDoc1.FindText(KensakuText, False, False, True)

      '戻り値を確認
    MsgBox TextKensaku & "--- return = " & Ret

    AVDoc1.Close 1
    Set AVDoc1 = Nothing
    objAcroApp.Hide
    objAcroApp.Exit

    [環境]
    WindowsXP Pro SP3
    Acrobat 6.0 Professional
    バージョン 6.0.3.2004113000
    Acrobat Reader
    バージョン 9.3.3.177

  2. Hideoさん。初めまして。

    Acrobat v6 では確かにTrueが返ってきます。
    Acrobat v8 ではFalseが返ってきます。
    ゼロ検索テストは上記では確認していませんでした。(恥

    困りましたね。
    と言うか、このFindTextメソッド関連で他の人から質問を受けていて、回答保留中です。
    結局は使うのを諦めました。
    非常に癖があり、FindText出来たからといって、その結果が思わしくないからです。
    結論から言うと「使うのは推奨できません」と出しました。

    それで逃げ手ですが以下のURLのサンプルを見てください。

    AcroExch.HiliteList:Add メソッド
    http://pdf-file.nnn2.com/?p=175

    Acrobat v6環境での動作確認済みです。
    このサンプルのstrText変数にPDF上の1ページ分の文字列が全て入っています。
    (PDFを見た感じとは異なり、フッダー、ヘッダー、本文の順と入っている場合有り)
    その文字列からVBAならInStr関数で検索します。

    回答になっているでしょうか。

  3. ありがとうございました!
    ご教授の通りでバッチリです。

    サンプルのURLを参考に
    HiliteList:Add メソッドとInstr関数の
    組み合わせで上手くできました。

  4. こちらのサイトにはVBAでPDFのコーディングするのに非常に勉強になります。
    FindTextについて、どうしてもわからず質問させていただきます。
    開発はwin7,office2007,DC proを使用しています。
    やりたいことは、FindTextのサンプル2の内容そのままで、数百ページあるPDFから指定した文字列が、何ページにあるか調べるプログラムです。
    サンプル2をそのままで見事にやりたいことができたのですが、検索文字列にPDFファイルにない文字列で検索をすると「別のアプリケーションが OLE の操作を完了するのには待機しています。」が出て検索ができなくなります。
    on error gotoでもエラーにならず、また、FindTextの次の行にMsgBoxを記載しても何も表示されないので、FindTextが戻ってこないのかと考えています。
    何か原因をご存知であれば御教授していただけないでしょうか。
    宜しくお願い致します

  5. PDF初心者プログラマー さん
    はじめまして
    取り急ぎ、思い出せる範囲で返答させて頂きます。

    Acrobat DC 環境が無く、その他の確認環境も今は起動できないので・・すが。

    そのメッセージはOLEから制御が長く帰ってこない時にOSが出しているメッセージです。基本的に待つしか手がないです。このメッセージが出る時はプログラムの不具合、又はAcrobat上でのバグの場合も有ります。今回はDCのバグっぽいです、が。

    対処1) プログラムのバグの場合
    objAcroApp.CloseAllDocs
    上記の命令をどのOLEを実行する前に実行して下さい。
    例えばサンプル②の場合は
    lRet = objAcroAVDoc.Open(CON_PDF_FILE, "")
    の前にです。
    何らかの不具合でPDFファイルがオープン済みになってると次の実行時に変なエラーが出ます。CloseAllDocs メソッドで強制的に開いているPDFを閉じてしまいます。開いてなくてもエラーにもならないので邪魔にはなりません。オマジナイ的な命令です。

    対処2) 対処1でもダメな時は。
    逃げ手ですが、以下のサンプルを御覧ください。
    AcroExch.HiliteList:Add メソッド
    上記でページ上のテキストが取得できるはずです。
    それで事前にチャックスする。
    ただ、日本語文字列も取得できたかが、・・思い出せない。(恥
    ひょっとしたらコッチのサンプルの方が処理速度が早いかもしれません。
    ご確認ください。

    少しでも解決につながれば幸いです。

  6. 対処1では無理でした。
    なので、対処2で何とか対応ができました。
    検索文字があれば上手くいくのに、バグなんですかね?
    何かモヤモヤしますが。
    結果できたので、ありがとうございました。

  7. はじめまして。
    サンプル2がとても欲しかったものなので、役にたたせていただいております。
    初心者で申し訳ありません。

    1つではなく、複数の文字列を検索したいと思料しております。
    どのように組んだらよろしいのかご教授いただけませんでしょうか。
    何卒よろしくお願いいたしますm(_ _)m

  8. 全くの初心者OL さん 
    はじめまして。
    こちらの返答には少し時間が掛かります。(思い出すのに・・
    その間に、以下の返答を頂けると助かります。

    Q1)FindTextを使用する理由は、検索文字列をAcrobatの画面上で選択した状態で見たいからでしょうか? それともただ検索できれば良いと思っているだけなのでしょうか?  それともそれ以外の理由が有るのでしょうか?
    Q2)PDFは英文のみ、日本語のみ、英文+日本語の混在、どれでしょうか?
    Q3)検索文字列(2文字以上)がページにまたがることは有るのでしょうか?

    上記以外に公開できる情報を頂ければ、更に助かります。

  9. 管理人様
    ご返答をありがとうございます。

    Q1)FindTextを使用する理由は、検索文字列をAcrobatの画面上で選択した状態で見たいからでしょうか? それともただ検索できれば良いと思っているだけなのでしょうか?  それともそれ以外の理由が有るのでしょうか?

      選択した状態でみれなくて大丈夫です。
      ただ、複数の文字列 (ex)A工場、B工 
      場、、、と検索できると嬉しいです。
      A工場 合計3
      B 工場 合計0
      C 工場 合計2
    、、、と出せますと嬉しいです。
     合計カウントだけで大丈夫でございます。

    Q2)PDFは英文のみ、日本語のみ、英文+日本語の混在、どれでしょうか?

     日本語のみになります。

    Q3)検索文字列(2文字以上)がページにまたがることは有るのでしょうか?

     はい可能性がございます。

    大変恐れいりますm(_ _)m
    何卒よろしくお願い申し上げますm(_ _)m

  10. 管理人様

    ご返答をありがとうございます。
    先ほどの返答がみにくかったので改めます

    ご質問につきましてで下記をお願いいたします。

    Q1)ただ、検索できれば大丈夫でございます。
    例)
    あいうえお工場、かきくけこ所、、を検索

    結果)
    あいうえお工場 合計3
    かきくけこ所 合計0

    上記のようにだせたら有難いです。

    Q2)日本語のみです。

    Q3)またがる可能性はございます。
    そのため、完全一致ではなく、あいうえおを含むとかで検索できますでしょうか。

    本当にお手数をおかけいたします。
    おてすきのときにご教授いただけますと幸いです。
    よろしくお願い申し上げます。

  11. 全くの初心者OL さんへ。
    大分思い出して来て、全体が見えてきましたが、・・。(汗

    その前に、更に質問です。
    Q4)「ヘッダー」、「フッター」、「ページ番号」に相当する部分はPDF上に存在しますか?
    通常は有りですが、有るとQ3の対応は難しいです。

    以下はQ3には未対応です。
    001 Option Explicit
    002
    003 Sub Main1()
    004
    005 Dim Dstart As Double: Dstart = Timer
    006
    007 Dim sSearchKey(3) As String
    008 Dim sSearchCnt(3) As Long
    009 Dim sTexts(10000) As String
    010 Dim sTempTextFile As String
    011 Dim bRet As Boolean
    012
    013 '検索キー
    014 ' sSearchKey(0) = "あいうえお工場"
    015 ' sSearchKey(1) = "かきくけこ所"
    016 ' sSearchKey(2) = "A工場"
    017 ' sSearchKey(3) = "B工場"
    018 sSearchKey(0) = "ディスプレイ"
    019 sSearchKey(1) = "Acrobat"
    020 sSearchKey(2) = "環境設定"
    021 sSearchKey(3) = "階層"
    022 Erase sSearchCnt
    023
    024 '一時的な作業用テキストファイルの指定
    025 sTempTextFile = ThisWorkbook.Path & "\Main1-" & _
    026 Format(Now, "YYYY-MMDD-hhmmss") & ".txt"
    027
    028 'PDF内のテキストをテキストファイルに出力
    029 Dim sInPdfFile As String
    030 sInPdfFile = "D:\Text\IN.pdf"
    031 bRet = GetText_FromPdf(sInPdfFile, sTempTextFile)
    032
    033 'テキストファイルを配列に取り込む
    034 Dim lOutCnt As Long
    035 Erase sTexts
    036 Call ReadTextFile(sTempTextFile, sTexts, lOutCnt)
    037
    038 '不要な情報を削除(1)
    039 Dim i1 As Long
    040 For i1 = 0 To lOutCnt
    041 sTexts(i1) = Replace(sTexts(i1), vbCrLf, "")
    042 sTexts(i1) = Replace(sTexts(i1), vbLf, "")
    043 sTexts(i1) = Replace(sTexts(i1), vbCr, "")
    044 Next i1
    045
    046 '不要な情報を削除(2)
    047 Dim lNumCnt As Long
    048 lNumCnt = 0
    049 For i1 = 0 To lOutCnt
    050 '数字のみは削除 ※例:ページ番号
    051 If IsNumeric(sTexts(i1)) Then
    052 sTexts(i1) = ""
    053 lNumCnt = lNumCnt + 1
    054 End If
    055 Next i1
    056 Debug.Print "数字のみの削除件数=" & lNumCnt
    057
    058 '検索
    059 Dim i2 As Long
    060 For i2 = 0 To UBound(sSearchKey)
    061 For i1 = 0 To lOutCnt
    062 If InStr(sTexts(i1), sSearchKey(i2)) > 0 Then
    063 sSearchCnt(i2) = sSearchCnt(i2) + 1
    064 End If
    065 Next i1
    066 Next i2
    067
    068 '結果
    069 For i2 = 0 To UBound(sSearchKey)
    070 Debug.Print i2 & " " & sSearchKey(i2) & "=(" & sSearchCnt(i2) & ")"
    071 Next i2
    072
    073 '作業用テキストファイルを削除
    074 ' Kill sTempTextFile
    075
    076 Debug.Print "処理時間 = " & Timer - Dstart
    077 MsgBox "End"
    078 End Sub
    079
    080
    081 '**************************************************
    082 ' PDF内のテキストをテキストファイルに出力
    083 ' 参照:http://pdf-file.nnn2.com/?p=239
    084
    085 Function GetText_FromPdf( _
    086 ByVal sInPdfFile As String, _
    087 ByVal sOutTextFile As String) As Boolean
    088
    089 If Dir$(sInPdfFile, vbNormal) = "" Then
    090 MsgBox sInPdfFile & vbCrLf & _
    091 "このPDFファイルは存在しません!" & vbCrLf & _
    092 "処理は実行されませんでした。", _
    093 vbOKOnly + vbCritical, "実行エラー"
    094 GetText_FromPdf = False
    095 Exit Function
    096 End If
    097
    098 Dim objAcroApp As New Acrobat.AcroApp
    099 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
    100 Dim objAcroPDDoc As Acrobat.AcroPDDoc
    101 Dim lRet As Long
    102 Dim jso As Object
    103
    104 'Acrobatアプリケーションを起動する。
    105 ' lRet = objAcroApp.Show
    106 'PDFファイルを開いて表示する。
    107 lRet = objAcroAVDoc.Open(sInPdfFile, "")
    108 'PDDocオブジェクトを取得する
    109 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
    110 'JavaScriptオブジェクトを作成する。
    111 Set jso = objAcroPDDoc.GetJSObject
    112
    113 '▼PDFをプレーンテキストに変換する。
    114 jso.SaveAs sOutTextFile, _
    115 "com.adobe.acrobat.plain-text"
    116
    117 'PDFファイルを閉じます。
    118 lRet = objAcroAVDoc.Close(1)
    119 'Acrobatアプリケーションを終了する。
    120 lRet = objAcroApp.Hide
    121 lRet = objAcroApp.Exit
    122 'オブジェクトを強制開放する。
    123 Set objAcroPDDoc = Nothing
    124 Set objAcroAVDoc = Nothing
    125 Set objAcroApp = Nothing
    126
    127 GetText_FromPdf = True
    128 End Function
    129
    130 '**************************************************
    131 ' テキストファイル(UTF-8形式)を配列に取り込む
    132 ' 参照:http://officetanaka.net/excel/vba/file/file10.htm
    133
    134 Sub ReadTextFile( _
    135 ByVal sInTextFile As String, _
    136 ByRef sTexts() As String, _
    137 ByRef lOutCnt As Long)
    138
    139 Dim sBuf As String
    140 lOutCnt = -1
    141 Erase sTexts
    142 With CreateObject("ADODB.Stream")
    143 .Charset = "UTF-8"
    144 .Open
    145 .LoadFromFile sInTextFile
    146 Do Until .EOS
    147 '※1行ずつ読み込むときは「-2」を指定
    148 sBuf = .ReadText(-2)
    149 lOutCnt = lOutCnt + 1
    150 sTexts(lOutCnt) = sBuf
    151 Loop
    152 .Close
    153 End With
    154 End Sub

    ▼2022/02/13 19:23 追加
    いろいろな所からコピペして来たので、やや汚いコードですが、目をつぶってください。
    Q3対応は出来ない訳では無いですが、・・・(非常に難しい)。この件はもう少し考えて整理して、後日にコメントを追加します。

  12. 管理人様

    本当にありがとうございます。

    テキストに変換して、検索し、取り込む
    という理解でよろしいでしょうか。
    ありがとうございます。

    下記のところで、で実行エラー ー2147024809(80070057)パラメーターが間違っています。
    と出てしまいます。

    '※1行ずつ読み込むときは「-2」を指定
    sBuf = .ReadText(-2)
    何か、回避する方法はありますでしょうか。
    何から何まですいません。。

  13. 全くの初心者OL さんへ。

    Q-1) 参照設定はしてますか?
    Q-2) 念の為に、もう一度コピペして、ロジックを取り込んでください。

    Q-3)Excelファイルがマクロ実行タイプ(=VBAが実行できるタイプ)になっていません。
    Excelファイルを再度、別名で保存し、その時に「ファイルの種類」を「Excel マクロ有効ブック(*.xlsm)」にしてください。★<-多分、これが原因です。

    こうゆう時は「2147024809 VBA」でネット検索すると理由と対策がわかります。

  14. 管理人様

    ご丁寧なご教授をありがとうございます。
    参照も設定していますし、マクロエクセル
    にもしているのですが、、、、。
    再度作り直しても同じメッセージが。
    ちなみにacrobat 10です。
    研究してみます。

    本当に色々とありがとうございます。
    こちらが使えるようになると作業が
    かなり楽になるのでたすかります。
    本当にありがとうございましたm(_ _)m

  15. 全くの初心者OL さんへ。

    PCをシャットダウンして、お茶の時間にしてください。
    一度、離れると見なかったモノが見える場合が有ります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA



SAMURAI Plugin

コメントをする時は出来れば以下もお願いします。

  • OS名 バージョン
  • Acrobat バージョン
  • ツール(Excel等) バージョン
コメントにサンプルコードを入れる時はコードを全て全角文字列にしてください。コチラで半角に戻します。それでもエラーが回避できない時はコメント下さい。個別に対処します。



お仕事で当サイトを見ている方へ
考え込んだら、ご質問下さい。
一緒に解決策を考えましょう。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください