大変失礼いたしました。, 今回私が行いたいのは、 Debug.Print "PDFファイルはパスワードで保護されている。" ' ページの削除は出来ない。 Const CON_FILE = "I:\AcroPDDoc\Open\NoPassword-1.pdf" ここで「抽出」の保護が有れば、エラー扱いにします。, ⑤ AのPDFを別名で保存します。 'PDFをアクセステキスト(accesstext)に変換する。 'PDFをアクセステキスト(accesstext)に変換する。 です。, 7/29にいただいたご回答(2ページ目以降を削除できるかどうかで、保護状況を確認する)で、 jso.SaveAs CON_TEXT1, "com.adobe.acrobat.accesstext" 取り急ぎ、お礼を申し上げます。 Set objAcroPDDocNew = Nothing 「PDFの1ページ目をテキスト化し、保存すること」 本当にありがとうございました。 End If の2種類対応版です。, 正確にPDFの文書プロパティの保護情報を調べたいときは上記のOLEを使用したサンプルでは無理です。 If lRet = 0 Then (3,4ファイル試しただけで、この方法ですべてのファイルの保護状況を確認できるかは疑問です), 最後の段落の内容があまりに突飛なため混乱させてしまったかと思います。 Set objAcroPDDoc = Nothing lPageCnt の内容を見て処理をすればイイと思います。, そちらのロジックですと、 とすればイイのでは? lRet = objAcroPDDoc.Close If lRet = 0 Then End If 関数:PDFの文書プロパティ(概要)を更新 タイトル、サブタイトル、作成者、キーワード、著作権情報 を更新します。 7. '2ページ目から最後までを削除する という内容でした。 コメントをする時は出来れば以下もお願いします。, このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。, 関数:Acrobat , Adobe Reader のインストールパスとバージョンを取得, 「ウインドウオプション」 の [ページにウインドウサイズを合わせる], [ウインドウを画面中央に配置], [フルスクリーンモードで開く], [表示], 「ユーザーインターフェースオプション」 の [メニューバーを非表示], [ツールバーを非表示], [ウインドウコントロールを非表示], テストの時はタスクマネージャーを起動して、テスト完了後はAcrobatプロセスが消えている事を確認して下さい。. ※上記例のtext.txtの内容を読み込んで判断する。, 2ページ以上のPDFファイルについては今回お教えいただいたコードで希望の動作となることを確認いたしました。, ただし、1ページのPDFファイルのときは保護されていなくてもエラーとなってしまうので、似たようなロジックで回避してみました。 別途、コマンドラインの別ソフトが必要になる場合が有ります。 貼り付けるときは位置やページが指定できます。, コチラ(-stamp-on、-stamp-under、-scale-stamp-to-fit)を御覧ください。, はじめまして。ゆうすけといいます。 最初から読み返してみました。, >・・保護のかかったPDFファイル・・・・エラーポップアップが出て止まってしまいます。, >・・1ページのPDFファイルのときは保護されていなくてもエラーとなってしまう・・, この意味が不明です。なぜ保存する必要が有るのか? 現在はその手法のドキュメント化(HTML)作業を行っています。 とエラーポップアップが出て止まってしまいます。, 保護ファイルはテキスト化できなくて問題ないので、 もしご存知でしたらご教示いただけますと幸いです。, このページのサンプルの以下のコードの下に、 ご回答いただければ幸いです。, OS名 バージョン:Win7/Win10 唯一知っているPDFのテキスト化ソフトに「読んde! End Sub, ① ゼロページの空のPDFを仮に作ります。 ③保護なし単ページPDF⇒【テキスト化】 If lRet = 0 Then Dim objAcroPDDoc As New Acrobat.AcroPDDoc 別名で保存する時は引数に「&H1」が必要です。無いと別名は無視されて上書きされます。, ⑥ は保険です。 テキスト化(のみ)が目的と思っていたのですが・・。, サンプルは上書きしないで閉じています。 1についてはAPPからMenuItemExecuteでどうにか対応できると思います。が、2-5についてはどのObjectを使えばいいのか、からしき見当がつきません。PDAnnotがあやしいのかな?とは思いますが、いまいちという感じ。 はりつけられたイメージはSTAMP扱いとなっているところまでは、分かるのですが.... 当サイトにはメチャムチャ難問です。 なお、ページの削除をするので当ページのサンプルのように保存しないで閉じて下さい。 lRet = objAcroPDDoc.DeletePages(1, lPageCnt - 1) Adobe Acrobat ReaderではなくAdobe Acrobatが必用な方法はあったのですが、なかなかAdobe Acrobatを持っているケースも少ないものかと思いますし、できることならなんとか無料でやってしまいと思うのが人の性ではないでしょうか・・・, さらにこういう場合、フォルダ内にある全PDFを一括で処理したいというニーズもあるかと思います。, のサイトにあるpdftool.dllを使うことで無料で簡単にエクセルVBAでフォルダ内の全PDFファイルをテキスト化してしまえる方法をご紹介いたします。, 細かい注意事項などはコチラを確認→http://www.petitmonte.com/excel/excel_tips_11.html ' ページの削除は出来ない。 Set jso = Nothing Kill SAVE_FILE lRet = objAcroPDDoc.DeletePages(1, 1) の質問です。, <2020/03/13 21:09 追加> 「&H20で保存できるかどうかで、保護状況を確認する」と変更したら③もクリアできそうです、 End If 関数:Windows のデフォルトプリンターを取得 デバイスに登録されている … Q3)移動先も変化する? ②保護あり複数ページPDF⇒スキップ 以下を追加します。 Q1)元のサイズは多種多様? 動かした時に分かるのか? ※無理だと思うのですが・・ If lRet = 0 Then Const CON_FILE = "I:¥AcroPDDoc¥Open\PasswordCopy.pdf"
'⑤ PDFを保存する。 If objAcroPDDoc.GetNumPages() > 1 Then 申し訳ございませんでした。, 現在の質問としては、「保護状況を確認するためにもう少しいい方法はないか」でございます。 objAcroPDDoc.GetNumPages()の結果が入ったlPageCnt にページ数が入っているので、1ページ以上の時のみ実行する。 GoTo Skip_01: Excel VABで、既存のPDF(パスワードなし)にパスワードを設定しようとしています。 コメントをする時は出来れば以下もお願いします。, このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。, Acrobat JavaScript における「Safe Path」についての注意事項, 上記サンプルでは objAcroApp.Show でAcrobatアプリ本体を起動表示しています。, Acrobat SDK 8.1 に書かれているSaveAsメソッドの第2引数の説明が一部間違っています。. Acrobat とPDF を Excel VBAから操作する関数とサンプルの一覧です。, IAC からだけでは限界があります。そこでVBAから起動連携が出来る、少し有効なソフトと思われるものを一部紹介します。, PDFへの高度なセキュリティ設定が出来るコマンドラインのフリーソフトです。業務ソフトではなく、PDFの開発者向けソフトで有る点が特徴です。このソフトの紹介はココです。, Xpdf 3.0 をペースに機能拡張したコマンドラインのフリーソフトです。PDFからメタデータ、各種セキュリティ設定、添付ファイル、フォント、テキスト等の情報を抽出します。更にHTML、各種画像への変換もできます。このソフトの機能を使っているソフトが今増えています。このソフトの紹介はココです。, コマンドラインのフリーソフトです。PDFからメタデータ、各種セキュリティ設定、添付ファイル、フォント、テキスト等の情報を抽出します。更にHTML、各種画像への変換もできます。開発は2年前に終了してますが、非常に安定動作します。このソフトの紹介はココです。, はじめまして。 LA在住の山本と申します。 というファイルがあります。, 「Microsoft Visual Basic for Applications」という画面がでてくるかと思います。, そして、「プロジェクト-VBAProject」という画面(標準モジュールとか書かれているもの)が表示されているか確認してください。, 標準モジュールというところで右クリックをすると画像のように「ファイルのインポート」というのが表示されます。, そこで先ほどダウンロードしておいた「pdf2txt.bas」のファイルをインポートしてください。, 動かしてみると、PDFの入っているフォルダを指定することができ元のファイルも残したまま、元のファイル名.txtのファイルが同じフォルダに作成されます。, 後は、テキストファイルから特定の文字が入っているか検索してみたり、特定の文字だけ抜き出してみたり等々いろいろな処理が行えると思います。, このあたりを選択していれば動作するはずです。(いらないものもありそうですが、検証するのが面倒ですみませんw). Qpdf等を使用することを検討します。 Const CON_TEXT1 = "I:\AcroPDDoc\Open\text1.txt" 先に手作業で何も無いPDF上に画像を貼り付け、サイズや回転をさせた状態で用意します。それをスタンプ用PDFとします。 lRet = objAcroPDDoc.Save(&H1 + &H20, SAVE_FILE) ①②③はOKですが、④のパターンでエラーメッセージが出てしまいます。 関数:「PDFのバージョン」を取得する 2. 「この操作は、この文書では許可されていません。」 Skip_01: jso.SaveAs CON_TEXT2, "com.adobe.acrobat.plain-text" Dim objAcroPDDocNew As New Acrobat.AcroPDDoc ・PDF文書のコピー&編集に付いたパスワード付き Skip_02: '① 空(0ページ)のPDFファイルを作成する 画像ごとにスタンプ用PDFは複数用意しておきます。 クリップボードに入っている画像イメージがあります。, 1.このイメージをPDF上に貼り付け。 Const CON_TEXT2 = "I:\AcroPDDoc\Open\text2.txt" Dim lPageCnt As Long Const CON_TEXT2 = "I:¥AcroPDDoc¥text2.txt" エクセルのVBAを使えるようになるといろいろな作業を自動化できたりするのですが会社で 内勤なんかしてるとPDFファイル内のテキストを抽出したり、検索したり、加工したりしたいということがあるかもしれません。 ネットでいろいろ探してみるもすぐに見つかるのは Adobe Acrobat Readerで … 'PDFをプレーンテキスト(plain-text)に変換する。 そのスタンプ用PDFを目的のPDFの上(又は下)にスタンプ扱いで貼り付ける。 !ココ」が有りますが、2012年9月30日を持って当ソフトは販売終了となりました。 Kill CON_TEXT2 jso.SaveAs CON_TEXT2, "com.adobe.acrobat.plain-text" 実行速度の観点からQpdfはなるべく避けたいと考えています。, Sub Call_PrintSave() 関数:PDFからメタデータ(XMP)を抽出する 6. 「編集」の保護がかかっている場合は保存したテキストとPDFを削除します。 End If 「抽出(コピー)」出来て、「編集(削除)」が出来ないPDFには出会ったことは無いですが、100%無いと言う保証はないので入れました。不要ならば削除して下さい。 Qpdf等の外部ツールが必要になります。, 確認遅くなってすみません。 Acrobat:Adobe Acrobat 8 professional また、よろしくお願いいたします。, 質問なのですが、PDFの先頭ページのみをテキスト化する方法はございますでしょうか。 (adsbygoogle = window.adsbygoogle || []).push({}); このサイトから あの電話占い最大手ヴェルニの電話占いサービス 期間限定特典付で無料登録できるようになりました。, ちょっと人には言えないようなお悩みをお持ちの方はぜひ、無料登録&お試ししてみてください。, Instagram(インスタグラム) 規約違反しない画像はここにあった! ロゴ、バナー、スクショなど, Instagram(インスタグラム) フォローボタン&公式バナーを作成!ワードプレスにも楽々設置OK, A4いっぱいに数字やアルファベットを楽々印刷する方法 wordワード・excelエクセル, ※こちらで用意しているファイルの中身もこのサイトから引用させていただいております。. こればかりは仕方ないですね。, 根気強くご説明いただき、大変感謝しております。 Qpdfというツールを使用すればできそうに思うのですが、それを使わずに、既存のオブジェクトだけで処理することは不可能でしょうか? GoTo Skip_02: PDFファイルからEXCELに内容(テキスト)を読み込みたいことってありますよね。 PDFファイルを開いて、範囲を選択して、コピーして、EXCELに戻ってペースト。 こういう作業は少しのファイル数ならがんばれますが、数十、数百というファイルを対象にするには大変です。 本記事では、「VBA … http://pdf-file.nnn2.com/ 初めてメールします。アクロバットプロ11で大量のTIFファイルをPDF化しOCRをかけようとしています。アクションウィザードを使えば、一つのフォルダーの中にある全てのファイルに対し、上記の処理はできます。ところが、なぜか、OCRができないファイルがあるために、そこで、ファイルが開いたまま止まってしまいます。原因はよくわかりません。そこで、VBAでOCRをかけ、もしも、30分以上、かかってもOCRが終了しない場合は、とっとと、次のファイルのOCRをするようなプログラムを組めないかと思っています。あるいは、もっと、良い手軽かもしれませんが、教えてください。よろしくお願いいたします。, VBA等の言語に関係無く、AcrobatのOCR機能部分をプログラミング操作できる命令等の部分は見つかりません。 回答ありがとうございます。やはり無理なのですね。 「ただし、保護がかかっているPDFについてはスキップすること」 Skip_01: 当サイトで汎用的に使える共通関数を紹介します。 1. Q2)回転も多種多様? Debug.Print "PDFは保護されていて編集(ページ削除)は出来ない。" Sub CommandButton21_Click() End Sub, ・PDFファイルを開くときのパスワード付き '※PDF文書はセキュリティ(パスワード)で保護されているので どこで上書きするのでしょうか?, こちらの提示したサンプルは全ての要件を満たしておりません。 ”objAcroPDDoc.Open(CON_FILE)” の部分で若干動作がもたつく傾向がありますが、 ※例:qpdf.exe xxx.pdf --show-encryption > text.txt 'PDFをプレーンテキスト(plain-text)に変換する。 'PDF文書はセキュリティ(パスワード)で保護されているので となり③のパターンでテキスト化できませんでした。, 7/31にいただいたロジックを含めると lRet = objAcroPDDoc.DeletePages(1, lPageCnt - 1) 「2ページ目以降を削除できるかどうかで、保護状況を確認する」を もし、1ページのファイルに対しても使えるロジックをなにかご存知でしたら、再三で恐縮ですがお教えいただけると非常に助かります。, ~ pdftool.dllというファイルを使用するエクセルファイル(VBAを書いて動作させる)と同じフォルダにいれます。, こちらもダウンロードして中を見ると Set jso = objAcroPDDocNew.GetJSObject 3.貼り付けたイメージのサイズを変更。 すこし時間を置いて、もう一度最初からコメントを見直すつもりです。, 読み返してみましたが、私の説明が明らかに不足しておりました。 pdf2txt.bas ④保護あり単ページPDF⇒スキップ Qpdfを使って厳密に保護情報をチェックしない場合は、少しカッコ悪い形ですが、処理速度を考えると、こうなるのかな?、と思いました。, お世話になっております。 GoTo Skip_02: VBA使いです。(その他の言語は殆どわからない。), 1つご存じであれば教えてください。
「読取革命」と言うOCRソフトも有るらしいですが使った事を無いので仕様等は不明です。, 以前から検討していた事が有り、現在はその手段が見つかっています。 (貴サイトにあるものを色々試しましたが、今のところ使えそうなのがSaveメソッドしか見つかりませんでした。。), ファイルが上書きされてしまうのが難点ですが、一旦別のフォルダにコピーしてから実行すればいいので最悪これでもいいかなと思っております。 SAMURAI Plugin
lRet = objAcroPDDoc.Save(&H20, "C:\Users\temporary.pdf") 'なぜか~~.pdfで上書きされてしまう OCR処理でフリーズ?した場合にスキップ処理をさせたいという部分は理解できますが。, TIFからPDFへ変換して、そのPDF上の文字画像をテキスト化をするにはAcrobat以外に選択肢は無いでしょう。 End If のいずれかで対応したいのですが、プログラムをお教えいただけませんでしょうか。, また、先ほどは記載しておらず申し訳ございませんでしたが、私の環境は以下となります。 でポップアップを回避できなくなってしまうので断念いたしました。。, どうやら、私がうまく質問内容を理解できてないみたいです。 ツール(Excel等) バージョン:Excel2016, 「既存のオブジェクト」=Acrobat OLE(IAC)だけでPDFにパスワードを設定するのは「不可能」です。 lRet = objAcroPDDocNew.Create() ' ページの抽出(コピー)は出来ない。 '⑥ 保護(ページの編集)のチェックを行う。 2.貼り付けたイメージを選択。 おかげさまでようやく意図していた動作を確認することができました。 2ページ目以降を削除しているのは、テキスト化するときにページ指定が出来ないので、その対処方法としてです。削除したPDFを保存する必要は無いです。サンプルは保存せずに閉じています。, と書きましたが、「何か私が見落としている」のでしょう。 Set jso = Nothing OLEではゼロページのPDFを基本的に許しませんが、ココだけはOKです。, ③ AのPDFの1ページ目を空のPDFへコピーします。 ※こちらで用意しているファイルの中身もこのサイトから引用させていただいております。, pdftool.zip Debug.Print "PDFの編集は出来ない。" 代替案も含めて考えてみます。 アクションウイザードの処理部分もプログラミング操作等が出来ないかと再調査しましたが、出来ないと、言うより出来る方法が見つかりませんでした。 テキスト化まで動作確認してないですが、多分大丈夫でしょう。, もう1点質問なのですが、保護のかかったPDFファイル(開いたときにウィンドウ枠に 「~(ファイル名)~.pdf(保護) 」と出るタイプ)をテキスト化しようとすると、 Option Explicit Skip_02: Dim jso As Object Dim lRet As Long '④ 1ページ目からテキストを取り出す End If Acrobat バージョン:Acrobat9 If lRet = 0 Then lRet = objAcroPDDoc.DeletePages(1, objAcroPDDoc.GetNumPages() - 1), 詳細はAcroExch.PDDoc: DeletePages メソッドを御覧ください。 関数:Acrobat , Adobe Reader のインストールパスとバージョンを取得 4. '以前に保存したファイルを削除する 'このPDFは文書を開くときにパスワードが必要です。 Const SAVE_FILE = "I:\AcroPDDoc\Open\temporary.pdf" というファイルがダウンロードされましたら中にある (ただし、この確認を行う過程でPDFが上書きされてしまう) Dim jso As Object Debug.Print "PDFファイルはパスワードで保護されている。" lRet = objAcroPDDoc.Open(CON_FILE) 1ページしかない&保護されているPDF 機能が存在しません。 5.イメージを最終のポジションに移動。. lRet = objAcroPDDocNew.Close() Set objAcroPDDoc = Nothing lRet = objAcroPDDocNew.InsertPages(-1, objAcroPDDoc, 0, 1, False) 関数:PDFファイルを完全にチェックする 3. プログラムコードを記載したところエラーになってしまいましたが、 「lRet = objAcroPDDoc.DeletePages(1, lPageCnt - 1)」の下に, '別名でPDFファイルを保存する 関数:PDFを特定のフォーマットに変換する 5. lPageCnt = objAcroPDDoc.GetNumPages() をめちゃくちゃ活用させていただいています。 そのあたりはこちらのサイトを参考にさせて頂きます。, 出来るだけ早く返答する様には心がけています。が、遅くなる時もありますのでご了承ください。
'2ページ目のみ削除する。※時間の短縮 SAMURAI Plugin
Excel:2016, 以下をお試し下さい。 '※PDF文書はセキュリティ(パスワード)で保護されているので End If 4.サイズが変更されたイメージを若干回転させる。 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc() を追加しました。, If lPageCnt > 1 Then lRet = objAcroPDDoc.Close ' ページの抽出(コピー)は出来ない。 Debug.Print "PDFは保護されていて抽出は出来ない。" GoTo Skip_01: End If '④ 1ページ目からテキストを取り出す Set jso = objAcroPDDocNew.GetJSObject 'PDFをアクセステキスト(accesstext)に変換する。 Set jso = objAcroPDDoc.GetJSObject ①SaveAs メソッドの前に保護されているかどうか確認するif文を設定する 内勤なんかしてるとPDFファイル内のテキストを抽出したり、検索したり、加工したりしたいということがあるかもしれません。, ネットでいろいろ探してみるもすぐに見つかるのは Dim lRet As Long lRet = objAcroPDDoc.Close ②エラーが出た後にポップアップを消すプログラムを入れる '② 処理対象のPDFを開く GoTo Skip_01: それと同じ手法を使えばOCRの起動と稼働の監視が可能かもしれません。, 但し、Acrobat 11 に関してはアクション処理自体の仕様が下位バージョンと基本的に変わっているので、手法は同じですがプログラミング操作に関しては再検討(再作成)する必要が有る状態です。, tiffを直接OCRにかけてはいけないのでしょうか。モノクロ2階調の印刷した文字なら、私見ではわりと優秀ですし、MSOfficeにもれなくついてきます。, http://office.microsoft.com/ja-jp/help/HP003083269.aspx, いろいろとアドバイスありがとうございます。 '③ 1ページ目を取り出し、空のPDFへ入れる(コピーする) OS:Windows 10 64bit Const CON_TEXT1 = "I:¥AcroPDDoc¥text1.txt" と言っても「出来る」かはテストして見ないと分かりません。, 1ヶ月前からのテストで、Acrobat 10 以下のバージョンのアクション処理(バッチ処理)のプログラミング操作が可能な状態になっています。 ("If lPageCnt > 1 Then" にひっかからず、テキスト変換まで進んでしまう), 7/31のコメントの意味としては、 お時間を下さい。, それと、質問です。画像の またなにかございましたら相談させてください。, 出来るだけ早く返答する様には心がけています。が、遅くなる時もありますのでご了承ください。
' ※この処理は保険です。 Kill CON_TEXT1 エクセルのVBAを使えるようになるといろいろな作業を自動化できたりするのですが会社で 事前に分かっている事は無いのかな、事前に準備は出来ないのか、 Dim objAcroPDDoc As New Acrobat.AcroPDDoc ※今でも大事に使ってますが(汗 jso.SaveAs CON_TEXT1, "com.adobe.acrobat.accesstext" いろいろと試してみます。 lRet = objAcroPDDoc.Open(CON_FILE) '※このPDFは文書を開くときにパスワードが必要です。 Debug.Print "PDFは保護されていて抽出は出来ない。" ①保護なし複数ページPDF⇒テキスト化