Skip to main content
Participating Frequently
Jan 30, 2023 5:48 AM UTC
Answered

illustrator 2023 (27.x)で複数pdfを開いてアウトラインをかけて.aiで保存

投稿初心者なので、情報不足ありましたら申し訳ございません。

複数のpdfファイルを開いてアウトラインをかけて.aiで保存するスクリプト(下記参照)を
作成しました。

________________________________________________

var folder = Folder.selectDialog("Select a folder of PDF files");
if (folder != null) {
var files = folder.getFiles("*.pdf");
for (var i = 0; i < files.length; i++) {
var file = files[i];
var doc = app.open(file);
doc.selectObjectsOnActiveArtboard();
doc.createOutlines();
var newFile = new File(doc.path + "/" + doc.name.split(".pdf")[0] + ".ai");
doc.saveAs(newFile, Illustrator.SaveOptions.SAVECHANGES);
doc.close();
}
}

_________________________________________________

 

実行したところ

 

===============================

Error 24: doc.createOutlines が関数ではありません。
Line: 8

->           doc.createOutlines();

===============================
のエラーが発生し、ここを解消することができませんでした。
いろいろ、検索して調べてみましたが、わからなかったためコミュニティに投稿させていただきました。


お手数ですが、何卒、よろしくお願いいたします。。

This topic is closed to new replies. Start a new post to keep the conversation going.
ajabon grinsmith
ajabon grinsmithCorrect answer
Community Expert
Jan 30, 2023 6:19 AM UTC

createOutlines() はTextFrameクラスの関数です。

※Ten Aさんの返信のとおりでした。 Illustratorでは s いりません。この行だけは手打ちでテストしたのに手クセで正しいメソッド名を入力してた。。汗

Documentクラスであるところの変数docでやったのでエラーが出たわけです。

あと、オブジェクトのロック解除も折り込むべきかと思います。

.createOutlines() を実行する目的で改変するとなると、doc.pageItems コレクションをループして、オブジェクトがテキストなら.createOutlines() ,といった感じになりますが、めんどくさいので

メニューコマンドで ・ロック解除 ・アウトライン作成 を入れるとラクです。

 

 

var folder = Folder.selectDialog("Select a folder of PDF files");
if (folder != null) {
var files = folder.getFiles("*.pdf");
for (var i = 0; i < files.length; i++) {
var file = files[i];
var doc = app.open(file);
app.executeMenuCommand("unlockAll");    //すべてをロック解除
doc.selectObjectsOnActiveArtboard();
//doc.createOutlines();    //コメントアウト
app.executeMenuCommand("outline");    //アウトラインを作成
var newFile = new File(doc.path + "/" + doc.name.split(".pdf")[0] + ".ai");
doc.saveAs(newFile, Illustrator.SaveOptions.SAVECHANGES);
doc.close();
}
}

 

 実際試してないのですが(ごめんなさいごめんなさい)参考にどうぞ。

予想だとPDF保存のくだりも問題がありそうに思いますが…

10 replies

assause
Community Expert
Community Expert
Jan 30, 2023 8:59 AM UTC

「PDF」というのが気になりますし、アウトライン化の目的はどのような目的でしょうか。

編集情報のないPDFを無理やり開くと、その時点で結果が変わる場合があるので、アウトライン化以前の話になります。

またAcrobatのプリフライトでアウトライン化しても、利用されている文字数次第ではかなりのデータ量になってしまうことがあり、むしろ出力時に不適な結果になる場合があります。

PDF/Xになっているのであれば、そのまま出力処理される方が望ましい、ということになりそうですし、アウトライン化を実施する目的を明確にしたほうが良いかもしれません。

Translate
Participating Frequently
Jan 30, 2023 11:59 AM UTC

ありがとうございます!

大量のpdfを扱う場合は、仰る通りそのまま出力が望ましいかもしれませんね。

数が少ない場合はプリフライトも一個の案として持っておきます。

アウトライン化の実施目的を明確化したうえで対応方法を変えたいと思います!

Translate
katayanagi51
Community Expert
Community Expert
Jan 30, 2023 8:38 AM UTC

AIファイルの用途次第だとは思うのですが,環境にないフォントが使用されているPDF,Illustrator編集機能付きのPDFについては考慮しなくてよいのでしょうか。

 

Translate
Participating Frequently
Jan 30, 2023 11:53 AM UTC

ありがとうございます!

現在の要件は環境にないフォントが使用されているPDFは考慮していないです。

2点についても考慮した場合方法が異なりますね。

Translate
monokano
Community Expert
Community Expert
Jan 30, 2023 6:38 AM UTC

テキストのアウトライン化は、先にAcrobatで済ませておくのをお勧めします。

 

 

Translate
Participating Frequently
Jan 30, 2023 11:49 AM UTC

ありがとうございます!
PDFの際にすでにアウトラインしておく方法があるのですね。
これは複数ファイル(何十ファイル)でも対応が可能なのか確認してから試してみます!

Translate
ajabon grinsmith
Community Expert
ajabon grinsmithCommunity ExpertCorrect answer
Community Expert
Jan 30, 2023 6:19 AM UTC

createOutlines() はTextFrameクラスの関数です。

※Ten Aさんの返信のとおりでした。 Illustratorでは s いりません。この行だけは手打ちでテストしたのに手クセで正しいメソッド名を入力してた。。汗

Documentクラスであるところの変数docでやったのでエラーが出たわけです。

あと、オブジェクトのロック解除も折り込むべきかと思います。

.createOutlines() を実行する目的で改変するとなると、doc.pageItems コレクションをループして、オブジェクトがテキストなら.createOutlines() ,といった感じになりますが、めんどくさいので

メニューコマンドで ・ロック解除 ・アウトライン作成 を入れるとラクです。

 

 

var folder = Folder.selectDialog("Select a folder of PDF files");
if (folder != null) {
var files = folder.getFiles("*.pdf");
for (var i = 0; i < files.length; i++) {
var file = files[i];
var doc = app.open(file);
app.executeMenuCommand("unlockAll");    //すべてをロック解除
doc.selectObjectsOnActiveArtboard();
//doc.createOutlines();    //コメントアウト
app.executeMenuCommand("outline");    //アウトラインを作成
var newFile = new File(doc.path + "/" + doc.name.split(".pdf")[0] + ".ai");
doc.saveAs(newFile, Illustrator.SaveOptions.SAVECHANGES);
doc.close();
}
}

 

 実際試してないのですが(ごめんなさいごめんなさい)参考にどうぞ。

予想だとPDF保存のくだりも問題がありそうに思いますが…

Translate
Participating Frequently
Jan 30, 2023 11:47 AM UTC

ありがとうございます!
PDF保存が手動で保存しなければいけなくなってしまいましたが

(SaveOptionsを変えれば対応できると思ってます)

対応できました!

Translate
Ten A
Community Expert
Community Expert
Jan 30, 2023 6:10 AM UTC
createOutlinesはInDesignのメソッドですね。IllustratorではcreateOutlineというメソッドがtextFrameItemにあるのでテキストフレーム1つずつにメソッドを適用していく必要があります。
Translate
Participating Frequently
Jan 30, 2023 6:35 AM UTC

早速、ご連絡いただきましてありがとうございます!
内容理解しました。
textFrameItemに定義していく方法考えます。

Translate