終了

ExtendScript ExternalObjectを使ってC++でInDesignのComponent Object Modelを操作したい

積極的な参加者 ,
Jan 06, 2023 Jan 06, 2023

リンクをクリップボードにコピー

コピー完了

こちらのサイト

https://qiita.com/MAA_/items/b1a35ab73af9f7b327e0 

でExtendScriptからC++ネイティブコードが呼べる事を知りました。

CEPについて書いてありますがInDesignのExtendScriptから実行出来ました)

 

そこで、C++でInDesignのComponent Object Modelを操作したいと考えました。

C++でInDesignのComponent Object Modelを操作について、何か参考になるサイト等でもご存じの方、おられませんでしょうか?

キーワード
SDK , スクリプティング

表示

442

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jan 06, 2023 Jan 06, 2023

リンクをクリップボードにコピー

コピー完了

勘違いしてはいけません。スクリプトからネイティブオブジェクトをコールするのではなくて自身で実装したAPIをスクリプトから呼び出すための仕組みです。InDesignのオブジェクトモデルにはアクセス出来ません。

わたしはOpenCVとか鬼車などを組み込んでスクリプトからアクセスしています。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jan 06, 2023 Jan 06, 2023

リンクをクリップボードにコピー

コピー完了

Ten Aさん

>自身で実装したAPIをスクリプトから呼び出すための仕組みです。

 

私の言葉足らずで申し訳ありません。

「自身でInDesignのComponent Object Modelの操作を実装したAPIをスクリプトから呼び出したいと考えました。」です。

 

Excelになりますが

https://qiita.com/BenjaminBenton7/items/52cfcfe493551e3b69f9 

を参考にして

ExcelのComponent Object Modelの操作を実装したAPI(私の場合Windowsですのでdll)をExtendScriptのExternalObjectを使ってInDesignで実行してExcelが呼び出せたので

同じくComponent Object ModelのあるInDesignも同様にしたいと考えた次第です。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jan 07, 2023 Jan 07, 2023

リンクをクリップボードにコピー

コピー完了

自身でInDesignのComponent Object Modelの操作を実装したdll(Windows)をExtendScriptから呼び出す事が出来ました。

 

私の行った手順(Windows)
VisualStudioCommunityを使用して
InDesignのタイプライブラリをC++ソースにimportする。
#import "C:\Users\user\AppData\Local\Adobe\InDesign\Version 18.0-J\ja_JP\Caches\Scripting Support\18.0\Resources for Visual Basic.tlb"
(私の場合のパス)

 

ビルドすると「2回以上初期化されています。」のエラーが出ました。
resources for visual basic.tlh
resources for visual basic.tli
のファイルが作られているのでその2つを別の場所に移動。
resources for visual basic.tlhのエラーが出た部分を修正。
resources for visual basic.tlhにresources for visual basic.tliのパスが記載されいるのでそれも修正して
resources for visual basic.tlhをC++ソースにinclude(includeですので注意)
でタイプライブラリを読み込むエラーが出なくなりました。

 

後はdllに含めたい関数に

CoInitialize(NULL); // COMの初期化
InDesign::_ApplicationPtr App("InDesign.Application"); // インスタンス作成
App->Paste(); // ペースト
CoUninitialize(); // COMを閉じる

 

等々

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jan 07, 2023 Jan 07, 2023

リンクをクリップボードにコピー

コピー完了

InDesignのCOMはVS向けの構成ですから、ネイティブ系をスクリプトからコールするのであればiScriptで実装した方が何かと手間が省けるように思います。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jan 07, 2023 Jan 07, 2023

リンクをクリップボードにコピー

コピー完了

Ten Aさん

iScriptって何でしょう?

調べてもよくわかりません。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
Community Expert ,
Jan 08, 2023 Jan 08, 2023

リンクをクリップボードにコピー

コピー完了

InDesignSDKのドキュメントに記述があります。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines
積極的な参加者 ,
Jan 08, 2023 Jan 08, 2023

リンクをクリップボードにコピー

コピー完了

最新

Ten Aさん

 

なるほど、InDesignSDKの「IScript Class」ですね。

投票

翻訳

翻訳

レポート

レポート
コミュニティガイドライン
他のユーザーへの思いやりを持ち、敬意を払いましょう。コンテンツの出典を明記し、投稿する前に内容が重複していないか検索してください。 さらに詳しく
community guidelines