InDesignのバージョンは16.1のx64版です。
以下のスクリプトを作成したいです。
また、同一の動きを自動化できる方法などありましたらご教示頂きたいです。なんとかお助けいただけると幸いです。
【やりたいことの一連の流れ】
@指定したフォルダを3階層分検索し、indd.データを検索
A対象のInDesignデータを「最小ファイルサイズ」で同一フォルダに保存する
以上の作業を自動で行いたいです。
こちら(ttps://tu-kazu.jp/oboetakoto/script/indesign%E6%9B%B8%E9%A1%9E%E3%81%AE%E8%87%AA%E5%8B%95pdf%E5%8C%96/)のサイトにも似たようなスクリプトが記載されているのですが、どこを書き換えれば良いのかわかりません。
なんとかなりませんでしょうか。。。
[20596] メディカル12 (2021/08/19 Thu 18:02)
> 以下のスクリプトを作成したいです。
> なんとかお助けいただけると幸いです。
スクリプトを書けるようになりたいのか、
目先の要件が満たせればいいのか、
によって回答の仕方が変わってきます。
> こちら(ttps://tu-kazu.jp/oboetakoto/script/indesign%E6%9B%B8%E9%A1%9E%E3%81%AE%E8%87%AA%E5%8B%95pdf%E5%8C%96/)のサイトにも似たようなスクリプトが記載されているのですが、どこを書き換えれば良いのかわかりません。
この掲示板、スクリプトの作者さん達もけっこう見ていらっしゃいます。
なんならご本人が回答くださる場合もあったりします。
なので、こういうh抜きした提示方法は、お行儀の点でいかがなものかと思うんです。
[20600] (z-) (2021/08/20 Fri 12:17)
大変失礼いたしました。
多くの方がh抜きをやっていらしゃるので、何も考えずに真似してしまいました。
敬意を持ってURLを表示させて頂きます。
https://tu-kazu.jp/oboetakoto/script/indesign%E6%9B%B8%E9%A1%9E%E3%81%AE%E8%87%AA%E5%8B%95pdf%E5%8C%96/
お詫びして訂正させて頂きます。
ご指摘有難う御座います。
また、目先の要件が満たせれば良いと思っています。
昨日からプロゲートというアプリでJavaの勉強をしているのですが、初歩的な段階でも理解に時間がかかります。
体系的な知識を身に着けていると仕事には間に合わなくなってしまう可能性が高いです。
引き続き、よろしくお願い致します。
[20601] メディカル12 (2021/08/20 Fri 13:39)
ひとまず簡単なテストで動作したので試してみてください。
4行目の depthValue = 3; というところで「何階層まで見る」か定義しているので
解釈違いがあったら適宜書き換えてください。
------------------
var folderObj = Folder.selectDialog("フォルダを選択してください");
var fileList = [];
var dirDepth = 1;
var depthValue = 3;
findIndd(folderObj, dirDepth);
alert(fileList.length + " 個のinddファイルが見つかりました");
for (var i = 0; i < fileList.length; i++){
fileObj = new File(fileList[i].fsName);
savePath = fileObj.fsName.replace(/\.indd$/i, ".pdf");
app.open(File(fileObj));
app.activeDocument.exportFile(ExportFormat.pdfType, savePath, false, "[最小ファイルサイズ]");
app.activeDocument.close(SaveOptions.no);
}
alert("完了");
function findIndd(dir, dep){
var files = dir.getFiles();
for(var i = 0; i < files.length; i++){
if(files[i].displayName.match(/\.indd$/i)){
fileList.push(files[i]);
continue;
}
if(dep < depthValue && files[i].constructor.name == "Folder"){
findIndd(files[i], dep + 1);
}
}
}
------------------
本来、フリーで公開されているスクリプトでも著作権の主張や
加工・二次配布の禁止(のお願い)など記載してある場合がありますが
tu-kazu.jpさんのサイトで特にそういう記載が見つけられなかったのと
元のスクリプトの原型がほとんど残らなかったので、まあいいかと…
[20602] (z-) (2021/08/20 Fri 14:25)
ご親切にどうもありがとうございました。
大変助かります。
作者様(z-様も)への権利関係には充分に配慮した上で使用させていただきます。
ただ、今は動作確認をする環境がないため、月曜日にまたテストしてみます。
なんとか目処が立ち始めて胸を撫で下ろしている状況でございます。
> ひとまず簡単なテストで動作したので試してみてください。
> 4行目の depthValue = 3; というところで「何階層まで見る」か定義しているので
> 解釈違いがあったら適宜書き換えてください。
>
> ------------------
> var folderObj = Folder.selectDialog("フォルダを選択してください");
> var fileList = [];
> var dirDepth = 1;
> var depthValue = 3;
>
> findIndd(folderObj, dirDepth);
> alert(fileList.length + " 個のinddファイルが見つかりました");
>
> for (var i = 0; i < fileList.length; i++){
> fileObj = new File(fileList[i].fsName);
> savePath = fileObj.fsName.replace(/\.indd$/i, ".pdf");
> app.open(File(fileObj));
> app.activeDocument.exportFile(ExportFormat.pdfType, savePath, false, "[最小ファイルサイズ]");
> app.activeDocument.close(SaveOptions.no);
> }
>
> alert("完了");
>
> function findIndd(dir, dep){
> var files = dir.getFiles();
> for(var i = 0; i < files.length; i++){
> if(files[i].displayName.match(/\.indd$/i)){
> fileList.push(files[i]);
> continue;
> }
> if(dep < depthValue && files[i].constructor.name == "Folder"){
> findIndd(files[i], dep + 1);
> }
> }
> }
> ------------------
>
> 本来、フリーで公開されているスクリプトでも著作権の主張や
> 加工・二次配布の禁止(のお願い)など記載してある場合がありますが
> tu-kazu.jpさんのサイトで特にそういう記載が見つけられなかったのと
> 元のスクリプトの原型がほとんど残らなかったので、まあいいかと…
[20604] メディカル12 (2021/08/21 Sat 22:48)
只今動作確認を行いました。
問題なく動作しており、作業が完了できそうです。
この度は大変有難うございました。
以下、後学のために書き残しておきます。
今回z-様からご教示頂いたスクリプトはひとつずつInDesignファイルを開いてPDF化する動作を自動化したものです。
よって進捗を示すプログレスメーターは表示されませんが、作業中の動作は画面上で確認できます。
ただし、フォントが見つからない場合などはその旨のアラートが表示されるため、スクリプトを実行しているパソコン画面をチラチラと監視しておく必要はありそうです。
また、スクリプトの実行により一度InDesignデータは開かれるわけですが、同データの更新日時は変わりません(上書きしません)。
あとは、z-様のスクリプトの解説通りです。見る階層は3階層目まで(4行目)、品質は「最小ファイルサイズ」(14行目)との設定です。適宜変更できるそうです。
> ひとまず簡単なテストで動作したので試してみてください。
> 4行目の depthValue = 3; というところで「何階層まで見る」か定義しているので
> 解釈違いがあったら適宜書き換えてください。
>
> ------------------
> var folderObj = Folder.selectDialog("フォルダを選択してください");
> var fileList = [];
> var dirDepth = 1;
> var depthValue = 3;
>
> findIndd(folderObj, dirDepth);
> alert(fileList.length + " 個のinddファイルが見つかりました");
>
> for (var i = 0; i < fileList.length; i++){
> fileObj = new File(fileList[i].fsName);
> savePath = fileObj.fsName.replace(/\.indd$/i, ".pdf");
> app.open(File(fileObj));
> app.activeDocument.exportFile(ExportFormat.pdfType, savePath, false, "[最小ファイルサイズ]");
> app.activeDocument.close(SaveOptions.no);
> }
>
> alert("完了");
>
> function findIndd(dir, dep){
> var files = dir.getFiles();
> for(var i = 0; i < files.length; i++){
> if(files[i].displayName.match(/\.indd$/i)){
> fileList.push(files[i]);
> continue;
> }
> if(dep < depthValue && files[i].constructor.name == "Folder"){
> findIndd(files[i], dep + 1);
> }
> }
> }
> ------------------
>
> 本来、フリーで公開されているスクリプトでも著作権の主張や
> 加工・二次配布の禁止(のお願い)など記載してある場合がありますが
> tu-kazu.jpさんのサイトで特にそういう記載が見つけられなかったのと
> 元のスクリプトの原型がほとんど残らなかったので、まあいいかと…
[20605] メディカル12 (2021/08/23 Mon 09:50)
今回は要件をうけてスクリプトを9割書き下ろしたわけで、
教示、というのは少しちがう気もしますが…
まあ用が足りたなら何よりです。
プログレスバーは…w はたしてそこまで必要な物なんでしょうか。
フォント不備については必要があればプリフライト機能をかませることはできますが、いずれにせよプリフライトはチェックのみにとどまる機能です。
不足フォントがどこに置いてあるかわかりもしないのを、どうにか探してきてアクティベートしてくれる? 残念なのですがそこまで都合よく便利にはできません。
ひとつ、
今回はフリー配布されている物を、個人の用途に合わせてちょっとだけ改造する
という趣旨に(実際ちょっとではなかったですが)つい乗ってしまいましたが、
通常、受注モノは料金が発生して然るものだと認識していていただければ。
と思います。
[20606] (z-) (2021/08/23 Mon 12:59) web
言葉足らずですみません。
プログレスバーもフォントの検索も必要なく、私には必要にして十分な機能を備えておりました。
ただ、今後この書き込みを見た方がどんな動きをするのか想像する時に、その補完になるようにと書き残したまでです。
また、通常このような作業はお金を払ってやるべきだということも認識しております。わがままを言わせて頂いたような格好です。
> 今回は要件をうけてスクリプトを9割書き下ろしたわけで、
> 教示、というのは少しちがう気もしますが…
> まあ用が足りたなら何よりです。
>
> プログレスバーは…w はたしてそこまで必要な物なんでしょうか。
> フォント不備については必要があればプリフライト機能をかませることはできますが、いずれにせよプリフライトはチェックのみにとどまる機能です。
> 不足フォントがどこに置いてあるかわかりもしないのを、どうにか探してきてアクティベートしてくれる? 残念なのですがそこまで都合よく便利にはできません。
>
> ひとつ、
> 今回はフリー配布されている物を、個人の用途に合わせてちょっとだけ改造する
> という趣旨に(実際ちょっとではなかったですが)つい乗ってしまいましたが、
> 通常、受注モノは料金が発生して然るものだと認識していていただければ。
> と思います。
[20607] メディカル12 (2021/08/24 Tue 16:43)
フォントがないときに止まるのが困る(フォント化け自体は気にしない)という話なら
app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
を1行目に書くといいです
[20608] あまり (2021/08/25 Wed 10:18)
有難う御座います。
こちらのスクリプトも試してみます。
> フォントがないときに止まるのが困る(フォント化け自体は気にしない)という話なら
> app.scriptPreferences.userInteractionLevel = UserInteractionLevels.NEVER_INTERACT;
> を1行目に書くといいです
[20619] メディカル12 (2021/08/31 Tue 14:54)