Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save monokano/8050de20d9fdf4cf327eb661ff38f374 to your computer and use it in GitHub Desktop.

Select an option

Save monokano/8050de20d9fdf4cf327eb661ff38f374 to your computer and use it in GitHub Desktop.
inddの段落背景色や段落囲み罫の表示不良を直す v4
// ドキュメント全体を対象にします
// メイン関数
function main() {
var doc = app.activeDocument;
var initialPage = app.activeWindow.activePage; // 実行前のページを保存
var hasProcessedParagraphs = false; // 処理対象の段落があったかどうかのフラグ
var processedPages = []; // 処理済みページの配列
// 再描画を無効
app.scriptPreferences.enableRedraw = false;
// ドキュメント内のすべてのストーリーをループ
for (var i = 0; i < doc.stories.length; i++) {
var story = doc.stories[i];
// ストーリー内のすべての段落をループ
for (var j = 0; j < story.paragraphs.length; j++) {
var paragraph = story.paragraphs[j];
// 段落背景色または段落囲み罫がONの場合
if (paragraph.paragraphShadingOn || paragraph.paragraphBorderOn) {
// 段落がまたがる全ページを取得して処理
var pages = getParagraphPages(paragraph);
for (var k = 0; k < pages.length; k++) {
var pageOffset = pages[k];
// 未処理ページなら実行する
if (!hasValue(processedPages, pageOffset)) {
// ページを表示
showPageByOffset(pageOffset);
// 段落背景色をトグルする
toggleParagraphShading(paragraph);
hasProcessedParagraphs = true;
processedPages.push(pageOffset);
}
}
}
}
}
// 実行前のページに戻る
try {
app.activeWindow.activePage = initialPage;
} catch (error) {
//alert("元のページに戻る際にエラーが発生しました: " + error.message);
}
// 再描画を有効
app.scriptPreferences.enableRedraw = true;
// 終了メッセージを表示
if (hasProcessedParagraphs) {
alert("実行しました。かならず目視で確認してださい。\n\n表示不良が発生していたら、このスクリプトで発生しないように作り方を改善した方が良いでしょう。");
} else {
alert("処理対象の段落はありませんでした。");
}
}
// 段落がまたがる全ページのオフセットを取得する関数
function getParagraphPages(paragraph) {
var pages = [];
try {
// 段落の先頭ページと末尾ページを取得
var startPage = paragraph.insertionPoints[0].parentTextFrames[0].parentPage;
var lastInsertionPoint = paragraph.insertionPoints[paragraph.insertionPoints.length - 1];
var endPage = lastInsertionPoint.parentTextFrames[0].parentPage;
if (startPage && endPage) {
var startOffset = startPage.documentOffset;
var endOffset = endPage.documentOffset;
// 先頭から末尾まで全てのページオフセットを配列に追加
for (var offset = startOffset; offset <= endOffset; offset++) {
pages.push(offset);
}
}
} catch (error) {
//alert("段落ページ取得でエラーが発生しました: " + error.message);
}
return pages;
}
// ページオフセットでページを表示する関数
function showPageByOffset(pageOffset) {
try {
var doc = app.activeDocument;
for (var i = 0; i < doc.pages.length; i++) {
if (doc.pages[i].documentOffset === pageOffset) {
app.activeWindow.activePage = doc.pages[i];
break;
}
}
} catch (error) {
//alert("ページ表示でエラーが発生しました: " + error.message);
}
}
// 配列に特定の値が存在するかチェックする関数
function hasValue(array, value) {
for (var i = 0; i < array.length; i++) {
if (array[i] === value) {
return true;
}
}
return false;
}
// 個別の段落の背景色をトグルする関数
function toggleParagraphShading(paragraph) {
try {
paragraph.paragraphShadingOn = !paragraph.paragraphShadingOn;
paragraph.paragraphShadingOn = !paragraph.paragraphShadingOn;
} catch (error) {
//alert("段落背景色のトグルでエラーが発生しました: " + error.message);
}
}
// スクリプトの実行
app.doScript(main, ScriptLanguage.JAVASCRIPT, undefined, UndoModes.ENTIRE_SCRIPT, "段落背景色・囲み罫の表示不良修正");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment