終了

javascriptでプリントプリセットの読み込み

Community Beginner ,
Jan 05, 2022 Jan 05, 2022

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

コピー完了

InDesign2020で「単ページのPS書き出しスクリプト」を作成しているのですが、書き出し後、スクリプトを使わずにPSファイルを書き出した場合にデフォルト保存名がスクリプトを使用して書き出した最終PS書き出し名になってしまいます。

スクリプトを使わずにPSファイルを書き出した時、開いているファイルのファイル名がデフォルトで入って欲しいのです。一度プリントプリセットを削除して、プリセットを読み込み直すと開いているファイルのファイル名がデフォルトで入ってくれるので、javascriptでプリセットを読み込む方法か、他に良い方法があれば教えてください。

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

表示

386

翻訳

翻訳

レポート

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

correct answers 1 件の正解

Community Expert , Jan 05, 2022 Jan 05, 2022

ヒマだったのでちょっと書いてみました。

var a = app.printerPresets.itemByName("ここに任意の既存プリセット名を入力してから実行").properties.toSource();
a = a.replace(/^\(\{(.+?)\}\)$/, "$1");
a = a.replace(/, ([^, ]+?:)/g, "\n$1");
a = a.split("\n");
var b = app.printerPresets.add();
var c;
for(var i = 0; i < a.length; i++){
    try{
        c = a[i].split(":");
        if(c[0] == "name") c[1] = c[1].replace(/"$/, "のコピィ\"");
        eval("b." + c[0] + " = " + c[1] + ";") ;
        } catch(e){
            }
    }

既存のプリセットと同じ名前は付けられないので「のコピ

...

投票

翻訳

翻訳
Community Expert ,
Jan 05, 2022 Jan 05, 2022

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

コピー完了

いくつか思いついたのをだらだら書いておきます。

 

・スクリプト実行前に保存、スクリプト実行後は保存せずに閉じる

 

・スクリプト処理の最後に、「ファイル名そのままの書き出しをして、書き出した物をその場で削除」を追加

 

・プリセットを読み込むのはスクリプトでできなさそうなので、新規作成してプロパティを移植するしかなさそうなのですが

--名前がかぶるとエラー

なので、

 

var mySet = app.printerPresets[-2].properties.toSource();
mySet = mySet.replace(/(name:".+?)(?=")/, "$1-1");
app.printerPresets.add(eval(mySet));

 

としてみたところ、

--R/O属性のプロパティを定義しようとしたためエラー

になってしまったので、properties内の要素をtryで括ってforで回すか、必要なプロパティだけ正規表現でまとめるか、

といった手間が必要っぽそうですね。

いったん作ってしまえばあとは、という雰囲気ですけど…

投票

翻訳

翻訳

レポート

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

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

コピー完了

ヒマだったのでちょっと書いてみました。

var a = app.printerPresets.itemByName("ここに任意の既存プリセット名を入力してから実行").properties.toSource();
a = a.replace(/^\(\{(.+?)\}\)$/, "$1");
a = a.replace(/, ([^, ]+?:)/g, "\n$1");
a = a.split("\n");
var b = app.printerPresets.add();
var c;
for(var i = 0; i < a.length; i++){
    try{
        c = a[i].split(":");
        if(c[0] == "name") c[1] = c[1].replace(/"$/, "のコピィ\"");
        eval("b." + c[0] + " = " + c[1] + ";") ;
        } catch(e){
            }
    }

既存のプリセットと同じ名前は付けられないので「のコピィ」追加してますが、

「のコピィ」の付いた名前のプリセットも既存だった場合は「プリントプリセット 1」などのださい名前になります(処理が甘い)。

設定できる項目だけ設定するという流れです。

出だしは名前の決め打ちなのでかっこよく作り変えてみては…

投票

翻訳

翻訳

レポート

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

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

コピー完了

ありがとうございます。

なるほど!このスクリプトで上手くいきそうです。プリセットを追加する前に既存のプリセットを削除すれば同名のプリセットでも追加できそうですね。これを参考に作成して見ます。

ありがとうございました。

投票

翻訳

翻訳

レポート

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

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

コピー完了

削除→作成でよければいいんですが、並びが変わるきらいはありますねー。

投票

翻訳

翻訳

レポート

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

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

コピー完了

追記

printerPrisetのメソッドに複製「duplicate()」があったので、プリントプリセットの複製→既存のプリセットの削除→複製したプリセットのリネームという方法をとることにしました。

プロパティの「printFile」の中身が削除ができれば良かったのですが、どうしてもできなくて仕方なくこの方法を取ることにしました。

 

app.printerPresets.item("既存のプリセット名").duplicate(); //プリントプリセットの複製

 

//--PS書き出し処理

   :

//--PS書き出し処理終了

 

app.printerPresets.item("既存のプリセット名").remove; //既存のプリントプリセットの削除

app.printerPresets.item("既存のプリセット名のコピー").name = "既存のプリセット名"; //複製したプリセットのリネーム

 

投票

翻訳

翻訳

レポート

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

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

コピー完了

最新

duplicate、すっかり存在を失念しておりました…w

手元で必要になったとき参考にさせていただきます!

投票

翻訳

翻訳

レポート

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