テキストのリンクを削除

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


Climb

概要

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 this.removeLinks(p, b); 014 } 015 event.value=ret; 016 //console.println(ret);

 

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

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

ダウンロード:sample-DeleteLinks.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=326 017 ' 018 '************************************************** 019 020 Sub sample_DeleteLinks() 021 022 Dim start As Double: start = Timer 023 Debug.Print "Sample_DeleteLinks " & Time 024 025 Dim sFilePathIn As String 026 Dim sFilePathOut As String 027 Dim bRet As Boolean 028 Dim i1 As Long 029 Dim sAJS As String 030 Dim sReturn As String 031 032 Dim objAcroApp As New Acrobat.AcroApp 033 Dim objAcroAVDoc As New Acrobat.AcroAVDoc 034 Dim objAcroPDDoc As New Acrobat.AcroPDDoc 035 Dim objAcroPDPage As Acrobat.AcroPDPage 036 Dim objAFormApp As AFORMAUTLib.AFormApp 037 Dim objAFormFields As AFORMAUTLib.Fields 038 039 objAcroApp.CloseAllDocs 040 objAcroApp.Hide '稀に表示されるので隠す 041 042 'PDFファイルを開く 043 sFilePathIn = ThisWorkbook.Path & "\test-003.pdf" 044 bRet = objAcroAVDoc.Open(sFilePathIn, "") 045 046 Set objAcroPDDoc = objAcroAVDoc.GetPDDoc 047 Set objAFormApp = CreateObject("AFormAut.App") 048 Set objAFormFields = objAFormApp.Fields 049 050 Const sAcrobatJavaScript As String = _ 051 "var ret = '';" & _ 052 "var istart= @1;" & _ 053 "var iend = @2;" & _ 054 "if(istart == -1){istart=0};" & _ 055 "if(iend == -1){iend=this.numPages};" & _ 056 "var numLinks=0;" & _ 057 "for ( var p = istart; p < iend; p++)" & _ 058 "{" & _ 059 " var b = this.getPageBox('Crop', p);" & _ 060 " var l = this.getLinks(p, b);" & _ 061 " ret = ret + p + ',' + l.length + '/';" & _ 062 " numLinks += l.length;" & _ 063 " this.removeLinks(p, b);" & _ 064 "}" & _ 065 "event.value=ret;" & _ 066 "//console.println(ret);" 067 068 'Acrobat JavaScriptの編集 069 sAJS = sAcrobatJavaScript 070 sAJS = Replace(sAJS, "@1", -1) 071 sAJS = Replace(sAJS, "@2", -1) 072 ' Debug.Print sAJS 073 '▼Acrobat JavaScript の実行 074 sReturn = objAFormFields.ExecuteThisJavascript(sAJS) 075 Debug.Print "sReturn = " & sReturn 076 077 Dim sWk1() As String 078 Dim sWk2() As String 079 '実行結果を編集 080 sWk1 = Split(sReturn, "/") 081 Debug.Print "Delete Link Count:" 082 For i1 = 0 To UBound(sWk1) - 1 083 sWk2 = Split(sWk1(i1), ",") 084 Debug.Print "Page=" & sWk2(0) & " Cnt=" & sWk2(1) 085 Next i1 086 087 'PDFファイルを別名で保存 088 sFilePathOut = Replace(sFilePathIn, ".pdf", "-New.pdf") 089 If objAcroPDDoc.Save(1, sFilePathOut) = False Then 090 MsgBox "PDFファイルへ保存出来ませんでした", _ 091 vbOKOnly + vbCritical, "実行エラー" 092 End If 093 094 '変更しないで閉じる 095 bRet = objAcroAVDoc.Close(False) 096 097 'Acrobatアプリケーションの終了 098 objAcroApp.Hide 099 objAcroApp.Exit 100 101 'オブジェクトの開放 102 Set objAcroPDPage = Nothing 103 Set objAcroPDDoc = Nothing 104 Set objAcroAVDoc = Nothing 105 Set objAFormApp = Nothing 106 Set objAFormFields = Nothing 107 Set objAcroApp = Nothing 108 109 Debug.Print "処理時間 = " & Timer - start 110 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 を使っています。コメントデータの処理方法の詳細はこちらをご覧ください