5 件 見つかりました。
[2007-01-31-01]に「javascriptによるPDFリンク制御は上書きのみ」などと書いたが、やってみたらできた。また、[2007-01-08-01]にCOMからのリンク作成は無理っぽいなどと書いたが、これもjavascriptを経由しできた。顛末をメモする。WinXP SP3 Acrobat 9.1.3 pro
まずは結論。以下のスクリプトが動いた。
python(PyWin32):
import win32com.client import winerror win32com.client.dynamic.ERRORS_BAD_CONTEXT.append(winerror.E_NOTIMPL) # omajinai doc = win32com.client.Dispatch("AcroExch.App").GetActiveDoc().GetPDDoc() jso = doc.GetJSObject() # <= this requires omajinai link = jso.addLink(0, (70,70,225,50)) link.borderWidth = 3 link.borderColor = (u'RGB', 0, 0, 255) link.setAction("this.pageNum = 2")
var linkRect = [70,70,225,50]; var link1= this.addLink(0, linkRect); link1.borderWidth = 3; link1.borderColor = color.blue; link1.setAction("this.pageNum = 2")
[2007-02-02-01]の続き。
ちょっと試してみたが、PDF形式のデータをクリップボードに用意するのは難しそうだ。
一方でCOMインターフェースからはあっさりできてしまったので、そのVBScriptソースをメモする。嬉しいやら悲しいやら。
Dim appRef, docRef, txt ' 旧バージョンのIllustratorがある場合、以下のように末尾に数字を加えて ' バージョンを指定する。10が1、CSが2、CS2が3 ' "Visual Basic Scripting Reference" (CS2) p.61見よ Set appREf = CreateObject("Illustrator.Application.2") Set docRef = appRef.ActiveDocument 'Set docRef = appRef.Documents.Add ' 新規作成の場合はこちら Set txt = docRef.TextFrames.Add txt.Position = Array(200, 200) txt.Contents = "Itoh et al., Appl. Phys. Lett. 83, 2043 (2003)" ' フォントを見つける Dim fontR, fontB, fontRname, fontBname fontR = Null fontB = Null fontRname = "KozGoStd-Regular" ' 小塚ゴシックStd (R) fontBname = "KozGoStd-Heavy" ' 小塚ゴシックStd (H) 'fontRname = "ArialMT" ' Arial (Regular) 'fontBname = "Arial-BoldMT" ' Arial (Bold) For Each fontToTest In appRef.TextFonts If(fontToTest.Name = fontRname) Then Set fontR = fontToTest ElseIf(fontToTest.Name = fontBname) Then Set fontB = fontToTest End If If(IsNull(fontR) Or IsNull(fontB)) Then ' 何もしない(ループ続行) Else Exit For ' フォント見つかったのでもうループは不要 End If Next If(IsNull(fontB) Or IsNull(fontR)) Then msgbox "fonts not found" WScript.Quit ' 見つからなかったらやめる End If txt.TextRange.CharacterAttributes.TextFont = fontR txt.TextRange.CharacterAttributes.Size = 19 ' 太字にする箇所は別途調べておくなり、それ用のルーチンを用意するなりしておく txt.Characters(32).CharacterAttributes.TextFont = fontB txt.Characters(33).CharacterAttributes.TextFont = fontB
Dim app, objRE Set app = CreateObject("Illustrator.Application.2") Set objRE = new RegExp objRE.IgnoreCase = True objRE.pattern = "kozgostd" For Each font In app.TextFonts If objRE.Test(font.Name) Then msgbox font.Name End If Next
Acrobatの機能として、ページのイメージのサムネール画像の作成・埋め込みがサポートされているが、単体のラスタ画像ファイルでこれを作成したい場合にはどうすればよいか。
外部プログラムでこれらを行うものがいくつかある。
Xpdfに付属する pdftoppm でPDFのページイメージをppmにできる。
pdftoppm.exe -f 3 -l 5 adachi.pdf -r 50 myimgとして、3ページから5ページの画像が50dpiで myimg-000003.ppm とかの名前で出力される。ppmはそれなりに一般的な画像形式のようだが手元のwwwブラウザでは表示できなかった。
convert.exe -resample 50x50% mydoc.pdf hoge.pngなどとして全ページのイメージを出力できる。(指定したページのみの場合はどうするのだろう?)
Dim app, avdoc, pddoc, pdpage, point, rect Set app = CreateObject("AcroExch.App") Set avdoc = app.GetActiveDoc Set pddoc = avdoc.GetPDDoc Set pdpage = pddoc.AcquirePage(0) Set point = pdpage.GetSize() Set rect = CreateObject("AcroExch.Rect") rect.Left = 0 rect.Right = point.X rect.Top = 0 rect.Bottom = point.Y pdpage.CopyToClipboard rect, 0, 0, 100
AcrobatにはCOMインターフェースが備わっており、他のプログラムから操作ができる。で、PDFのリンクをいじろうと思ったけどできなかった。全機能が利用できると思ったが、そうでもないみたい。
Acrobat Developer Center - Interapplication Communication から他プログラムからの操作のための技術文書が入手できる。でリンクツールに関連するあたりを見てみるとAcroExch.PDAnnotなるオブジェクトを発見したが、これにリンク先を指定・取得するメソッドが無い。AcroExch.PDDoc.AddNewAnnotメソッドを見てみると、subtypeは(Linkではなく)Textでないといけないと書いてある。つまりOLE経由ではリンクの操作はできないみたいなのである。一方でApple eventの方にはannotationクラスできちんとリンク周りのメソッドが用意されている。ムカツク。
ちなみにPDAnnotは以下のようにして取得できる。
Dim app Set app = CreateObject("AcroExch.App") Dim avdoc, pddoc, pdpage, pdannot Set avdoc = app.GetActiveDoc Set pddoc = avdoc.GetPDDoc Set pdpage = pddoc.AcquirePage(0) Set pdannot = pdpage.GetAnnot(0) msgbox pdannot.GetContents msgbox pdannot.GetTitle msgbox pdannot.GetColor msgbox pdannot.GetSubtype
iTunesはCOMインターフェースを備えているようだ。面白そうなんだが使う機会はあるだろうか?
iTunes COM for Windows SDK License Agreement
ChangeLog INDEX