TOP > サンプル / 関数 > PDFをHTMLに変換する方法/2 [...]
はじめに
PDFのHTML変換に関しては
を参考にして下さい。
当ページのサンプルは不適切です。
しかし、この様な事も出来る、と言う意味で残して置きます。
前回のサンプルを改良したものです。
説明
PDFをHTMLに変換します。
Acrobat OLEとExcel VBAの機能を利用します。
まず、Acrobat OLEでPDFを開きます。
次にAcrobatのファイルメニューにある「名前を付けて保存」をショートカットキーで開きます。
これはVBAのSendKeysステートメントを利用します。
それに対して、更にSendKeysステートメントを使って「名前を付けて保存」ダイアログ画面の「ファイルの種類」を「HTML」にして「保存」ボタンをクリックします。
このスクリプトが実行中はパソコンを操作しては絶対ダメです。
SendKeysステートメントが失敗します。
SendKeysステートメントはデスクトップ画面上で最上位のアクティブな画面に実行されるからです。
サンプル:ExcelのVBA
- 参照設定を事前にする。
- F8キーでステップ実行しながら動作確認出来ません。
SendKeysステートメントを使っている為です。
001 Option Explicit
002 Sub CommandButton9_Click()
003 Dim objAcroApp As New Acrobat.AcroApp
004 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
005 Dim lRet As Long
006 Dim strFileName As String
007 'ファイル名
008 strFileName = "Test01"
009 'Acrobatを起動表示する
010 lRet = objAcroApp.Show
011 'PDFファイルを開いて表示する。
012 lRet = objAcroAVDoc.Open("E:¥" & strFileName & ".pdf", "")
013 '扱っているPDFを画面の最前列に強制的に表示させる。※SendKeysの為
014 lRet = objAcroAVDoc.BringToFront()
015 '「名前を付けて保存」ダイアログを開く
016 lRet = objAcroApp.MenuItemExecute("SaveAs")
017 'ファイル名をセットする
018 SendKeys "%N", True
019 SendKeys strFileName, True
020 '「ファイルの種類」コンボボックスにフォーカスを持っていく
021 SendKeys "%T", True
022 '「ファイルの種別」で「HTML 4.01 - CSS 1.0 準拠(*.htm,*.html)」を選択する
023 SendKeys "H", True
024 SendKeys "H", True
025 '「保存」ボタンをクリック
026 SendKeys "%S", True
027 'PDFファイルを変更無しで閉じます。
028 lRet = objAcroAVDoc.Close(1)
029 'Acrobatアプリケーションを終了する。
030 lRet = objAcroApp.Hide
031 lRet = objAcroApp.Exit
032 'OLEを行うとAcrobatが不安定になるので、一応オブジェクトを強制開放する。
033 Set objAcroAVDoc = Nothing
034 Set objAcroApp = Nothing
035 MsgBox "★完了★"
036 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
補足
- Acrobat Reader(v8.1.2)では出来ません。
Acrobat本体がデフォルトでインストールされているパソコン環境だけです。 - 上記サンプルにも書きましたが、AcrobatはOLEを使用したり、又は環境が古い(新規インストールからの期間が1年以上になる)と不安定になる事があります。
その場合はOSから再インストールするとある程度安定します。 - SendKeysステートメントの間にBringToFrontメソッドを入れるとSendKeysステートメントが失敗します。
動作確認環境
- WindowsXP Pro + SP2 +
Acrobat 8.1.2 Pro + Office 2003
< サンプル一覧 >
NORITOさん、さっそくの対応ありがとうございます。 実際動かしてみましたが、動きました!
しかしVB.NetのSend Keyステートメントはやはり不安定ですね。。。。 これはもう仕方ないですね。
ご対応心から感謝します。
言語はVB.Netでしたか。あれはVBAに見せかけたJava言語ですからね。いまだに興味が出ない言語です。但し、ExcelやAccessでVB.NET言語をサポートしたら、このサイトのサンプルもそれを追加したいと考えています。
>Send Keyステートメントはやはり不安定
VB.NETは分かりませんが、この手の命令は一旦CPUをOSに戻しすか(DoEvent)、タイマーで0.2秒ほどスリープ(Sleep)させるとうまく行く事があります。VB6でもSendKeysがうまく行かない時はそうしました。
それと、不要サービスの停止、自動アップデータの停止、ウイルスチェックの一時停止など、バックで動いているAPを一時停止させると安定します。
私たっだら 無料のMicrosoft Virtual PC 上で不要なサービスを全て削除して、クリーンな環境で一旦ネットも切断して、そのMicrosoft Virtual PC上で動作させます。
動作未確認ですが・・。
頑張って下さい。