AcroExch.PDPage: CropPage メソッド

TOP > AcroExch.PDPage > CropPage      [...]


説明

該当ページから指定した四隅範囲を残してページから切り取る(=トリミングする)。

形式

VARIANT_BOOL CropPage(LPDISPATCH iAcroRect);

引数

  1. 第1引数(LPDISPATCH iAcroRect) :
    AcroRectオブジェクトでTop,bottom,Left,Rightを指定する。

戻り値

  • -1 : 成功。
  • 0 : 失敗。

動作するバージョン

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

サンプル:ExcelのVBA

説明:該当ページから指定した四隅範囲を残してページから切り取る。

  • F8キーでステップ実行しながら動作確認する。
  • 事前に参照設定をする。
  • テストする時は出来るだけテキストを沢山含んだページを対象にする。
001 Sub AcroExch_PDPage_CropPage() 002 003 Dim objAcroApp As New Acrobat.AcroApp '(TEST用) 004 Dim objAcroAVDoc As New Acrobat.AcroAVDoc '(TEST用) 005 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 006 Dim objAcroPDPage As Acrobat.AcroPDPage 007 Dim objAcroRect As New Acrobat.AcroRect 008 Dim lRet As Long 009 010 'Acrobatを起動表示する 011 lRet = objAcroApp.Show '(TEST用) 012 'PDFファイルを開いて表示する 013 lRet = objAcroPDDoc.Open("E:\Test01.pdf") 014 '画面にPDFを表示する 015 lRet = objAcroAVDoc.Open("E:\Test01.pdf", "") '(TEST用) 016 '2ページ目のPDPageオブジェクトを取得する 017 Set objAcroPDPage = objAcroPDDoc.AcquirePage(1) 018 '切り取る範囲をポイントで指定する 019 objAcroRect.Top = 704 'トップ 020 objAcroRect.bottom = 584 '底 021 objAcroRect.Left = 468 '左 022 objAcroRect.Right = 648 '右 023 'ページを 024 lRet = objAcroPDPage.CropPage(objAcroRect) 025 '★この時点のPDFドキュメント画面を見る。 026 027 '保存しないでPDFファイルを閉じる 028 lRet = objAcroPDDoc.Close 029 030 'Acrobatを閉じる 031 lRet = objAcroApp.Hide '(TEST用) 032 lRet = objAcroApp.Exit '(TEST用) 033 034 'オブジェクトを強制開放する 035 Set objAcroRect = Nothing 036 Set objAcroPDPage = Nothing 037 Set objAcroPDDoc = Nothing 038 Set objAcroAVDoc = Nothing '(TEST用) 039 Set objAcroApp = Nothing '(TEST用) 040 041 End Sub


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

実行結果

(1)以下は実行前のページで右上を対象にする。

実行前

(2)以下がCropPageメソッド実行後にPDFビュアー(Acrobat)で見た結果。これを専門的にはトリミングと言う。

実行後

補足

  • F8キーでステップ実行し、各メソッドによりどのような動きをするかよく観察すること。
  • サンプル上の(TEST用)ステートメントはテスト用のロジックで実用時は不要です。
  • 「天地左右3mmづつトリミングされたPDFファイル」の作り方でAcroRectオブジェクトのTop,bottom,Left,Right 指定方法で別のサンプルが「みやさん」コメントにあります。こちらも参考にするとAcroRectオブジェクトの使い方が分かります。
    http://pdf-file.nnn2.com/?p=168&cpage=1#comment-57

動作確認環境

  • WindowsXP Pro(+ SP3) +
    Acrobat 8.1.2 Pro + Office 2003 + MicrosoftUpdate

戻る

