Skip to main content
Participating Frequently
January 30, 2023
Answered

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

  • January 30, 2023
  • 5 replies
  • 1036 views

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

複数の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 has been closed for replies.
Correct answer ajabon grinsmith

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保存のくだりも問題がありそうに思いますが…

5 replies

assause
Community Expert
Community Expert
January 30, 2023

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

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

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

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

Participating Frequently
January 30, 2023

ありがとうございます!

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

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

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

katayanagi51
Community Expert
Community Expert
January 30, 2023

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

 

Participating Frequently
January 30, 2023

ありがとうございます!

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

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

monokano
Community Expert
Community Expert
January 30, 2023

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

 

 

Participating Frequently
January 30, 2023

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

ajabon grinsmith
Community Expert
ajabon grinsmithCommunity ExpertCorrect answer
Community Expert
January 30, 2023

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保存のくだりも問題がありそうに思いますが…

Participating Frequently
January 30, 2023

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

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

対応できました!

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

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