Method of conversion from PDF to XML.
説明
Acrobat PDF を XML ファイルに変換します。
画像イメージ部分はAcrobat がデフォルト設定ならば、別にimagesフォルダを作成してJPEGファイルとしてそこに保存されます。
Acrobat OLEの JSObject とExcel VBA OLEの機能を利用します。
サンプル:ExcelのVBA
- F8キーでステップ実行しながら動作確認出来ます。
- 参照設定を事前にする。
001 Option Explicit
002
003 Sub CommandButton9_Click()
004 Dim objAcroApp As New Acrobat.AcroApp
005 Dim objAcroAVDoc As New Acrobat.AcroAVDoc
006 Dim objAcroPDDoc As Acrobat.AcroPDDoc
007 Dim lRet As Long
008 Dim jso As Object
009
010 'Acrobatアプリケーションを起動する。
011 lRet = objAcroApp.Show
012 'PDFファイルを開いて表示する。
013 lRet = objAcroAVDoc.Open("E:¥Test01.pdf", "")
014 'PDDocオブジェクトを取得する
015 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc()
016 'JavaScriptオブジェクトを作成する。
017 Set jso = objAcroPDDoc.GetJSObject
018 jso.SaveAs "E:¥test-01.xml", "com.adobe.acrobat.xml-1-00"
019
020 'PDFファイルを変更無しで閉じます。
021 lRet = objAcroAVDoc.Close(1)
022 'Acrobatアプリケーションを終了する。
023 lRet = objAcroApp.Hide
024 lRet = objAcroApp.Exit
025 'OLEを行うとAcrobatが不安定になるので、
026 '一応オブジェクトを強制開放する。
027 Set jso = Nothing
028 Set objAcroAVDoc = Nothing
029 Set objAcroApp = Nothing
030
031 End Sub
Highlight:プログラミング言語のソースコードを構文で色分け (GUI編)
補足
- Acrobat Readerでは出来ません。
Acrobat本体がデフォルトでインストールされているパソコン環境だけです。
- 上記サンプルでは objAcroApp.Show でAcrobatアプリ本体を起動表示しています。
これはjso.SaveAs メソッドを連続で行うときに発生する不可解なエラー回避策です。
高速化したいのならば objAcroApp.CloseAllDocs に置き換えて下さい。
- 当サンプルよりも以下の関数を利用してのXML 変換をおすすめします。
「関数:PDFを特定のフォーマットに変換する」
当ページのサンプルよりも安全にXML 変換が可能になります。
注意
- Acrobat SDK 8.1 に書かれている第2引数の説明が一部間違っています。
以下が正解です。
SDK:com.adobe.Acrobat.xml-1-00 ※間違い
正解:com.adobe.acrobat.xml-1-00 ※「a」1文字違う
この情報は、"C:¥Program Files¥Adobe¥Acrobat 8.0¥Acrobat¥ExportTask.xml"ファイルに入っている内容から当サイト管理者が勝手に判断したものです。
この「ExportTask.xml」ファイルに関する説明はAcrobat SDKにはありません。
- OSがインストールされているC:ドライブへの保存は出来ません。
詳細は、「Acrobat JavaScript における「Safe Path」についての注意事項」を参照。
動作確認環境
- WindowsXP Pro + SP3 +
Acrobat 8.1.6 Pro + Office 2003 + フルMicrosoftUpdate
< サンプル一覧 >
こんにちは。
こちらのコードでpdfをxmlに変換しようとしたところ、
jso.SaveAs "E:¥test-01.xml", "com.adobe.acrobat.xml-1-00"
ここで1001のエラーになってしまいます。
Adobe 11はインストールされているのですが…何か設定のミスでしょうか?
参照設定でAdobeにチェックをしたことも確認済みです。
よろしくお願い致します。
Xml さん
はじめまして。
動作環境をもう少し詳しく知りたいですが・・・。
1001のエラーメッセージが
「実行時エラー’1001’ NotAllowedError:セキュリティ設定により、このプロパティまたはメソッドへのアクセスは許可されていません。」
ならば、以下のコメントの上下部分を御覧ください。
http://pdf-file.nnn2.com/?p=178&cpage=1#comment-60
>「2.確認ですが、Acrobat9.0 proの後にReaderをインストールしていないでしょうか? どんなにAcrobat9.0 proが存在しても後でインストールしたソフトのOLEを使用します。もし後でReaderをインストールするとReaderはファイル保存が出来ないので同様のエラーとなります。」
Acrobat 11 本体とReader 11 が混在環境だと問題が出ます。
ご確認ください。
※Acrobat 11での確認環境が無いので予測です。
※5年前のテスト結果ですから、別の問題も有るかもしれません。
解決につながれば幸いです。
管理人さん
返信ありがとうございます。
さっそくreaderをアンインストールして試したところ、今度は
lRet = objAcroApp.Show
のところで、
ランタイムエラー48
が出てしまいまして、dllの読み込みに失敗してるようです。
これは何か設定が足りないのでしょうか?
Xml さんへ
ん~~~・・・
① 前のコメントにも書きましたが、この場合は出来るだけ詳しい動作環境、又は動作条件等を書くのが技術的な質問をする時の最初の条件の1つになります。
② 次にエラー等が出た時はエラーコードだけでなく「エラーメッセージ」の内容も書きます。エラーコードだけでは判断できないからです。エラーコードは同じでエラーメッセージの一部が異なる場合もあります。内容によってはエラーが出たタイミングやその時の詳しい状況も必要です。
内容により公開できない部分は当然あります。
それは書かなくて結構です。
返答者のことを考えて最低限の内容は必要です。
その範囲で返答者(当サイト管理人)が判断します。
まず、1001と48のエラーがどの様なエラーメッセージなのか不明で、どのアプリケーションから出たものなのかも分かりませんので、これに関してはこれ以上の返答は無理です。
Excelかもしれませんが、1001のメッセージの確認も頂けないので無理です。
次にReaderをアンインストールしたそうですが・・。
アンインストールしたからといって、OSが全てに関してAcrobatアプリ本体側だけを見るとは限りません。
知っての通り、OS(Windows)はそんなに親切でも利口でも無いです
たぶん、OSはReaderの情報を一部が存在するという前提で動作していると勝手に予想しています。
Windowsのアンインストールがたびたび問題視されるのはこの様な事があるからです。
世間ではアンインストール・ツールなるものが沢山出回っています。
これがその理由の一つでしょう。
>・・dllの読み込みに失敗・・
の判断が正しいのならば、中途半端なOS環境になっていると予想されます。
これを解決する方法はAcrobat アプリ本体を再インストールするしか手は無いと勝手に予測しています。
そうすればAdobe関連のDLL(OLE)に関する入り口がAcrobatアプリの方に全て向くようになるはずです。(予想
その作業をする前に提案を書かせて頂きます。
1)Acrobatアプリ本体をアンインストール。
※この1)は不要かもしれません。やってみないと分からない。
2)Readerをインストール。そして最終アップデートまでやる。
3)Acrobatアプリ本体をインストール。そして最終アップデートまでやる。
将来Readerでの動作が必要になるかもしれません。その時にReaderをインストールすると又DLLの一部がReader側に向いてしまいます。
それと今後の注意点ですが、Acrobat,ReaderのアップデートがAdobe社より出る場合が有ります。その場合は先にReaderをアップデート、その後でAcrobatアプリをアップデートしないと、また変な問題が出ると予想しています。
現時点でCドライブ・パーティションのイメージバックアップをして、問題が発生した時に完全に復元できるようにして欲しいと言うのが本音です。知っての通り、アンインストール、インストールを繰り返すとOSの一部が不安定になる場合があるからです。
XMLさんの環境が分からないし、作業内容も多いので出来れば他の人(当サイト以外の人)の意見を聞くこともご提案します。
予想出来る範囲で返答させて頂きました。(汗