こんばんはyukiと申します。
いつも参考にさせていただいています。
delphiでpdfファイルにしおりをつけたいのですが、うまくいかない箇所がありどなたかご教示を賜りたくmailさせていただきました。
環境は、Windows10 pro + delphi7 pro で、acrobatはacrobat 8 proです。
Mr.Xray様の
(h)ttp://
mrxray.on.coocan.jp/Delphi/plSamples/724_Acrobat_TAcroApp.htm
を参考に
vbaで書かれたサンプル、'しおりを追加する (createChild)'
(h)ttp://
pdf-file.nnn2.com/?p=787
をdelphiに書き直してみたのですが、
しおりを階層なしで追加するところまでは上手くいくのですが、
階層構造の作成のところで
[EOleSysErrorクラスの例外]種類が一致しません
とエラーになってしまいます。
少し長いのですがコードは下記です。
大変恐縮ですが、よろしくお願いします。
usesにComObjを追加して、
procedure TForm1.Button1Click(Sender: TObject);
const
PDSaveIncremental = $00000000;
var
i:integer;
AFile : String;
App :OleVariant;
AVDoc :OleVariant;
PDDoc :OleVariant;
lRet:WordBool;
JSObj: OleVariant;
RootBM: OleVariant;
objBookMark:array of OleVariant;
begin
AFile := ExtractFilePath(ParamStr(0)) + 'test.pdf';
App := CreateOleObject('AcroExch.App');
AVDoc := CreateOleObject('AcroExch.AVDOC');
PDDoc := CreateOleObject('AcroExch.PDDOC');
lRet := App.CloseAllDocs;
//PDF文書を開く
lRet := AVDoc.Open(AFile, '');
//AcroPDDocオブジェクトを取得
PDDoc := AVDoc.GetPDDoc;
//Showメソッドを実行
App.Show;
//JavaScriptオブジェクトを取得
JSObj:=PDDoc.GetJSObject;
if not VarIsNull(JSObj) then begin
//しおりのルート設定
RootBM := JSObj.bookmarkRoot;
RootBM.createChild('1.Test1', 'this.pageNum=0', 0);
RootBM.createChild('1.1 Test1-1', 'this.pageNum=1', 1);
RootBM.createChild('1.2 Test1-2', 'this.pageNum=2', 2);
RootBM.createChild('2.Test2', 'this.pageNum=3', 3);
RootBM.createChild('2.1 Test2-1', 'this.pageNum=4', 4);
RootBM.createChild('2.1.1 Test2-1-1', 'this.pageNum=5', 5);
{ *** コメントアウト部分がエラーになる。
//ルートしおり直下のchildを取得、それぞれを参照する
//オブジェクトを設定
setlength(objBookMark, VarArrayHighBound(RootBM.Children,1));
for i:=0 to VarArrayHighBound(RootBM.Children,1)-1 do begin
objBookMark[i] := RootBM.Children(0); //[EOleSysErrorクラスの例外]種類が一致しません
end;
//階層構造を作成
objBookMark[0].insertChild( objBookMark[1], 0 );
objBookMark[0].insertChild( objBookMark[2], 1 );
objBookMark[3].insertChild( objBookMark[4], 0 );
objBookMark[4].insertChild( objBookMark[5], 0 );
for i:=0 to VarArrayHighBound(RootBM.Children,1)-1 do begin
objBookMark[i] := Unassigned;
end;
}
RootBM := Unassigned;
end;
//PDFファイルを保存して閉じる
lRet := PDDoc.Save(PDSaveIncremental, AFile);
AVDoc.Close(1);
PDDoc.Close;
App.CloseAllDocs;
AVDoc := Unassigned;
PDDoc := Unassigned;
App.Hide;
App.Exit;
App := Unassigned;
end;
MLホームページ:
http://www.freeml.com/delphi-users
----------------------------------------------------------------------
☆世界初☆17種類以上のお茶がワンタッチで楽しめる
ネスレのカプセル式お茶マシン「スペシャル.T」を今なら無料でお試し!
あなたの想像を超えるお茶の世界を♪♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=pl7gt
------------------------------------------------------[freeml byGMO]--