「AcroExch.PDPage: CropPage メソッド」への12件のフィードバック

  1. はじめまして。
    さっきコメントがエラーになってしまったのでチェックでおくらさせてください。

  2. 質問があったのですが、コードを書き込んだせいか、なぜか、エラーになってしまいます。失礼しました。

  3. 中原 さん へ
    当サイトは海外等から大量のスパムが来るので入力の条件は厳しいです。 コードの前に質問をどうぞ。

  4. 返事がおくれて、すみません。
    ワード(エクセルではなく)vbaは多少できるのですが、
    oleというのは、今まで知りませんでした。
    どういうふうに質問してよいかが、わからず、
    もう少し研究してあらためて質問させていただきます。

  5. 中原 さん へ

    OLEと言うとかなり難しく聞こえますが、
    例えで言えば、Word 内にExcelの表を貼り付けることが出来ますよね。
    これもOLEと言う機能の一部です。
    それと同様にVBA内で、別のアプリ(DLLファイル等)の機能を使えるようにしたのがOLEです。

    VBAのプログラミングは既に内部ではOLE機能を使っています。
    それを意識するかしないか、機能を追加するかどうかだけの話なので、サイトに書かれている手順でヤってみる事をオススメします。
    こうしたら、こう出来る、そのやり方をOLEと言う、だけの話です。

    その前にVBAに慣れないといけませんネ。
    当サイトはVBAのサポートまではご遠慮させて頂いています。
    何をしたいのかは不明ですが。

  6. アドバイスありがとうございます。
    実は、「PDFの出力」OLEをワードVBAに取り込み、
    ワードに入力したPDFファイル名から、連続でファイルを開いて印刷していくという
    コードをつくりました。これは上手く動き、とても重宝しています。

    このコードの「PDFの出力」OLEをPDFのトリミング」OLEに変えて、
    動かしたところ、最後の1ファイルだけトリミング処理され、
    残りは処理されていないという結果になっています。
    おそらく
    buf = アクロAVdoc.Close(True)
    の部分に問題と思うのですが、いかがでしょうか?

  7. 中原さんへ
    テスト環境が一時的な不具合で動かないので記憶だけで返答します。

    > AcroAVdoc.Close(True)
    これはファイルに変更があると保存するかを尋ねるダイアログ画面が表示されて、画面を閉じるまでVBAがその部分で一時停止してしまいます。よって使い勝手が悪いです。
    AcroPDdoc.close は保存できません。保存せずに閉じるだけです。

    AcroPDdoc.Save は保存できます。但し引数で最適化の部分がうまく動作しない場合が有りますが、コレを推奨します。

    jso.SaveAs も保存できますが、少し操作で難しい部分が有るので今はオススメしません。

    > ・・最後の1ファイルだけトリミング処理され・・
    保存してから印刷をしている訳ですか。
    OLEオブジェクトの連携がうまく出来てないのでしょう。
    ※ ↑ 誰もが最初によくぶつかる部分です。
    それはロジックを見ないと分からないです。
    保存する前に印刷を先に行えば問題が起きないと思います。
    保存も必要ならば、やはりロジックを見直す必要が有ります。

    VBA ロジックを当サイトのコメントに入れるとエラーになる場合はVBAコメントの前後に日本語を入れて下さい。
    多分、エラーは回避されると想います。(動作未確認

  8. 管理人さん
    AcroPDdoc.Saveは使ってみたのですが、
    引数の設定がどうしてもわかりません。
    省略はできないものでしょうか?

  9. 中原さんへ

    サンプルと同じように

    Const PDSaveFull = &H1 
    Const PDSaveLinearized = &H4 
    Const PDSaveCollectGarbage = &H20

    ‘別名でPDFファイルを保存する 
        lRet = objAcroPDDoc.Save _ 
            (PDSaveFull + PDSaveLinearized + _ 
             PDSaveCollectGarbage, _ 
             "E:¥Test01_T.pdf"

    としてください。
    別名で保存します。
    なお、別名での保存はココの問題が出るかもしれないので C ドライブ以外を推奨します。

  10. 管理人さん
    うまく動きました。
    少しだけ質問させてください。
    ・&H1 &H14 &H20 これはどういう意味ですか
    ・トリミングの数値にどうしても誤差が出るのですが、もっとよい計算方法はありますか

    コードを入れようといろいろ試しているのですが、エラー続きです。
    もう少し短くまとめて、また、試してみます。

  11. 中原さんへ

    >&H1 &H4 &H20
    ヘキサ=数値を16進表記したモノです。
    &H1 -> 10進数では 0x16 + 1 =1
    &H4 -> 10進数では 0x16 + 4 = 4
    &H20 -> 10進数では 2x16 + 0 = 32
    コンピュータ内部の表現を使って定義するのが一般的です。
    Const PDSaveFull = 1
    Const PDSaveLinearized = 4
    Const PDSaveCollectGarbage = 32
    も同じ意味です。
    lRet = objAcroPDDoc.Save (1 + 4 + 32, "E:¥Test01_T.pdf")
    又は
    lRet = objAcroPDDoc.Save (37, "E:¥Test01_T.pdf")
    も結果は同じです。
    この様な表現をする意味を詳細に説明するのはコメントでは無理です。
    コンピューターのCPUを意識したプログラミングが必要になった時に初めて理解できる部分です。
    今は「そうやって定義するものだ」、「1つのルール」と思うだけで結構です。

    >・・トリミングの数値にどうしても誤差が出る・・
    誤差が出る原因は不明です。
    対策としては当初から誤差を意識した設計を行うことだと思います。

    >・・エラー続き・・
    キーボードのF8キーを使ってステップ実行を行い、各変数がどのように変化するかを観察しながらテストをして下さい。

  12. 管理人さん
    誤差に関してはミリの設定値をポイントに変換してそれを又ミリ設定で表示するわけですから、いたしかないかと思っています。
    いろいろと勉強させていただきました。
    ありがとうございました。

コメントを残す

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

CAPTCHA


★ 文章での質問は難しいですよネ。でも、早く解決して、家に帰りたい。


SAMURAI Plugin

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

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



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

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