テキストのリンク数をカウント

TOP > サンプル / 関数 > *      [...]


Seller with cart

概要

PDFのページ上に設定されいるリンク数の数えます。

VBAからAcrobat OLE経由でAcrobat JavaScriptを実行して処理をします。

 

サンプル

PDFの指定ページ上のリンク数を取得します。

以下は実行するAcrobat JavaScriptです。@1と@2はVBAから変更します。

001 var ret = ""; 002 var istart= @1; 003 var iend = @2; 004 if(istart == -1){istart=0}; 005 if(iend == -1){iend=this.numPages}; 006 var numLinks=0; 007 for ( var p = istart; p < iend; p++) 008 { 009 var b = this.getPageBox("Crop", p); 010 var l = this.getLinks(p, b); 011 ret = ret + p + "," + l.length + "/"; 012 numLinks += l.length; 013 } 014 event.value=ret; 015 //console.println(ret);

 

  • @1:開始するページ番号
    • 開始ページは0
    • -1 は既定値の0を意味
  • @2: 終了ページ番号
    • 終了ページ数の -1 まで
    • -1 は既定値の最後(this.numPages)までを意味

参照設定が2つ必要です。

ダウンロード:sample-GetLinkCount.xls

001 Option Explicit 002 003 '************************************************** 004 ' 005 ' サンプル:リンク数を数える 006 ' 007 ' https://pdf-file.nnn2.com/?p=**** 008 ' 009 ' @1 : First Page 0=Start 010 ' -1:Default(0) 011 ' @2 : Last Page 012 ' -1:Default(this.numPages) 013 ' 014 ' サンプルの引用先: 015 ' http://kb2.adobe.com/jp/cps/511/511727/attachments/ 016 ' 511727_js_api_reference.pdf#page=305 017 ' 018 '************************************************** 019 020 Sub Sample_GetLinkCount() 021 022 Dim start As Double: start = Timer 023 Debug.Print "Sample_GetLinkCount " & Time 024 025 Dim sFilePathIn As String 026 Dim bRet As Boolean 027 Dim i1 As Long 028 Dim sAJS As String 029 Dim sReturn As String 030 031 Dim objAcroApp As New Acrobat.AcroApp 032 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 033 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 034 Dim objAcroPDPage As Acrobat.AcroPDPage 035 Dim objAFormApp As AFORMAUTLib.AFormApp 036 Dim objAFormFields As AFORMAUTLib.Fields 037 038 objAcroApp.CloseAllDocs 039 objAcroApp.Hide '稀に表示されるので隠す 040 041 'PDFファイルを開く 042 sFilePathIn = ThisWorkbook.Path & "\test-003.pdf" 043 bRet = objAcroAVDoc.Open(sFilePathIn, "") 044 045 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc 046 Set objAFormApp = CreateObject("AFormAut.App") 047 Set objAFormFields = objAFormApp.Fields 048 049 Const sAcrobatJavaScript As String = _ 050 "var ret = '';" & _ 051 "var istart= @1;" & _ 052 "var iend = @2;" & _ 053 "if(istart == -1){istart=0};" & _ 054 "if(iend == -1){iend=this.numPages};" & _ 055 "var numLinks=0;" & _ 056 "for (var p = istart; p < iend; p++)" & _ 057 "{" & _ 058 " var b = this.getPageBox('Crop', p);" & _ 059 " var l = this.getLinks(p, b);" & _ 060 " ret = ret + p + ',' + l.length + '/';" & _ 061 " numLinks += l.length;" & _ 062 "};" & _ 063 "event.value=ret;" & _ 064 "//console.println(ret);" 065 066 'Acrobat JavaScriptの編集 067 sAJS = sAcrobatJavaScript 068 sAJS = Replace(sAJS, "@1", -1) 069 sAJS = Replace(sAJS, "@2", -1) 070 ' Debug.Print sAJS 071 '▼Acrobat JavaScript の実行 072 sReturn = objAFormFields.ExecuteThisJavascript(sAJS) 073 Debug.Print "sReturn = " & sReturn 074 075 Dim sWk1() As String 076 Dim sWk2() As String 077 '実行結果を編集 078 sWk1 = Split(sReturn, "/") 079 For i1 = 0 To UBound(sWk1) - 1 080 sWk2 = Split(sWk1(i1), ",") 081 Debug.Print "Page=" & sWk2(0) & " Cnt=" & sWk2(1) 082 Next i1 083 084 '変更しないで閉じる 085 bRet = objAcroAVDoc.Close(False) 086 087 'Acrobatアプリケーションの終了 088 objAcroApp.Hide 089 objAcroApp.Exit 090 091 'オブジェクトの開放 092 Set objAcroPDPage = Nothing 093 Set objAcroPDDoc = Nothing 094 Set objAcroAVDoc = Nothing 095 Set objAFormApp = Nothing 096 Set objAFormFields = Nothing 097 Set objAcroApp = Nothing 098 099 Debug.Print "処理時間 = " & Timer - start 100 End Sub


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

 

実行結果

Debug.Printで実行された結果が表示されます。

sReturn に結果が文字列で返されます。

  • スラッシュ「 / 」 :ページ単位の区切り
  • カンマ「 , 」 :ページ番号とリンク数の区切り

 

Acrobat JavaScript

各命令(メソッド、プロパティ)の説明は省略します。サンプルをそのままご使用ください。

詳細を知りたい方は、メーカーの公開マニュアル「JavaScript™ for Acrobat® API Reference Adobe® Acrobat® SDK バージョン 8.0」を御覧ください。

 

備考

  • Acrobat JavaScriptの日本語版の解説書は上記以降は英語版しか存在しません。機能的なUpdateも殆ど無いので最新バージョンのAcrobatに相当するマニュアルも存在しません。それが現状です。

 

参照

 

コメントを残す

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

CAPTCHA



SAMURAI Plugin

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

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



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

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