スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

イラストレータでJAN/EAN-13バーコードを生成するスクリプト

Indesignで作ったスクリプトを応用して、イラストレータでJAN/EAN-13バーコードを生成するスクリプトを作ってみました。こっちは書籍用ではなく、一般の製品についているようなOCR文字がバーコードにめり込むような形式です。
現状ではOpenTypeフォント「OCR B std」が必須ですが、フォント名を適宜書き換えてご使用下さい。
//
// JAN/EAN-13バーコード生成スクリプト Ver.1.01
//
// Adobe Illustator CS & CS2
//
// 2007.2.14 いっちゃん
//
//
// バーコード作成で参考にしたURL
// http://www5d.biglobe.ne.jp/~bar/spec/barspec.html
//
// JavaScriptに関して参考にしたURL
// http://www.openspc2.org/
//
// Ver.1.00->1.01
// バーコード描画部の動作を変更。
// チェックデジットが0の時の誤判定を修正。
// 数字の描画位置がバーコードの中央になるように修正。
//

//ドキュメントが開いていなければ新規ドキュメントを作成する。
if(documents.length == 0)
{
app.documents.add();
}

var myDocument = app.activeDocument;

// システムにインストールされているOCRBフォントを検索します。
// もし直接指定したい場合は↓のコードで指定し、「//OCRフォントの検索」の
// For~文をコメントアウトください。

//var myNumFont = app.textFonts.getByName("ここにフォント名を入れて下さい");

//OCRフォント検索
var myNumFont;
for(i = 0; i < app.textFonts.length; i++)
{
if(!app.textFonts[i].name.search(/OCRB+/))
{
myNumFont = app.textFonts.getByName(app.textFonts[i].name);
break;
}
}

//OCRBがなければArialを使用する
if(i >= app.textFonts.length)
{
myNumFont = app.textFonts.getByName("ArialMT");
alert("OCRBフォントがないのでArialを使用します");
}

var codeNum = "";
var result;

//キャンセルが押された時の処理
for(; ;)
{
//入力プロンプトの表示
codeNum = prompt("バーコード番号を13桁で入力して下さい", codeNum);

if(codeNum == null) break; //キャンセルが押された時の処理

result = inputCheck(codeNum) //入力チェック
if(result == 0)
{
jan13(50, 50, 11.0, codeNum);
break;
}
else if(result == 10) alert("桁数が足りないか、半角数字以外の文字が含まれています");
else if(result == 11) alert("数字の入力が間違っています(チェックデジット不一致)");
}

//バーコード番号チェック
function inputCheck(codeNum)
{
var even, odd, result;
even = odd = 0;

if(codeNum.search(/\d{13}/)) return 10; //半角数字13桁が正しく入力されなかった場合は10を返す

//チェックデジット検算
for(i = 11; i >= 1; i -=2 ) even += eval(codeNum[i]);
for(i = 10; i >= 0; i -= 2) odd += eval(codeNum[i]);
result = 10 - (even * 3 + odd) % 10;
if(result == 10) result = 0;
if(eval(codeNum[12]) == result) return 0; //検算OK
else return 11; //検算NG
}

//
// JAN/EAN-13バーコード生成関数
//
// offsetX:描画位置X座標[mm], offsetY:描画位置Y座標[mm]
// Height:バーコード高さ[mm], codeNum:バーコード番号
//
function jan13(offsetX, offsetY, Height, codeNum)
{
const startCode = "101";
const centerCode = "01010";
const endCode = "101";

offsetX = mm2point(offsetX);
offsetY = mm2point(offsetY);
Height = mm2point(Height);

firstAdditionalCode = new Array(10);
firstAdditionalCode[0] = [1, 1, 1, 1, 1, 1];
firstAdditionalCode[1] = [1, 1, 0, 1, 0, 0];
firstAdditionalCode[2] = [1, 1, 0, 0, 1, 0];
firstAdditionalCode[3] = [1, 1, 0, 0, 0, 1];
firstAdditionalCode[4] = [1, 0, 1, 1, 0, 0];
firstAdditionalCode[5] = [1, 0, 0, 1, 1, 0];
firstAdditionalCode[6] = [1, 0, 0, 0, 1, 1];
firstAdditionalCode[7] = [1, 0, 1, 0, 1, 0];
firstAdditionalCode[8] = [1, 0, 1, 0, 0, 1];
firstAdditionalCode[9] = [1, 0, 0, 1, 0, 1];

oddParityL = new Array(10);
oddParityL[0] = [0, 0, 0, 1, 1, 0, 1];
oddParityL[1] = [0, 0, 1, 1, 0, 0, 1];
oddParityL[2] = [0, 0, 1, 0, 0, 1, 1];
oddParityL[3] = [0, 1, 1, 1, 1, 0, 1];
oddParityL[4] = [0, 1, 0, 0, 0, 1, 1];
oddParityL[5] = [0, 1, 1, 0, 0, 0, 1];
oddParityL[6] = [0, 1, 0, 1, 1, 1, 1];
oddParityL[7] = [0, 1, 1, 1, 0, 1, 1];
oddParityL[8] = [0, 1, 1, 0, 1, 1, 1];
oddParityL[9] = [0, 0, 0, 1, 0, 1, 1];

evenParityL = new Array(10);
evenParityL[0] = [0, 1, 0, 0, 1, 1, 1];
evenParityL[1] = [0, 1, 1, 0, 0, 1, 1];
evenParityL[2] = [0, 0, 1, 1, 0, 1, 1];
evenParityL[3] = [0, 1, 0, 0, 0, 0, 1];
evenParityL[4] = [0, 0, 1, 1, 1, 0, 1];
evenParityL[5] = [0, 1, 1, 1, 0, 0, 1];
evenParityL[6] = [0, 0, 0, 0, 1, 0, 1];
evenParityL[7] = [0, 0, 1, 0, 0, 0, 1];
evenParityL[8] = [0, 0, 0, 1, 0, 0, 1];
evenParityL[9] = [0, 0, 1, 0, 1, 1, 1];

evenParityR = new Array(10);
evenParityR[0] = [1, 1, 1, 0, 0, 1, 0];
evenParityR[1] = [1, 1, 0, 0, 1, 1, 0];
evenParityR[2] = [1, 1, 0, 1, 1, 0, 0];
evenParityR[3] = [1, 0, 0, 0, 0, 1, 0];
evenParityR[4] = [1, 0, 1, 1, 1, 0, 0];
evenParityR[5] = [1, 0, 0, 1, 1, 1, 0];
evenParityR[6] = [1, 0, 1, 0, 0, 0, 0];
evenParityR[7] = [1, 0, 0, 0, 1, 0, 0];
evenParityR[8] = [1, 0, 0, 1, 0, 0, 0];
evenParityR[9] = [1, 1, 1, 0, 1, 0, 0];

const moduleWidth = mm2point(0.33);

var posX = posY1 = posY2 = 0.0;
var barcodeBinaryData = new Array();
var FAC = new Array();

// バーコード番号を2進数に変換
codeNum = codeNum + "";
FAC = firstAdditionalCode[eval(codeNum[0])];

barcodeBinaryData += startCode; // 開始コード挿入
for(i = 1; i <= 6; i++) { // バーコード番号の2-6桁の番号を挿入
if(FAC[i - 1] == 0) {
for(j = 0; j < evenParityL[eval(codeNum[i])].length; j++)
barcodeBinaryData += evenParityL[eval(codeNum[i])][j];
}
else if(FAC[i - 1] == 1) {
for(j = 0; j < oddParityL[eval(codeNum[i])].length; j++)
barcodeBinaryData += oddParityL[eval(codeNum[i])][j];
}
}
barcodeBinaryData += centerCode; // センターコードを挿入
for(i = 7; i < 13; i++) { // バーコード番号の7-13桁の番号を挿入
for(j = 0; j < evenParityR[eval(codeNum[i])].length; j++)
barcodeBinaryData += evenParityR[eval(codeNum[i])][j];
}
barcodeBinaryData += endCode; // 終了コードを挿入

//バーコード描画色:スミ1色
var myBarcodeColor = new CMYKColor();
with(myBarcodeColor) {cyan = 0; magenta = 0; yellow = 0; black = 100;}

posX = offsetX - moduleWidth / 2; //バーの太さの半分だけ左方向に移動
posY1 = offsetY;
posY2 = posY1 + Height;
var barCount = 0;
var mypathItem;

//バーコード描画
for(i = 0; i < barcodeBinaryData.length; i++) {
if(barcodeBinaryData[i] != 0) //バーの処理
{
barCount++;
if((barcodeBinaryData[i + 1] == 0) || (i == barcodeBinaryData.length - 1))
{
mypathItem = myDocument.pathItems.add(); //バーを描画
with(mypathItem) //バーの属性指定
{
filled = false; //塗り:無し
stroked = true; //線:有り
strokeColor = myBarcodeColor; //線の塗り色を指定
strokeWidth = moduleWidth * barCount; //バーの太さを指定
//スタートコード、センターコード、エンドコードのバーを1.75mm伸ばす
if(i == 0 || i == 2 || i == 46 || i == 48 || i == 92 || i == 94)
posY1 = offsetY - mm2point(1.75);
else
posY1 = offsetY;
posX += strokeWidth / 2; //バーの太さの半分だけ右方向に移動
setEntirePath([[posX, posY1], [posX, posY2]]); //バーの描画位置指定
posX += strokeWidth / 2; //バーの太さの半分だけ右方向に移動
barCount = 0;
}
}
}
else
{
posX += moduleWidth; //スペースの処理
}
}
var posXMax = posX - moduleWidth / 2; //バーコードの一番右側の位置を記憶

//先頭の付加数字を描画
var myTextFrame = myDocument.textFrames.add();
with(myTextFrame)
{
contents = codeNum[0];
with(textRange.characters[0].characterAttributes)
{
textFont = myNumFont; //フォントの設定
size = 10; //サイズの設定
fillColor = myBarcodeColor; //色の設定
}
translate(offsetX - mm2point(4), offsetY - mm2point(3.2)); //描画位置指定
}
//残りの数字を描画
myTextFrame = myDocument.textFrames.add();
with(myTextFrame)
{
for(i = 1; i <= 6; i++) contents += codeNum[i];
contents += " ";
for(i = 7; i <= 12; i++) contents += codeNum[i];

for(i = 0; i < contents.length; i++)
{
with(textRange.characters[i].characterAttributes)
{
textFont = myNumFont; //フォントの設定
size = 10; //サイズの設定
fillColor = myBarcodeColor; //色の設定
if(myNumFont == app.textFonts.getByName("ArialMT"))
if(i == contents.length - 1) tracking = 0 //Arialの時はトラッキング=100
else tracking = 100; //但し最後のキャラクタだけ0
else
if(i == contents.length - 1) tracking = 0 //それ以外は-100
else tracking = -100; //但し最後のキャラクタだけ0
}
}

var posXCenter = (posXMax - offsetX) / 2 + offsetX; //バーコードX方向の中心を求める
translate(posXCenter - myTextFrame.width / 2, offsetY - mm2point(3.2)); //描画位置指定
}
}

//ポイントサイズ->ミリメートル変換
function point2mm(arg) {
if (arg == 0)
return 0;
else
return(arg * 25.4 / 72);
}

//ミリメートル->ポイントサイズ変換
function mm2point(arg) {
if (arg == 0)
return 0;
else
return(arg / 25.4 * 72);
}
スポンサーサイト

PDFデータを16ページ折りで面付するスクリプト

PDFデータを16ページ折り(16ページ掛け)で面付するスクリプトです。
これも今の所、背丁の位置が決め打ちのため、紙を横置きに設定すると背丁が飛び出てしまいます。

//
// PDFデータを16ページ折りで面付するスクリプト
//
var BLEED = 3; // ドブ[mm]
var tachikeiWeight = 0.1; // 裁ち罫太さ[mm]
var tachikeiLength = 10 // 裁ち罫長さ[mm]

const A4W = 210, A4H = 297, B5W = 182, B5H = 257;
var foldingCount; // 折数
var pdfPageOffset; // 貼付開始ページ
var bookTitle; // 背丁タイトル
var fileRef; // PDFファイルの絶対パス
var FILENUM = new Array;
FILENUM = [[4, 13, 16, 1, 8 , 9, 12, 5], [2, 15, 14, 3 ,6, 11, 10, 7]];
var FILENUM2 = new Array;
FILENUM2 = [[8, 9, 12, 5, 4, 13, 16, 1], [6, 11 ,10 ,7, 2, 15, 14, 3]];
var bindingStyle;

// デフォルトフォントの設定
app.textDefaults.appliedFont = app.fonts.item("ヒラギノ明朝 Pro W3");

myDisplayDialog();

function myDisplayDialog() {
myDialog = app.dialogs.add( {name:"PDF16ページ本掛スクリプト"} );

var myDDpageStyle = new Array("A4", "B5");
with(myDialog.dialogColumns.add() ){
with(borderPanels.add()){
staticTexts.add({staticLabel:"用紙"});
// 用紙サイズのドロップダウンメニュー作成
var myDropDown2 = dropdowns.add({stringList:myDDpageStyle, selectedIndex:0});
// 用紙縦・横選択ラジオボタン作成
with(myRadioBotton = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"縦 ", checkedState:true});
radiobuttonControls.add({staticLabel:"横"});
// 裁ち落とし有無のチェックボックス作成
myCheckBox = checkboxControls.add({staticLabel:"塗り足し有", checkedState:false});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"綴じ方"});
with(myRadioBotton2 = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"左綴じ天袋", checkedState:true});
radiobuttonControls.add({staticLabel:"右綴じ地袋"});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"開始折数"});
myIntEBox2 = integerEditboxes.add({editValue:1, minimumValue:1, maximumValue:99});
staticTexts.add({staticLabel:"終了折数"});
myIntEBox3 = integerEditboxes.add({editValue:99, minimumValue:1, maximumValue:99});
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"品名(背丁に表示されます)"});
myTxtEBox = textEditboxes.add({editContents:"品名", minWidth:155});
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"PDFの貼付開始ページ"});
myIntEBox = integerEditboxes.add({editValue:1, minimumValue:1, maximumValue:999});
}
}
// Dialogメニュー表示後のアクション
var myReturn = myDialog.show();
// OKを押された時
if (myReturn == true) {
myDocumentSize = myDropDown2.selectedIndex; // 用紙の大きさ
myDocumentDirection = myRadioBotton.selectedButton; // 用紙の方向
// A4縦
if ( (myDocumentSize == 0) && (myDocumentDirection == 0) ) {
DocumentWidth = A4W;
DocumentHeight = A4H;
// A4横
} else if ( (myDocumentSize == 0) && (myDocumentDirection == 1) ) {
DocumentWidth = A4H;
DocumentHeight = A4W;
// B5縦
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 0) ) {
DocumentWidth = B5W;
DocumentHeight = B5H;
// B5横
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 1) ) {
DocumentWidth = B5H;
DocumentHeight = B5W;
}
bleedStatus = myCheckBox.checkedState;
pdfPageOffset = eval(myIntEBox.editContents);
foldingCount = eval(myIntEBox2.editContents);
bookTitle = myTxtEBox.editContents;
totalPage = (eval(myIntEBox3.editContents) - eval(myIntEBox2.editContents) + 1 ) * 2;
bindingStyle = eval(myRadioBotton2.selectedButton);
myDialog.destroy();
// PDFファイル選択ダイアログを表示
fileRef = File.openDialog("面付するPDFファイルを選択してください", "PDFファイル:*.pdf" );
if(fileRef != null) {
impositionMain();
}
} else {
// ダイアログ破棄
myDialog.destroy();
}
}

function impositionMain() {
// デフォルトフォントの指定
var myDefaultFont = app.fonts.item("小塚明朝 Std");

// 新規ドキュメントの作成
var myDocument = app.documents.add();

// 背丁の色設定
var setColorWhite = [0, 0, 0, 0];
var setColorBlack = [0, 0, 0, 100];
var colorWhite = myDocument.colors.add({model:ColorModel.process,space:ColorSpace.cmyk,colorValue:setColorWhite});
var colorBlack = myDocument.colors.add({model:ColorModel.process,space:ColorSpace.cmyk,colorValue:setColorBlack});

// ドキュメントサイズを設定(横4倍+ドブ×2 縦4倍+ドブ×2 単ページ表示 左綴じ 横置き)
with (myDocument.documentPreferences) {
pageWidth = DocumentWidth * 4 + BLEED * 2;
pageHeight = DocumentHeight * 2 + BLEED * 2;
facingPages = false;
pageBinding = PageBindingOptions.leftToRight;
pageOrientation = PageOrientation.landscape;
slugTopOffset = 20;
slugBottomOffset = 20;
slugInsideOrLeftOffset = 20;
slugRightOrOutsideOffset = 20;
}

// 不要なマスターを削除
myDocument.masterSpreads.item(0).pages.item(0).remove();
// マスターの全マージンを0mmに設定
with (myDocument.masterSpreads.item(0).pages.item(0)) {
editUnits = MeasurementUnits.millimeters;
with (marginPreferences) {
right = 0;
left = 0;
top = 0;
bottom = 0;
}
}

// レイアウトグリッド非表示
myDocument.cjkGridPreferences.showAllLayoutGrids = false;

// ガイドライン作成
horizontalGuidelineBound = new Array(DocumentHeight / 2, DocumentHeight, DocumentHeight + BLEED, DocumentHeight + BLEED * 2, DocumentHeight * 1.5 + BLEED * 2);
verticalGuidelineBound = new Array(DocumentWidth / 2, DocumentWidth, DocumentWidth * 1.5, DocumentWidth * 2, DocumentWidth * 2 + BLEED, DocumentWidth * 2 + BLEED * 2, DocumentWidth * 2.5 + BLEED * 2, DocumentWidth * 3.0 + BLEED * 2, DocumentWidth * 3.5 + BLEED * 2);

for(i = 0; i < horizontalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.horizontal;
myGuide.location = horizontalGuidelineBound[i];
myGuide.fitToPage = true;
}
for(i = 0; i < verticalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.vertical;
myGuide.location = verticalGuidelineBound[i];
myGuide.fitToPage = true;
}

// マスターAに裁ち罫を入れる
var tachikeiBounds = new Array();
tachikeiBounds[0] = [ [-BLEED - tachikeiLength, DocumentHeight], [-BLEED, DocumentHeight] ];
tachikeiBounds[1] = [ [-BLEED - tachikeiLength, DocumentHeight + BLEED * 2], [-BLEED, DocumentHeight + BLEED * 2] ];
tachikeiBounds[2] = [ [DocumentWidth * 4 + BLEED * 3, DocumentHeight], [DocumentWidth * 4 + BLEED * 3 + tachikeiLength, DocumentHeight] ];
tachikeiBounds[3] = [ [DocumentWidth * 4 + BLEED * 3, DocumentHeight + BLEED * 2], [DocumentWidth * 4 + BLEED * 3 + tachikeiLength, DocumentHeight + BLEED * 2] ];
tachikeiBounds[4] = [ [DocumentWidth, -BLEED - tachikeiLength], [DocumentWidth, -BLEED] ];
tachikeiBounds[5] = [ [DocumentWidth * 2, -BLEED - tachikeiLength], [DocumentWidth * 2, -BLEED] ];
tachikeiBounds[6] = [ [DocumentWidth * 2 + BLEED * 2, -BLEED - tachikeiLength], [DocumentWidth * 2 + BLEED * 2, -BLEED] ];
tachikeiBounds[7] = [ [DocumentWidth * 3 + BLEED * 2, -BLEED - tachikeiLength], [DocumentWidth * 3 + BLEED * 2, -BLEED] ];
tachikeiBounds[8] = [ [DocumentWidth, DocumentHeight * 2 + BLEED * 3 + tachikeiLength], [DocumentWidth, DocumentHeight * 2 + BLEED * 3] ];
tachikeiBounds[9] = [ [DocumentWidth * 2, DocumentHeight * 2 + BLEED * 3 + tachikeiLength], [DocumentWidth * 2, DocumentHeight * 2 + BLEED * 3] ];
tachikeiBounds[10] = [ [DocumentWidth * 2 + BLEED * 2, DocumentHeight * 2 + BLEED * 3 + tachikeiLength], [DocumentWidth * 2 + BLEED * 2, DocumentHeight * 2 + BLEED * 3] ];
tachikeiBounds[11] = [ [DocumentWidth * 3 + BLEED * 2, DocumentHeight * 2 + BLEED * 3 + tachikeiLength], [DocumentWidth * 3 + BLEED * 2, DocumentHeight * 2 + BLEED * 3] ];
var myTachikei;
var myRegistrationColor = myDocument.colors.item("Registration");
for(i = 0; i < tachikeiBounds.length; i++) {
myTachikei = myDocument.masterSpreads.item(0).rectangles.add();
myTachikei.paths.item(0).entirePath = tachikeiBounds[i];
myTachikei.strokeColor = myRegistrationColor;
myTachikei.strokeWeight = tachikeiWeight + "mm";
}

// A-マスターの名前を設定(マスター(背丁有))
app.activeDocument.masterSpreads[0].baseName = "マスター(背丁有)";

// マスターを複製し名前を設定(B-マスター)
app.activeDocument.masterSpreads[0].duplicate();
app.activeDocument.masterSpreads[1].baseName = "マスター";
app.activeDocument.masterSpreads[1].namePrefix = "B"

// マスターAに背丁タイトルを入れる(ヒラギノ明朝Pro W3 11Q 縦書き 綴じ方により位置が変化する)
myBackSignTextFrame = myDocument.masterSpreads.item(0).textFrames.add();
if(bindingStyle == 0)
myBackSignTextFrame.geometricBounds = [DocumentHeight + BLEED * 2 + 111, DocumentWidth * 3 + BLEED * 2 + 1.375, DocumentHeight + BLEED * 2 + 28.5, DocumentWidth * 3 + BLEED * 2 - 1.375];
else if(bindingStyle == 1)
myBackSignTextFrame.geometricBounds = [111, DocumentWidth + 1.375, 28.5, DocumentWidth - 1.375];

// 文字の大きさは11Q, 文字色黒で0.1mmの白フチ
with (myBackSignTextFrame) {
texts[0].pointSize = "11Q";
texts[0].strokeColor = colorWhite;
texts[0].fillColor = colorBlack;
texts[0].strokeWeight = 0.01;
contents = bookTitle;
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
}
myBackSignStory = myBackSignTextFrame.parentStory;
myBackSignStory.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

// 総ページ数を指定する
// myDocument.documentPreferences.pagesPerDocument = totalPage;

var impositionBounds = new Array();
impositionBounds[0] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth, DocumentHeight + BLEED * 2 ,0];
impositionBounds[1] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth * 2, DocumentHeight + BLEED * 2, DocumentWidth];
impositionBounds[2] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth * 3 + BLEED * 2, DocumentHeight + BLEED * 2, DocumentWidth * 2 + BLEED *2];
impositionBounds[3] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth * 4 + BLEED * 2, DocumentHeight + BLEED * 2, DocumentWidth * 3 + BLEED *2];
impositionBounds[4] = [DocumentHeight, DocumentWidth * 4 + BLEED * 2, 0, DocumentWidth * 3 + BLEED * 2];
impositionBounds[5] = [DocumentHeight, DocumentWidth * 3 + BLEED * 2, 0, DocumentWidth * 2 + BLEED * 2];
impositionBounds[6] = [DocumentHeight, DocumentWidth * 2, 0, DocumentWidth];
impositionBounds[7] = [DocumentHeight, DocumentWidth, 0, 0];

var impositionBoundsWithBleed = new Array();
impositionBoundsWithBleed[0] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth + BLEED, DocumentHeight + BLEED, -BLEED];
impositionBoundsWithBleed[1] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 2 + BLEED, DocumentHeight + BLEED, DocumentWidth - BLEED];
impositionBoundsWithBleed[2] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 3 + BLEED * 3, DocumentHeight + BLEED, DocumentWidth * 2 + BLEED];
impositionBoundsWithBleed[3] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 4 + BLEED * 3, DocumentHeight + BLEED, DocumentWidth * 3 + BLEED];
impositionBoundsWithBleed[4] = [DocumentHeight + BLEED, DocumentWidth * 4 + BLEED * 3, -BLEED, DocumentWidth * 3 + BLEED];
impositionBoundsWithBleed[5] = [DocumentHeight + BLEED, DocumentWidth * 3 + BLEED * 3, -BLEED, DocumentWidth * 2 + BLEED];
impositionBoundsWithBleed[6] = [DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth - BLEED];
impositionBoundsWithBleed[7] = [DocumentHeight + BLEED, DocumentWidth + BLEED, -BLEED, -BLEED];

var impositionBoundsWithBleedOffset = new Array();
impositionBoundsWithBleedOffset[0] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth, DocumentHeight + BLEED, -BLEED];
impositionBoundsWithBleedOffset[1] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 2 + BLEED, DocumentHeight + BLEED, DocumentWidth];
impositionBoundsWithBleedOffset[2] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 3 + BLEED * 2, DocumentHeight + BLEED, DocumentWidth * 2 + BLEED];
impositionBoundsWithBleedOffset[3] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 4 + BLEED * 3, DocumentHeight + BLEED, DocumentWidth * 3 + BLEED * 2];
impositionBoundsWithBleedOffset[4] = [DocumentHeight + BLEED, DocumentWidth * 4 + BLEED * 3, -BLEED, DocumentWidth * 3 + BLEED * 2];
impositionBoundsWithBleedOffset[5] = [DocumentHeight + BLEED, DocumentWidth * 3 + BLEED * 2, -BLEED, DocumentWidth * 2 + BLEED];
impositionBoundsWithBleedOffset[6] = [DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth];
impositionBoundsWithBleedOffset[7] = [DocumentHeight + BLEED, DocumentWidth, -BLEED, -BLEED];

var impRotaionAngleLeftBinding = new Array(0, 0, 0, 0, 180, 180, 180, 180);
var impRotaionAngleRightBinding = new Array(180, 180, 180, 180, 0, 0, 0, 0);

var i = 0;
var pageFlag = false;

// 1ページあたり8つの四角形オブジェクトを作り、PDFファイルを画像として貼り込む
while(i < totalPage) {
if((i + 1) % 2 == 0) {
// 偶数ページの処理
// マスターを「B-マスター」に設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("B-マスター");
// 合い番を入れる
myBackSignTextFrame3 = myDocument.pages[i].textFrames.add();
with (myBackSignTextFrame3) {
geometricBounds = [DocumentHeight * 2 + BLEED * 2 + 10, DocumentWidth * 2 + 46.0, DocumentHeight * 2 + BLEED * 2 + 6, DocumentWidth * 2 + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 2) >>> 1) + foldingCount - 1) + "折ウラ";
}
} else {
// 奇数ページの処理
// マスターを「A-マスター(背丁有)」に設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("A-マスター(背丁有)");
// 折数を入れる(綴じ方により位置が変化する)
myBackSignTextFrame2 = myDocument.pages[i].textFrames.add();

if(bindingStyle == 0)
myBackSignTextFrame2.geometricBounds = [DocumentHeight + 131, DocumentWidth * 3 + BLEED * 2 + 1.375, DocumentHeight + 120, DocumentWidth * 3 + BLEED * 2 - 1.375];

else if(bindingStyle == 1)
myBackSignTextFrame2.geometricBounds = [131, DocumentWidth + 1.375, 120, DocumentWidth - 1.375];

// 文字の大きさは11Q, 文字色黒で0.1mmの白フチ
with (myBackSignTextFrame2) {
texts[0].pointSize = "11Q";
texts[0].strokeColor = colorWhite;
texts[0].fillColor = colorBlack;
texts[0].strokeWeight = 0.01;
contents = hankaku2kansuji(((i + 2) >>> 1) + foldingCount - 1) + "折";
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
}
myBackSignStory2 = myBackSignTextFrame2.parentStory;
myBackSignStory2.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

// 背標を入れる(綴じ方により位置が変化する)
myBackSignTextFrame4 = myDocument.pages[i].textFrames.add();
if(bindingStyle == 0)
myBackSignTextFrame4.geometricBounds = [DocumentHeight + 243.5, DocumentWidth * 3 + BLEED * 2 + 1.375, DocumentHeight + 161, DocumentWidth * 3 + BLEED * 2 - 1.375];
else if(bindingStyle == 1)
myBackSignTextFrame4.geometricBounds = [243.5, DocumentWidth + 1.375, 161, DocumentWidth - 1.375];

// 文字の大きさは11Q, 文字色黒で0.1mmの白フチ
with (myBackSignTextFrame4) {
texts[0].pointSize = "11Q";
texts[0].strokeColor = colorWhite;
texts[0].fillColor = colorBlack;
texts[0].strokeWeight = 0.01;
contents = sehyoGenerator(((i + 2) >>> 1) + foldingCount - 1);
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
paragraphs[0].justification = Justification.rightAlign;
}
myBackSignStory4 = myBackSignTextFrame4.parentStory;
myBackSignStory4.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

// 合い番を入れる
myBackSignTextFrame3 = myDocument.pages[i].textFrames.add();
with (myBackSignTextFrame3) {
geometricBounds = [DocumentHeight * 2 + BLEED * 2 + 10, DocumentWidth * 2 + 46.0, DocumentHeight * 2 + BLEED * 2 + 6, DocumentWidth * 2 + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 2) >>> 1) + foldingCount - 1) + "折オモテ";
}
}

for(j = 0; j < 8; j++) {
// 画像配置のために四角形オブジェクト作成
myRectangle = myDocument.pages[i].rectangles.add();
// オブジェクトの属性を設定(線・塗りともに透明 グラフィック形式)
myRectangle.strokeColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.fillColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.contentType = ContentType.graphicType;

// 綴じ方によりPDFの配置角度を変化させる
if(bindingStyle == 0) myRectangle.absoluteRotationAngle = impRotaionAngleLeftBinding[j];
else if(bindingStyle == 1) myRectangle.absoluteRotationAngle = impRotaionAngleRightBinding[j];

// オブジェクトの位置、大きさを設定(ドブの有無により位置、大きさを変更)
if(bleedStatus == true)
myRectangle.geometricBounds = impositionBoundsWithBleed[j];
else
myRectangle.geometricBounds = impositionBounds[j];

// PDFデータをメディアサイズに設定
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;

// PDFのページを設定(綴じ方によりページの順序が変化する)
if(bindingStyle == 0)
app.pdfPlacePreferences.pageNumber = (FILENUM[(i % 2)][j] + (i >>> 1) * 16) + pdfPageOffset - 1;
else
app.pdfPlacePreferences.pageNumber = (FILENUM2[(i % 2)][j] + (i >>> 1) * 16) + pdfPageOffset - 1;

// PDFファイルを四角形オブジェクトに貼り込む
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myPdfObj = myRectangle.place(fileRef)[0]; // CS3以上
else
myPdfObj = myRectangle.place(fileRef); // CS, CS2

// 塗り足し有りの場合、塗り足しが合わさった部分を削除する
if(bleedStatus == true) myRectangle.geometricBounds = impositionBoundsWithBleedOffset[j];

myRectangle.sendToBack();

// 指定した折数よりPDFファイルのページ数が少なかった時の処理はpageFlagフラグを立ててtrueにしてループを抜ける
if( (i > 0) && (myPdfObj.pdfAttributes.pageNumber == 1) ) {
pageFlag = true;
break;
}
}

// 品名をオーバーライド
if(i % 2 == 0) myDocument.pages[i].masterPageItems[0].override(myDocument.pages[i]);

// pageFlagがtrueならば最後のページを削除してループを抜ける
if(pageFlag == true) {
myDocument.pages[i].remove();
break;
}

i++;
if(i >= totalPage) break;

// ページを追加
myDocument.pages.add();
}
// 1ページ目に戻す
app.activeWindow.activePage = myDocument.pages[0];
}

//
// 背標(階段状)を生成する関数(1 <= arg <= 99)
//
// 11進数的動作を行う。引数が大きくなる度に一の位を示す■が移動する。
// ただし引数の一の位が1の時に繰り上がり、十の位を示す■が1つ増える。
//
function sehyoGenerator(arg) {
var str = "";
var i;
var x = new Array(2);

var n = arg.toString();
// 引数を十の位と一の位に分け、配列変数xに格納する。ただし引数が10以下ならば配列内で右詰め処理
if(arg < 10) {
x[0] = 0;
x[1] = eval(n.charAt(0));
} else {
x[0] = eval(n.charAt(0));
x[1] = eval(n.charAt(1));
}
// 引数が10の倍数ならば十の位を1減じて、一の位を10とする
if(x[1] == 0) {
x[0] -= 1;
x[1] = 10;
}
// 一の位を示す■を入れる
str = str + "■";
// 一の位の数だけ空白を入れる
for(i = 0; i < x[1]; i++) str = str + " ";
// 十の位を示す■と一の位を示す■を区別するための空白を入れる。(4 - 十の位の数)個だけ離している
for(i = 0; i < (4 - 1) - x[0] ; i++) str = str + " ";
// 十の位の数だけ■を入れる
for(i = 0; i <= x[0]; i++) str = str + "■";

return str;
}
//
// 半角数字を漢数字に変換する関数
// 0~9は〇~九、10~99は十~九十九、100以上は一〇〇…に変換
// 半角数字以外は無変換
//
function hankaku2kansuji(arg) {
var res = "";
var tmpString = "";
var tmpNum = 0;

arg += "";

// 数字以外の文字がある場合の処理
if(arg.match(/[^0-9]/)) {
for(tmpNum = 0; tmpNum < arg.length; tmpNum++) {
// 数字の場合の処理
if(arg[tmpNum].match(/[0-9]/)) {
tmpString += arg[tmpNum];
// 次の文字が数字でない場合、漢数字に変換する
if(arg[tmpNum + 1].match(/[0-9]/) == null) {
res += hankaku2kansuji_main(tmpString);
tmpString = "";
}
}
else
res += arg[tmpNum];
}
} else res = hankaku2kansuji_main(arg);

return res;
}

//
// 半角数字を漢数字に変換するメイン関数
// 0~9は〇~九、10~99は十~九十九、100以上は一〇〇…に変換
//
// 引 数:半角数字
// 戻り値:漢数字
//
function hankaku2kansuji_main(argNum) {
var kansuji = new Array("〇","一","二","三","四","五","六","七","八","九");
var res = "";
var tmpNum = 0;
// 1~9までの処理
if(Math.floor(argNum / 10) < 1) {
res = kansuji[(argNum)];
// 10~99までの処理
} else if( (tmpNum = Math.floor(argNum / 10) ) < 10) {
// 10のみの処理
if(argNum == 10)
res = "十";
// 11~19までの処理
else if(tmpNum <= 1)
res = "十" + kansuji[((argNum % 10) + "")[0]];
// 20~99までで10で割り切れる場合の処理
else if(argNum % 10 == 0)
res = kansuji[tmpNum] + "十";
else
res = kansuji[tmpNum] + "十" + kansuji[( (argNum % 10) + "")[0]];
// 100以上の処理
} else {
argNum = argNum + "";
for(tmpNum = 0; tmpNum < argNum.length; tmpNum++)
res += kansuji[argNum[tmpNum][0]];
}
return res;
}

//
// 半角数字を漢数字に変換する関数
//
//function hankaku2kansuji(arg) {
// var kansuji = new Array("〇","一","二","三","四","五","六","七","八","九");
// var str = "";
// var i;
// for (i = 0; i < arg.toString().length; i++) str = str + kansuji[arg.toString()[i]];
// return str;
//}

PDFデータを8ページ折りで面付するスクリプト(2UPバージョン)

PDFデータを8ページ折り(8ページ掛け)で面付し2UPで出力するスクリプトです。
これも今の所、背丁の位置が決め打ちのため、紙を横置きに設定すると背丁が飛び出てしまいます。

//
// PDFデータを8P本掛で面付し、2ページずつ出力するスクリプト
//

const A4W = 210, A4H = 297, B5W = 182, B5H = 257;
const BLEED = 3; // 塗り足し
var myDDpageStyle = new Array("A4", "B5");
var foldingCount; //開始折数
var pdfPageOffset; //貼付開始ページ
var bookTitle; //背丁タイトル
var fileRef; //PDFファイルの絶対パス
var FILENUM = [[8, 1], [4, 5], [2, 7] ,[6, 3]];
var FILENUM2 = [[1, 8], [4, 5], [7, 2] ,[6, 3]];
var bindingStyle;

var ImpsitionBounds = new Array(2);

// デフォルトフォントの設定
app.textDefaults.appliedFont = app.fonts.item("ヒラギノ明朝 Pro W3");

myDisplayDialog();

function myDisplayDialog() {
myDialog = app.dialogs.add( {name:"PDF8ページ本掛/2P出力スクリプト"} );
with(myDialog.dialogColumns.add() ){
with(borderPanels.add()){
staticTexts.add({staticLabel:"用紙設定"});
// 用紙サイズのドロップダウンメニュー作成
var myDropDown2 = dropdowns.add({stringList:myDDpageStyle, selectedIndex:0});
//用紙縦・横選択ラジオボタン作成
with(myRadioBotton = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"縦 ", checkedState:true});
radiobuttonControls.add({staticLabel:"横"});
//裁ち落とし有無のチェックボックス作成
myCheckBox = checkboxControls.add({staticLabel:"塗り足し有", checkedState:false});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"綴じ方"});
with(myRadioBotton2 = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"左綴じ天袋", checkedState:true});
radiobuttonControls.add({staticLabel:"右綴じ地袋"});
}
} with(borderPanels.add()){
staticTexts.add({staticLabel:"開始折数"});
myIntEBox2 = integerEditboxes.add({editValue:1, minimumValue:1, maximumValue:99});
staticTexts.add({staticLabel:"終了折数"});
myIntEBox3 = integerEditboxes.add({editValue:99, minimumValue:1, maximumValue:99});
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"品名(背丁に表示されます)"});
myTxtEBox = textEditboxes.add({editContents:"品名", minWidth:155 });
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"PDFの貼付開始ページ"});
myIntEBox = integerEditboxes.add({editValue:1, minimumValue:1, maximumValue:999});
}
}
// Dialogメニュー表示後のアクション
var myReturn = myDialog.show();
// OKを押された時
if (myReturn == true) {
myDocumentSize = myDropDown2.selectedIndex; // 用紙の大きさ
myDocumentDirection = myRadioBotton.selectedButton; // 用紙の方向
// A4縦
if ( (myDocumentSize == 0) && (myDocumentDirection == 0) ) {
DocumentWidth = A4W;
DocumentHeight = A4H;
// A4横
} else if ( (myDocumentSize == 0) && (myDocumentDirection == 1) ) {
DocumentWidth = A4H;
DocumentHeight = A4W;
// B5縦
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 0) ) {
DocumentWidth = B5W;
DocumentHeight = B5H;
// B5横
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 1) ) {
DocumentWidth = B5H;
DocumentHeight = B5W;
}
bleedStatus = myCheckBox.checkedState;
pdfPageOffset = eval(myIntEBox.editContents);
foldingCount = eval(myIntEBox2.editContents);
bookTitle = myTxtEBox.editContents;
totalPage = (eval(myIntEBox3.editContents) - eval(myIntEBox2.editContents) + 1) * 4;
bindingStyle = eval(myRadioBotton2.selectedButton);
myDialog.destroy();
//PDFファイル選択ダイアログを表示
fileRef = File.openDialog("面付するPDFファイルを選択してください", "PDFファイル:*.pdf" );
if(fileRef != null) {
impositionMain();
}
} else {
//ダイアログ破棄
myDialog.destroy();
}
}

function impositionMain() {
//デフォルトフォントの指定
var myDefaultFont = app.fonts.item("小塚明朝 Std");

//新規ドキュメントの作成
var myDocument = app.documents.add();

//ドキュメントサイズを設定(横2倍 単ページ表示 左綴じ 横置き 印刷可能範囲:天地左右20mm)
with (myDocument.documentPreferences) {
pageWidth = DocumentWidth * 2;
pageHeight = DocumentHeight;
facingPages = false;
pageBinding = PageBindingOptions.leftToRight;
pageOrientation = PageOrientation.landscape;
slugTopOffset = 20;
slugBottomOffset = 20;
slugInsideOrLeftOffset = 20;
slugRightOrOutsideOffset = 20;
}

//不要なマスターを削除
myDocument.masterSpreads.item(0).pages.item(0).remove();

//マスターの全マージンを0mmに設定
with (myDocument.masterSpreads.item(0).pages.item(0)) {
editUnits = MeasurementUnits.millimeters;
with (marginPreferences) {
right = 0;
left = 0;
top = 0;
bottom = 0;
}
}

//レイアウトグリッド非表示
myDocument.cjkGridPreferences.showAllLayoutGrids = false;

//ガイドライン作成
verticalGuidelineBound = new Array(DocumentWidth / 2, DocumentWidth, DocumentWidth * 1.5);
//横に1本
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.horizontal;
myGuide.location = DocumentHeight / 2;
myGuide.fitToPage = true;
//縦に3本
for(i = 0; i < verticalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.vertical;
myGuide.location = verticalGuidelineBound[i];
myGuide.fitToPage = true;
}

//A-マスターの名前を設定(マスター(背丁有))
app.activeDocument.masterSpreads[0].baseName = "マスター(背丁有)";
//マスターを複製し名前を設定(B-マスター)
app.activeDocument.masterSpreads[0].duplicate();
app.activeDocument.masterSpreads[1].baseName = "マスター";
app.activeDocument.masterSpreads[1].namePrefix = "B"

//マスターAに背丁タイトルを入れる(小塚明朝Pro R 11Q 縦書き)
myBackSignTextFrame = myDocument.masterSpreads.item(0).textFrames.add();
with (myBackSignTextFrame) {
geometricBounds = [111, DocumentWidth + 1.375, 28.5, DocumentWidth - 1.375];
texts[0].pointSize = "11Q";
contents = bookTitle;
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
}
myBackSignStory = myBackSignTextFrame.parentStory;
myBackSignStory.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

//
//総ページ数をPDFのページ数取得からダイアログの折数入力で取得する方法に
//変更したため不要になった。
//
// //読み込んだPDFファイルの総ページ数を調べる
// pdfPageNum = 1;
// while (true) {
// app.pdfPlacePreferences.pageNumber = pdfPageNum;
// myRectangle = myDocument.pages[0].rectangles.add();
// myRectangle.geometricBounds = ImpsitionBounds[0];
// var pdfObj = myRectangle.place(fileRef);
// if ((pdfPageNum > 1) && (pdfObj.pdfAttributes.pageNumber == 1)) {
// break;
// }
// myRectangle.remove();
// pdfPageNum++;
// }
// //ループを1回多く回るので四角を削除して、pdfPageNumを1減ずる
// myRectangle.remove();
// pdfPageNum--;
//
// //PDFのページ数が偶数か奇数で処理を変え台紙の枚数を割り出す
// if(pdfPageNum % 2 == 1)
// totalPage = (pdfPageNum + 1) / 2;
// else
// totalPage = pdfPageNum / 2;
//
//

//総ページ数を指定する
// myDocument.documentPreferences.pagesPerDocument = totalPage;

//1ページあたり2つの四角形オブジェクトを作り、PDFファイルを画像として貼り込む

var i = 0;
var pageFlag = false;

while(i < totalPage) {
//合い番を入れる
myBackSignTextFrame3 = myDocument.pages[i].textFrames.add();
switch( (i + 1) % 4 ) {
case 0:
//マスターを設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("B-マスター");
//合い番を設定
with (myBackSignTextFrame3) {
geometricBounds = [DocumentHeight + 10, DocumentWidth + 46.0, DocumentHeight + 6, DocumentWidth + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 4) >>> 2) + foldingCount - 1) + "折ウラB";
}
break;

case 1:
//マスターを「A-マスター(背丁有)」に設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("A-マスター(背丁有)");

//折数を入れる
myBackSignTextFrame2 = myDocument.pages[i].textFrames.add();
with (myBackSignTextFrame2) {
geometricBounds = [131, DocumentWidth + 1.375, 120, DocumentWidth - 1.375];
texts[0].pointSize = "11Q";
contents = hankaku2kansuji(((i + 4) >>> 2) + foldingCount - 1) + "折";
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
}
myBackSignStory2 = myBackSignTextFrame2.parentStory;
myBackSignStory2.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

//背標を入れる
myBackSignTextFrame4 = myDocument.pages[i].textFrames.add();
with (myBackSignTextFrame4) {
geometricBounds = [243.5, DocumentWidth + 1.375, 161, DocumentWidth - 1.375];
texts[0].pointSize = "11Q";
contents = sehyoGenerator(((i + 4) >>> 2) + foldingCount - 1);
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
paragraphs[0].justification = Justification.rightAlign;
}
myBackSignStory4 = myBackSignTextFrame4.parentStory;
myBackSignStory4.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

//合い番を設定(綴じ方により表示位置を変更)
with (myBackSignTextFrame3) {
if(bindingStyle == 0) {
geometricBounds = [DocumentHeight + 10, DocumentWidth + 46.0, DocumentHeight + 6, DocumentWidth + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 4) >>> 2) + foldingCount - 1) + "折オモテA";
} else if(bindingStyle == 1) {
geometricBounds = [-6, DocumentWidth - 46.0, -10, DocumentWidth - 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 4) >>> 2) + foldingCount - 1) + "折オモテA";
paragraphs[0].justification = Justification.rightAlign;
}
}
break;

case 2:
//マスターを設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("B-マスター");

//合い番を設定
with (myBackSignTextFrame3) {
geometricBounds = [DocumentHeight + 10, DocumentWidth + 46.0, DocumentHeight + 6, DocumentWidth + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 4) >>> 2) + foldingCount - 1) + "折オモテB";
}
break;

case 3:
//マスターを設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("B-マスター");

//合い番を設定(綴じ方により表示位置を変更)
with (myBackSignTextFrame3) {
if(bindingStyle == 0) {
geometricBounds = [DocumentHeight + 10, DocumentWidth + 46.0, DocumentHeight + 6, DocumentWidth + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 4) >>> 2) + foldingCount - 1) + "折ウラA";
} else if(bindingStyle == 1) {
geometricBounds = [-6, DocumentWidth - 46.0, -10, DocumentWidth - 22.0];
texts[0].pointSize = "16Q";
contents = (((i + 4) >>> 2) + foldingCount - 1) + "折ウラA";
paragraphs[0].justification = Justification.rightAlign;
}
}
break;

default:
break;
}

var impositionBounds = new Array(2);
impositionBounds[0] = [DocumentHeight, DocumentWidth, 0, 0];
impositionBounds[1] = [DocumentHeight, DocumentWidth * 2, 0, DocumentWidth];

var impositionBoundsWithBleed = new Array(2);
impositionBoundsWithBleed[0] = [DocumentHeight + BLEED, DocumentWidth + BLEED, -BLEED, -BLEED];
impositionBoundsWithBleed[1] = [DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth - BLEED];

for(j = 0; j <= 1; j++) {
//画像配置のために四角形オブジェクト作成
myRectangle = myDocument.pages[i].rectangles.add();

//オブジェクトの属性を設定(線・塗りともに透明 グラフィック形式 回転角0°)
myRectangle.strokeColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.fillColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.contentType = ContentType.graphicType;

//綴じ方によりPDFの配置角度を変化させる
if(bindingStyle == 0) {
myRectangle.absoluteRotationAngle = 0;
} else if(bindingStyle == 1) {
if(i % 2 == 0)
myRectangle.absoluteRotationAngle = 0;
else
myRectangle.absoluteRotationAngle = 180;
}

//オブジェクトの位置、大きさを設定(塗り足しの有無により位置、大きさを変更)
if(bleedStatus == true)
myRectangle.geometricBounds = impositionBoundsWithBleed[j];
else
myRectangle.geometricBounds = impositionBounds[j];

//PDFデータをメディアサイズに設定
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;

//PDFのページを設定
if(bindingStyle == 0)
app.pdfPlacePreferences.pageNumber = (FILENUM[(i % 4)][j] + (i >>> 2) * 8) + pdfPageOffset - 1;
else if(bindingStyle == 1)
app.pdfPlacePreferences.pageNumber = (FILENUM2[(i % 4)][j] + (i >>> 2) * 8) + pdfPageOffset - 1;

//PDFファイルを四角形オブジェクトに貼り込む
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myPdfObj = myRectangle.place(fileRef)[0]; // CS3以上
else
myPdfObj = myRectangle.place(fileRef); // CS, CS2

//塗り足し有りの場合の処理
if( (bleedStatus == true) && (j == 0) )
myRectangle.geometricBounds = ([DocumentHeight + BLEED, DocumentWidth, -BLEED, -BLEED]);
else if( (bleedStatus == true) && (j == 1) )
myRectangle.geometricBounds = ([DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth]);

myRectangle.sendToBack();

// 指定した折数よりPDFファイルのページ数が少なかった時の処理はpageFlagフラグを立ててtrueにしてループを抜ける
if( (i > 0) && (myPdfObj.pdfAttributes.pageNumber == 1) ) {
pageFlag = true;
break;
}
}

//品名をオーバーライド
if(i % 4 == 0) myDocument.pages[i].masterPageItems[0].override(myDocument.pages[i]);

// pageFlagがtrueならば最後のページを削除してループを抜ける
if(pageFlag == true) {
myDocument.pages[i].remove();
break;
}

i++;
if(i >= totalPage) break;

//ページを追加
myDocument.pages.add();
}
// 1ページ目に戻す
app.activeWindow.activePage = myDocument.pages[0];
}

//背標(階段状)を生成する関数(1 <= arg <= 99)
function sehyoGenerator(arg) {
var str = "";
var i;
var x = new Array(2);

var n = arg.toString();
//引数を十の位と一の位に分け、配列変数xに格納する。ただし引数が10以下ならば配列内で右詰め処理
if(arg < 10) {
x[0] = 0;
x[1] = eval(n.charAt(0));
} else {
x[0] = eval(n.charAt(0));
x[1] = eval(n.charAt(1));
}
//引数が10の倍数ならば十の位を1減じて、一の位を10とする
if(x[1] == 0) {
x[0] -= 1;
x[1] = 10;
}
//一の位を示す■を入れる
str = str + "■";
//一の位の数だけ空白を入れる
for(i = 0; i < x[1]; i++) str = str + " ";
//十の位を示す■と一の位を示す■を区別するための空白を入れる。(4 - 十の位の数)個だけ離している
for(i = 0; i < (4 - 1) - x[0] ; i++) str = str + " ";
//十の位の数だけ■を入れる
for(i = 0; i <= x[0]; i++) str = str + "■";

return str;
}

//
//半角数字を漢数字に変換する関数
//
function hankaku2kansuji(arg) {
var kansuji = new Array("〇","一","二","三","四","五","六","七","八","九");
var str = "";
var i;
for (i = 0; i < arg.toString().length; i++) str = str + kansuji[arg.toString()[i]];
return str;
}



//半角数字を漢数字に変換する関数
function hankaku2kansuji(arg) {
var kansuji = new Array("〇","一","二","三","四","五","六","七","八","九");
var str = "";
var i;
for (i = 0; i < arg.toString().length; i++) str = str + kansuji[arg.toString()[i]];
return str;
}

//
//この方式は99までしかできないのでヤメ
//
//function hankaku2kansuji(arg) {
// var kansuji = new Array("〇","一","二","三","四","五","六","七","八","九");
// var str = "";
// if(arg < 10) return kansuji[arg];
// else if(arg % 10 == 0) return (kansuji[(arg + "")[0]] + "十");
// else if((arg >= 11) && (arg < 20)) return ("十" + kansuji[(arg + "")[1]]);
// else if(arg < 100) return (kansuji[(arg + "")[0]] + "十" + kansuji[(arg + "")[1]]);
//}

PDFデータを8ページ折りで面付するスクリプト

PDFデータを8ページ折り(8ページ掛け)で面付するスクリプトです。
今の所、背丁の位置が決め打ちのため、紙を横置きに設定すると背丁が飛び出てしまいます。

//
// PDFデータを8ページ折りで面付するスクリプト
//
var BLEED = 3; // ドブ[mm]
var tachikeiWeight = 0.1; // 裁ち罫太さ[mm]
var tachikeiLength = 10 // 裁ち罫長さ[mm]

const A4W = 210, A4H = 297, B5W = 182, B5H = 257;
var foldingCount; // 折数
var pdfPageOffset; // 貼付開始ページ
var bookTitle; // 背丁タイトル
var fileRef; // PDFファイルの絶対パス
var FILENUM = new Array;
FILENUM = [[8, 1, 4, 5], [2, 7, 6, 3]];
var FILENUM2 = new Array;
FILENUM2 = [[4, 5, 8, 1], [6, 3, 2, 7]];
var bindingStyle;

// デフォルトフォントの設定
app.textDefaults.appliedFont = app.fonts.item("ヒラギノ明朝 Pro W3");

myDisplayDialog();

function myDisplayDialog() {
myDialog = app.dialogs.add( {name:"PDF8ページ本掛スクリプト"} );

var myDDpageStyle = new Array("A4", "B5");
with(myDialog.dialogColumns.add() ){
with(borderPanels.add()){
staticTexts.add({staticLabel:"用紙"});
// 用紙サイズのドロップダウンメニュー作成
var myDropDown2 = dropdowns.add({stringList:myDDpageStyle, selectedIndex:0});
// 用紙縦・横選択ラジオボタン作成
with(myRadioBotton = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"縦 ", checkedState:true});
radiobuttonControls.add({staticLabel:"横"});
// 裁ち落とし有無のチェックボックス作成
myCheckBox = checkboxControls.add({staticLabel:"塗り足し有", checkedState:false});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"綴じ方"});
with(myRadioBotton2 = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"左綴じ天袋", checkedState:true});
radiobuttonControls.add({staticLabel:"右綴じ地袋"});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"開始折数"});
myIntEBox2 = integerEditboxes.add({editValue:1, minimumValue:1, maximumValue:99});
staticTexts.add({staticLabel:"終了折数"});
myIntEBox3 = integerEditboxes.add({editValue:99, minimumValue:1, maximumValue:99});
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"品名(背丁に表示されます)"});
myTxtEBox = textEditboxes.add({editContents:"品名", minWidth:155});
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"PDFの貼付開始ページ"});
myIntEBox = integerEditboxes.add({editValue:1, minimumValue:1, maximumValue:999});
}
}
// Dialogメニュー表示後のアクション
var myReturn = myDialog.show();
// OKを押された時
if (myReturn == true) {
myDocumentSize = myDropDown2.selectedIndex; // 用紙の大きさ
myDocumentDirection = myRadioBotton.selectedButton; // 用紙の方向
// A4縦
if ( (myDocumentSize == 0) && (myDocumentDirection == 0) ) {
DocumentWidth = A4W;
DocumentHeight = A4H;
// A4横
} else if ( (myDocumentSize == 0) && (myDocumentDirection == 1) ) {
DocumentWidth = A4H;
DocumentHeight = A4W;
// B5縦
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 0) ) {
DocumentWidth = B5W;
DocumentHeight = B5H;
// B5横
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 1) ) {
DocumentWidth = B5H;
DocumentHeight = B5W;
}
bleedStatus = myCheckBox.checkedState;
pdfPageOffset = eval(myIntEBox.editContents);
foldingCount = eval(myIntEBox2.editContents);
bookTitle = myTxtEBox.editContents;
if(eval(myIntEBox2.editContents) >= eval(myIntEBox3.editContents) ) {
alert("折数を正しく設定してください");
exit();
}
totalPage = (eval(myIntEBox3.editContents) - eval(myIntEBox2.editContents) + 1) * 2;
bindingStyle = eval(myRadioBotton2.selectedButton);
myDialog.destroy();
// PDFファイル選択ダイアログを表示
fileRef = File.openDialog("面付するPDFファイルを選択してください", "PDFファイル:*.pdf" );
if(fileRef != null) {
impositionMain();
}
} else {
// ダイアログ破棄
myDialog.destroy();
}
}

function impositionMain() {
// デフォルトフォントの指定
var myDefaultFont = app.fonts.item("小塚明朝 Std");

// 新規ドキュメントの作成
var myDocument = app.documents.add();

// 背丁の色設定
var setColorWhite = [0, 0, 0, 0];
var setColorBlack = [0, 0, 0, 100];
var colorWhite = myDocument.colors.add({model:ColorModel.process,space:ColorSpace.cmyk,colorValue:setColorWhite});
var colorBlack = myDocument.colors.add({model:ColorModel.process,space:ColorSpace.cmyk,colorValue:setColorBlack});

// ドキュメントサイズを設定(横2倍 縦2倍+ドブ×2 単ページ表示 左綴じ)
with (myDocument.documentPreferences) {
pageWidth = DocumentWidth * 2;
pageHeight = DocumentHeight * 2 + BLEED * 2;
facingPages = false;
pageBinding = PageBindingOptions.leftToRight;
slugTopOffset = 20;
slugBottomOffset = 20;
slugInsideOrLeftOffset = 20;
slugRightOrOutsideOffset = 20;
}

// 不要なマスターを削除
myDocument.masterSpreads.item(0).pages.item(0).remove();
// マスターの全マージンを0mmに設定
with (myDocument.masterSpreads.item(0).pages.item(0)) {
editUnits = MeasurementUnits.millimeters;
with (marginPreferences) {
right = 0;
left = 0;
top = 0;
bottom = 0;
}
}

//レイアウトグリッド非表示
myDocument.cjkGridPreferences.showAllLayoutGrids = false;

// ガイドライン作成
horizontalGuidelineBound = new Array(DocumentHeight / 2, DocumentHeight, DocumentHeight + BLEED, DocumentHeight + BLEED * 2, DocumentHeight * 1.5 + BLEED * 2);
verticalGuidelineBound = new Array(DocumentWidth / 2, DocumentWidth, DocumentWidth * 1.5);

for(i = 0; i < horizontalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.horizontal;
myGuide.location = horizontalGuidelineBound[i];
myGuide.fitToPage = true;
}
for(i = 0; i < verticalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.vertical;
myGuide.location = verticalGuidelineBound[i];
myGuide.fitToPage = true;
}

// マスターAに裁ち罫を入れる
var tachikeiBounds = new Array(4);
tachikeiBounds[0] = [ [-BLEED - tachikeiLength, DocumentHeight], [-BLEED, DocumentHeight] ];
tachikeiBounds[1] = [ [-BLEED - tachikeiLength, DocumentHeight + BLEED * 2], [-BLEED, DocumentHeight + BLEED * 2] ];
tachikeiBounds[2] = [ [DocumentWidth * 2 + BLEED, DocumentHeight], [DocumentWidth * 2 + BLEED + tachikeiLength, DocumentHeight] ];
tachikeiBounds[3] = [ [DocumentWidth * 2 + BLEED, DocumentHeight + BLEED * 2], [DocumentWidth * 2 + BLEED + tachikeiLength, DocumentHeight + BLEED * 2] ];
var myTachikei;
var myRegistrationColor = myDocument.colors.item("Registration");
for(i = 0; i < 4; i++) {
myTachikei = myDocument.masterSpreads.item(0).rectangles.add();
myTachikei.paths.item(0).entirePath = tachikeiBounds[i];
myTachikei.strokeColor = myRegistrationColor;
myTachikei.strokeWeight = tachikeiWeight + "mm";
}

// A-マスターの名前を設定(マスター(背丁有))
app.activeDocument.masterSpreads[0].baseName = "マスター(背丁有)";

// マスターを複製し名前を設定(B-マスター)
app.activeDocument.masterSpreads[0].duplicate();
app.activeDocument.masterSpreads[1].baseName = "マスター";
app.activeDocument.masterSpreads[1].namePrefix = "B"

// マスターAに背丁タイトルを入れる(ヒラギノ明朝Pro W3 11Q 縦書き 綴じ方により位置が変化する)
myBackSignTextFrame = myDocument.masterSpreads.item(0).textFrames.add();
if(bindingStyle == 0)
myBackSignTextFrame.geometricBounds = [DocumentHeight + BLEED * 2 + 111, DocumentWidth + 1.375, DocumentHeight + BLEED * 2 + 28.5, DocumentWidth - 1.375];
else if(bindingStyle == 1)
myBackSignTextFrame.geometricBounds = [111, DocumentWidth + 1.375, 28.5, DocumentWidth - 1.375];
// 文字の大きさは11Q, 文字色黒で0.1mmの白フチ
with (myBackSignTextFrame) {
texts[0].pointSize = "11Q";
texts[0].strokeColor = colorWhite;
texts[0].fillColor = colorBlack;
texts[0].strokeWeight = 0.01;
contents = bookTitle;
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
}
myBackSignStory = myBackSignTextFrame.parentStory;
myBackSignStory.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

var impositionBounds = new Array(4);
impositionBounds[0] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth, DocumentHeight + BLEED * 2 ,0];
impositionBounds[1] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth * 2, DocumentHeight + BLEED * 2 ,DocumentWidth];
impositionBounds[2] = [DocumentHeight, DocumentWidth * 2, 0, DocumentWidth];
impositionBounds[3] = [DocumentHeight, DocumentWidth, 0, 0];

var impositionBoundsWithBleed = new Array(4);
impositionBoundsWithBleed[0] = [DocumentHeight * 2 + BLEED * 3 , DocumentWidth + BLEED, DocumentHeight + BLEED, -BLEED];
impositionBoundsWithBleed[1] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 2 + BLEED, DocumentHeight + BLEED, DocumentWidth -BLEED];
impositionBoundsWithBleed[2] = [DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth - BLEED];
impositionBoundsWithBleed[3] = [DocumentHeight + BLEED, DocumentWidth + BLEED, -BLEED, -BLEED];

var impositionBoundsWithBleedOffset = new Array(4);
impositionBoundsWithBleedOffset[0] = [DocumentHeight * 2 + BLEED * 3 , DocumentWidth, DocumentHeight + BLEED, -BLEED];
impositionBoundsWithBleedOffset[1] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 2 + BLEED, DocumentHeight + BLEED, DocumentWidth];
impositionBoundsWithBleedOffset[2] = [DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth];
impositionBoundsWithBleedOffset[3] = [DocumentHeight + BLEED, DocumentWidth, -BLEED, -BLEED];

var impRotaionAngleLeftBinding = new Array(0, 0, 180, 180);
var impRotaionAngleRightBinding = new Array(180, 180, 0, 0);

var i = 0;
var pageFlag = false;

// 1ページあたり4つの四角形オブジェクトを作り、PDFファイルを画像として貼り込む
while(i < totalPage) {
if((i + 1) % 2 == 0) {
// 偶数ページの処理
// マスターを「B-マスター」に設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("B-マスター");
// 合い番を入れる
myBackSignTextFrame3 = myDocument.pages[i].textFrames.add();
with (myBackSignTextFrame3) {
geometricBounds = [DocumentHeight * 2 + BLEED * 2 + 10, DocumentWidth + 46.0, DocumentHeight * 2 + BLEED * 2 + 6, DocumentWidth + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 2) >>> 1) + foldingCount - 1) + "折ウラ";
}
} else {
// 奇数ページの処理
// マスターを「A-マスター(背丁有)」に設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("A-マスター(背丁有)");
// 折数を入れる(綴じ方により位置が変化する)
myBackSignTextFrame2 = myDocument.pages[i].textFrames.add();

if(bindingStyle == 0)
myBackSignTextFrame2.geometricBounds = [DocumentHeight + 131, DocumentWidth + 1.375, DocumentHeight + 120, DocumentWidth - 1.375];

else if(bindingStyle == 1)
myBackSignTextFrame2.geometricBounds = [131, DocumentWidth + 1.375, 120, DocumentWidth - 1.375];
// 文字の大きさは11Q, 文字色黒で0.1mmの白フチ
with (myBackSignTextFrame2) {
texts[0].pointSize = "11Q";
texts[0].strokeColor = colorWhite;
texts[0].fillColor = colorBlack;
texts[0].strokeWeight = 0.1;
contents = hankaku2kansuji(((i + 2) >>> 1) + foldingCount - 1) + "折";
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
}
myBackSignStory2 = myBackSignTextFrame2.parentStory;
myBackSignStory2.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

// 背標を入れる(綴じ方により位置が変化する)
myBackSignTextFrame4 = myDocument.pages[i].textFrames.add();
if(bindingStyle == 0)
myBackSignTextFrame4.geometricBounds = [DocumentHeight + 243.5, DocumentWidth + 1.375, DocumentHeight + 161, DocumentWidth - 1.375];
else if(bindingStyle == 1)
myBackSignTextFrame4.geometricBounds = [243.5, DocumentWidth + 1.375, 161, DocumentWidth - 1.375];
// 文字の大きさは11Q, 文字色黒で0.1mmの白フチ
with (myBackSignTextFrame4) {
texts[0].pointSize = "11Q";
texts[0].strokeColor = colorWhite;
texts[0].fillColor = colorBlack;
texts[0].strokeWeight = 0.1;
contents = sehyoGenerator(((i + 2) >>> 1) + foldingCount - 1);
paragraphs[0].appliedFont = myDefaultFont;
paragraphs[0].fontStyle = "R";
paragraphs[0].justification = Justification.rightAlign;
}
myBackSignStory4 = myBackSignTextFrame4.parentStory;
myBackSignStory4.storyPreferences.storyOrientation = HorizontalOrVertical.vertical;

// 合い番を入れる
myBackSignTextFrame3 = myDocument.pages[i].textFrames.add();
with (myBackSignTextFrame3) {
geometricBounds = [DocumentHeight * 2 + BLEED * 2 + 10, DocumentWidth + 46.0, DocumentHeight * 2 + BLEED * 2 + 6, DocumentWidth + 18.0];
texts[0].pointSize = "16Q";
contents = (((i + 2) >>> 1) + foldingCount - 1) + "折オモテ";
}
}

for(j = 0; j < 4; j++) {
// 画像配置のために四角形オブジェクト作成
myRectangle = myDocument.pages[i].rectangles.add();
//オブジェクトの属性を設定(線・塗りともに透明 グラフィック形式)
myRectangle.strokeColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.fillColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.contentType = ContentType.graphicType;

// 綴じ方によりPDFの配置角度を変化させる
if(bindingStyle == 0) myRectangle.absoluteRotationAngle = impRotaionAngleLeftBinding[j];
else if(bindingStyle == 1) myRectangle.absoluteRotationAngle = impRotaionAngleRightBinding[j];

// オブジェクトの位置、大きさを設定(ドブの有無により位置、大きさを変更)
if(bleedStatus == true)
myRectangle.geometricBounds = impositionBoundsWithBleed[j];
else
myRectangle.geometricBounds = impositionBounds[j];

// PDFデータをメディアサイズに設定
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;

// PDFのページを設定(綴じ方によりページの順序が変化する)
if(bindingStyle == 0)
app.pdfPlacePreferences.pageNumber = (FILENUM[(i % 2)][j] + (i >>> 1) * 8) + pdfPageOffset - 1;
else
app.pdfPlacePreferences.pageNumber = (FILENUM2[(i % 2)][j] + (i >>> 1) * 8) + pdfPageOffset - 1;

//PDFファイルを四角形オブジェクトに貼り込む
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myPdfObj = myRectangle.place(fileRef)[0]; // CS3以上
else
myPdfObj = myRectangle.place(fileRef); // CS, CS2

//塗り足し有りの場合、塗り足しが合わさった部分を削除する
if(bleedStatus == true) myRectangle.geometricBounds = impositionBoundsWithBleedOffset[j];

myRectangle.sendToBack();

// 指定した折数よりPDFファイルのページ数が少なかった時の処理はpageFlagフラグを立ててtrueにしてループを抜ける
if( (i > 0) && (myPdfObj.pdfAttributes.pageNumber == 1) ) {
pageFlag = true;
break;
}

}

// 品名をオーバーライド
if(i % 2 == 0) myDocument.pages[i].masterPageItems[0].override(myDocument.pages[i]);

// pageFlagがtrueならば最後のページを削除してループを抜ける
if(pageFlag == true) {
myDocument.pages[i].remove();
break;
}

i++;
if(i >= totalPage) break;

// ページを追加
myDocument.pages.add();
}
// 1ページ目に戻す
app.activeWindow.activePage = myDocument.pages[0];
}

//
// 背標(階段状)を生成する関数(1 <= arg <= 99)
//
// 11進数的動作を行う。引数が大きくなる度に一の位を示す■が移動する。
// ただし引数の一の位が1の時に繰り上がり、十の位を示す■が1つ増える。
//
function sehyoGenerator(arg) {
var str = "";
var i;
var x = new Array(2);

var n = arg.toString();
// 引数を十の位と一の位に分け、配列変数xに格納する。ただし引数が10以下ならば配列内で右詰め処理
if(arg < 10) {
x[0] = 0;
x[1] = eval(n.charAt(0));
} else {
x[0] = eval(n.charAt(0));
x[1] = eval(n.charAt(1));
}
// 引数が10の倍数ならば十の位を1減じて、一の位を10とする
if(x[1] == 0) {
x[0] -= 1;
x[1] = 10;
}
// 一の位を示す■を入れる
str = str + "■";
// 一の位の数だけ空白を入れる
for(i = 0; i < x[1]; i++) str = str + " ";
// 十の位を示す■と一の位を示す■を区別するための空白を入れる。(4 - 十の位の数)個だけ離している
for(i = 0; i < (4 - 1) - x[0] ; i++) str = str + " ";
// 十の位の数だけ■を入れる
for(i = 0; i <= x[0]; i++) str = str + "■";

return str;
}

//
// 半角数字を漢数字に変換する関数
// 0~9は〇~九、10~99は十~九十九、100以上は一〇〇…に変換
// 半角数字以外は無変換
//
function hankaku2kansuji(arg) {
var res = "";
var tmpString = "";
var tmpNum = 0;

arg += "";

// 数字以外の文字がある場合の処理
if(arg.match(/[^0-9]/)) {
for(tmpNum = 0; tmpNum < arg.length; tmpNum++) {
// 数字の場合の処理
if(arg[tmpNum].match(/[0-9]/)) {
tmpString += arg[tmpNum];
// 次の文字が数字でない場合、漢数字に変換する
if(arg[tmpNum + 1].match(/[0-9]/) == null) {
res += hankaku2kansuji_main(tmpString);
tmpString = "";
}
}
else
res += arg[tmpNum];
}
} else res = hankaku2kansuji_main(arg);

return res;
}

//
// 半角数字を漢数字に変換するメイン関数
// 0~9は〇~九、10~99は十~九十九、100以上は一〇〇…に変換
//
// 引 数:半角数字
// 戻り値:漢数字
//
function hankaku2kansuji_main(argNum) {
var kansuji = new Array("〇","一","二","三","四","五","六","七","八","九");
var res = "";
var tmpNum = 0;
// 1~9までの処理
if(Math.floor(argNum / 10) < 1) {
res = kansuji[(argNum)];
// 10~99までの処理
} else if( (tmpNum = Math.floor(argNum / 10) ) < 10) {
// 10のみの処理
if(argNum == 10)
res = "十";
// 11~19までの処理
else if(tmpNum <= 1)
res = "十" + kansuji[((argNum % 10) + "")[0]];
// 20~99までで10で割り切れる場合の処理
else if(argNum % 10 == 0)
res = kansuji[tmpNum] + "十";
else
res = kansuji[tmpNum] + "十" + kansuji[( (argNum % 10) + "")[0]];
// 100以上の処理
} else {
argNum = argNum + "";
for(tmpNum = 0; tmpNum < argNum.length; tmpNum++)
res += kansuji[argNum[tmpNum][0]];
}
return res;
}


//
// 半角数字を漢数字に変換する関数
//
//function hankaku2kansuji(arg) {
// var kansuji = new Array("〇","一","二","三","四","五","六","七","八","九");
// var str = "";
// var i;
// for (i = 0; i < arg.toString().length; i++) str = str + kansuji[arg.toString()[i]];
// return str;
//}

PDFファイルを中綴じ8P掛で面付するスクリプト

PDFデータを中綴じで8ページ折りの状態で面付します。

//
// PDFデータを中綴じ8P掛で面付するスクリプト
//

//JavaScript デバッガを有効にする。
//alert("JavaScript Debugger On");
//$.level = 2;

const A4W = 210, A4H = 297, B5W = 182, B5H = 257;
var foldingCount; //折数
var fileRef; //PDFファイルの絶対パス

var ImpPageTable = new Array;

var ImpPageTable2 = new Array;
ImpPageTable2 = [[4, 5, 8, 1], [6, 3, 2, 7]];
var BLEED = 3;
var tachikeiWeight = "0.1mm";
var bindingStyle;

// デフォルトフォントの設定
app.textDefaults.appliedFont = app.fonts.item("ヒラギノ明朝 Pro W3");

var myDDpageStyle = new Array("A4", "B5", "A5");

//ページ数のドロップダウンアイテム作成
var myDDTotalPage = new Array();
for(i = 0; i < 16; i++) {
myDDTotalPage[i] = (i + 1) * 8 + "";
}

myDisplayDialog();

function myDisplayDialog() {
myDialog = app.dialogs.add( {name:"PDF中綴じ8ページ掛スクリプト"} );

with(myDialog.dialogColumns.add() ){
with(borderPanels.add()){
staticTexts.add({staticLabel:"用紙設定"});
// 用紙サイズのドロップダウンメニュー作成
var myDropDown2 = dropdowns.add({stringList:myDDpageStyle, selectedIndex:0});
//用紙縦・横選択ラジオボタン作成
with(myRadioBotton = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"縦 ", checkedState:true});
radiobuttonControls.add({staticLabel:"横"});
myCheckBox = checkboxControls.add({staticLabel:"塗り足し有", checkedState:false});
}
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"ページ数 "});
// ページ数設定ドロップダウンメニューの作成
var myDropDown = dropdowns.add( {stringList:myDDTotalPage, selectedIndex:0} );
//綴じ方向選択ラジオボタン作成
staticTexts.add({staticLabel:" 綴じ方向"});
with(myRadioBotton2 = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"左綴じ天袋", checkedState:true});
radiobuttonControls.add({staticLabel:"右綴じ地袋"});
}
}
} // Dialogメニュー表示後のアクション
var myReturn = myDialog.show();
// OKを押された時
if (myReturn == true) {
myDocumentSize = myDropDown2.selectedIndex; // 用紙の大きさ
myDocumentDirection = myRadioBotton.selectedButton; // 用紙の方向
// A4縦
if ( (myDocumentSize == 0) && (myDocumentDirection == 0) ) {
DocumentWidth = A4W;
DocumentHeight = A4H;
// A4横
} else if ( (myDocumentSize == 0) && (myDocumentDirection == 1) ) {
DocumentWidth = A4H;
DocumentHeight = A4W;
// B5縦
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 0) ) {
DocumentWidth = B5W;
DocumentHeight = B5H;
// B5横
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 1) ) {
DocumentWidth = B5H;
DocumentHeight = B5W;
}
bleedStatus = myCheckBox.checkedState;
totalPage = eval(myDDTotalPage[myDropDown.selectedIndex]);
bindingStyle = eval(myRadioBotton2.selectedButton);
myDialog.destroy();
//PDFファイル選択ダイアログを表示
fileRef = File.openDialog("面付するPDFファイルを選択してください", "PDFファイル:*.pdf" );
if(fileRef != null) {
impositionMain();
}
} else {
//ダイアログ破棄
myDialog.destroy();
}
}

function impositionMain() {

//新規ドキュメントの作成
var myDocument = app.documents.add();

//ドキュメントサイズを設定(横2倍 縦2倍+ドブ×2 単ページ表示 左綴じ 横置き)
with (myDocument.documentPreferences) {
pageWidth = DocumentWidth * 2;
pageHeight = DocumentHeight * 2 + BLEED * 2;
facingPages = false;
pageBinding = PageBindingOptions.leftToRight;
pageOrientation = PageOrientation.portrait;
slugTopOffset = 20;
slugBottomOffset = 20;
slugInsideOrLeftOffset = 20;
slugRightOrOutsideOffset = 20;
}

//不要なマスターを削除
myDocument.masterSpreads.item(0).pages.item(0).remove();
//マスターの全マージンを0mmに設定
with (myDocument.masterSpreads.item(0).pages.item(0)) {
editUnits = MeasurementUnits.millimeters;
with (marginPreferences) {
right = 0;
left = 0;
top = 0;
bottom = 0;
}
}

//レイアウトグリッド非表示
myDocument.cjkGridPreferences.showAllLayoutGrids = false;

//ガイドライン作成
horizontalGuidelineBound = new Array(DocumentHeight / 2, DocumentHeight, DocumentHeight + BLEED, DocumentHeight + BLEED * 2, DocumentHeight * 1.5 + BLEED * 2);
verticalGuidelineBound = new Array(DocumentWidth / 2, DocumentWidth, DocumentWidth * 1.5);
for(i = 0; i < horizontalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.horizontal;
myGuide.location = horizontalGuidelineBound[i];
myGuide.fitToPage = true;
}
for(i = 0; i < verticalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.vertical;
myGuide.location = verticalGuidelineBound[i];
myGuide.fitToPage = true;
}

//マスターAに裁ち罫を入れる
var tachikeiBounds = new Array(4);
tachikeiBounds[0] = [ [-BLEED - 15, DocumentHeight], [-BLEED, DocumentHeight] ];
tachikeiBounds[1] = [ [-BLEED - 15, DocumentHeight + BLEED * 2], [-BLEED, DocumentHeight + BLEED * 2] ];
tachikeiBounds[2] = [ [DocumentWidth * 2 + BLEED, DocumentHeight], [DocumentWidth * 2 + BLEED + 15, DocumentHeight] ];
tachikeiBounds[3] = [ [DocumentWidth * 2 + BLEED, DocumentHeight + BLEED * 2], [DocumentWidth * 2 + BLEED + 15, DocumentHeight + BLEED * 2] ];
var myTachikei;
var myRegistrationColor = myDocument.colors.item("Registration");
for(i = 0; i < 4; i++) {
myTachikei = myDocument.masterSpreads.item(0).rectangles.add();
myTachikei.paths.item(0).entirePath = tachikeiBounds[i];
myTachikei.strokeColor = myRegistrationColor;
myTachikei.strokeWeight = tachikeiWeight;
}

//総ページ数を指定する
myDocument.documentPreferences.pagesPerDocument = totalPage / 4;

//pdfのページ番号を配置する順序で並び替えた配列変数を作る
makeImpPageTable();

//1ページあたり4つの四角形オブジェクトを作り、PDFファイルを画像として貼り込む
for(i = 0 ; i < totalPage / 4; i ++) {

//マスターAに設定
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("A-マスター");

//合い番を入れる
myBackSignTextFrame3 = myDocument.pages[i].textFrames.add();
with (myBackSignTextFrame3) {
geometricBounds = [DocumentHeight * 2 + BLEED * 2 + 10, DocumentWidth + 46.0, DocumentHeight * 2 + BLEED * 2 + 6, DocumentWidth + 18.0];
texts[0].pointSize = "16Q";
}
if(i % 2 == 0)
myBackSignTextFrame3.contents = ((i + 2) >>> 1) + "折オモテ";
else
myBackSignTextFrame3.contents = ((i + 2) >>> 1) + "折ウラ";

for(j = 0; j < 4; j++) {
var impositionBounds = new Array(4);
impositionBounds[0] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth, DocumentHeight + BLEED * 2 ,0];
impositionBounds[1] = [DocumentHeight * 2 + BLEED * 2, DocumentWidth * 2, DocumentHeight + BLEED * 2 ,DocumentWidth];
impositionBounds[2] = [DocumentHeight, DocumentWidth * 2, 0, DocumentWidth];
impositionBounds[3] = [DocumentHeight, DocumentWidth, 0, 0];

var impositionBoundsWithBleed = new Array(4);
impositionBoundsWithBleed[0] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth + BLEED, DocumentHeight + BLEED ,-BLEED];
impositionBoundsWithBleed[1] = [DocumentHeight * 2 + BLEED * 3, DocumentWidth * 2 + BLEED, DocumentHeight + BLEED ,DocumentWidth - BLEED];
impositionBoundsWithBleed[2] = [DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth - BLEED];
impositionBoundsWithBleed[3] = [DocumentHeight + BLEED, DocumentWidth + BLEED, -BLEED, -BLEED];

var impRotaionAngleLeftBinding = new Array(0, 0, 180, 180);
var impRotaionAngleRightBinding = new Array(180, 180, 0, 0);

//画像配置のために四角形オブジェクト作成
myRectangle = myDocument.pages[i].rectangles.add();
//オブジェクトの属性を設定(線・塗りともに透明 グラフィック形式)
myRectangle.strokeColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.fillColor = myDocument.swatches.item(0, 0, 0, 0);
myRectangle.contentType = ContentType.graphicType;

//綴じ方によりPDFの配置角度を変化させる
if(bindingStyle == 0)
myRectangle.absoluteRotationAngle = impRotaionAngleLeftBinding[j];
else if(bindingStyle == 1)
myRectangle.absoluteRotationAngle = impRotaionAngleRightBinding[j];

//オブジェクトの位置、大きさを設定(塗り足しの有無により位置、大きさを変更)
if(bleedStatus == true)
myRectangle.geometricBounds = impositionBoundsWithBleed[j];
else
myRectangle.geometricBounds = impositionBounds[j];

//PDFデータをメディアサイズに設定
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;
//PDFのページを設定
app.pdfPlacePreferences.pageNumber = ImpPageTable[i][j];
//PDFファイルを四角形オブジェクトに貼り込む
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myRectangle.place(fileRef)[0]; // CS3以上
else
myRectangle.place(fileRef); // CS, CS2

//塗り足し有りの場合の処理
if(bleedStatus == true) {
switch(j) {
case 0:
myRectangle.geometricBounds = ([DocumentHeight * 2 + BLEED * 3, DocumentWidth, DocumentHeight + BLEED, -BLEED]);
break;
case 1:
myRectangle.geometricBounds = ([DocumentHeight * 2 + BLEED * 3, DocumentWidth * 2 + BLEED, DocumentHeight + BLEED, DocumentWidth]);
break;
case 2:
myRectangle.geometricBounds = ([DocumentHeight + BLEED, DocumentWidth * 2 + BLEED, -BLEED, DocumentWidth]);
break;
case 3:
myRectangle.geometricBounds = ([DocumentHeight + BLEED, DocumentWidth, -BLEED, -BLEED]);
break;
}
}
}
}
// 1ページ目に戻す
app.activeWindow.activePage = myDocument.pages[0];
}

//PDFのページ番号を配置する順序で並び替える関数
function makeImpPageTable() {
var i = 0;

for(j = 0; j < totalPage / 4; j++) {
ImpPageTable[j] = new Array(4);
for(k = 0; k < 4; k++) {
switch(i % 8) {
case 0:
n = totalPage - (i >>> 1);
break;
case 1:
n = (i >>> 1) + 1;
break;
case 2:
n = (i >>> 1) + 3;
break;
case 3:
n = totalPage - (i >>> 1) - 2;
break;
case 4:
n = i >>> 1;
break;
case 5:
n = totalPage - (i >>> 1) + 1;
break;
case 6:
n = totalPage - (i >>> 1) + 1;
break;
case 7:
n = i >>> 1;
break;
}
ImpPageTable[j][k] = n;
i++;
}
}
}

PDFファイルを中綴じで面付するスクリプト(2UPバージョン)

PDFファイルを読み込んで中綴じの状態で面付するスクリプトです。
出力は2UPで、A5, B5, A4サイズで64ページまでできます。
ただしクリープ等はできません。
CSからCS3まで動作すると思います。

// 中綴じ面付プログラム Ver.0.01
// 概要:PDFファイルをダイアログで指定したフォーマットで
//   中綴じ面付けを行う
// 動作確認環境: IndesignCS For Windows, Windows XP Home Edition
//

const A4VW = 210, A4VH = 297, B5VW = 182, B5VH = 257, BLEED = 3;
const A5VW = 148, A5VH = 210
var TotalPage, DocumentWidth, DocumentHeight;
var myDDpageStyle = new Array("A4", "B5", "A5");
var myDocumentBinding;
var myDocumentSize;
var myDocumentDirection;

var FilePath; //PDFファイルの絶対パス
var bleedStatus; //裁ち落としの有無

// デフォルトフォントの設定
app.textDefaults.appliedFont = app.fonts.item("ヒラギノ明朝 Pro W3");

//ページ数のドロップダウンアイテム作成
var myDDTotalPage = new Array();
for(i = 0; i < 16; i++) {
myDDTotalPage[i] = (i + 1) * 4 + "";
}

//Dialogメニューを表示
myDisplayDialog();

function myDisplayDialog() {
var myDialog = app.dialogs.add( {name:"PDF中綴じ/2P出力スクリプト"} );
with(myDialog.dialogColumns.add() ){
with(borderPanels.add()){
staticTexts.add({staticLabel:"用紙設定"});
// 用紙サイズのドロップダウンメニュー作成
var myDropDown2 = dropdowns.add({stringList:myDDpageStyle, selectedIndex:0});
//用紙縦・横選択ラジオボタン作成
with(myRadioBotton = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"縦 ", checkedState:true});
radiobuttonControls.add({staticLabel:"横"});
}
//裁ち落とし有無のチェックボックス作成
myCheckBox = checkboxControls.add({staticLabel:"塗り足し有", checkedState:false});
}
with(borderPanels.add()){
staticTexts.add({staticLabel:"ページ数 "});
// ページ数設定ドロップダウンメニューの作成
var myDropDown = dropdowns.add( {stringList:myDDTotalPage, selectedIndex:0} );
//綴じ方向選択ラジオボタン作成
staticTexts.add({staticLabel:" 綴じ方向"});
with(myRadioBotton2 = radiobuttonGroups.add()) {
radiobuttonControls.add({staticLabel:"左(横書き)", checkedState:true});
radiobuttonControls.add({staticLabel:"右(縦書き)"});
}
}
}
// Dialogメニュー表示後のアクション
var myReturn = myDialog.show();
// OKを押された時
if (myReturn == true) {
myDocumentSize = myDropDown2.selectedIndex; // 用紙の大きさ
myDocumentDirection = myRadioBotton.selectedButton; // 用紙の方向
myDocumentBinding = myRadioBotton2.selectedButton; // 綴じ方向
// A4縦
if ( (myDocumentSize == 0) && (myDocumentDirection == 0) ) {
DocumentWidth = A4VW;
DocumentHeight = A4VH;
// A4横
} else if ( (myDocumentSize == 0) && (myDocumentDirection == 1) ) {
DocumentWidth = A4VH;
DocumentHeight = A4VW;
// B5縦
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 0) ) {
DocumentWidth = B5VW;
DocumentHeight = B5VH;
// B5横
} else if ( (myDocumentSize == 1) && (myDocumentDirection == 1) ) {
DocumentWidth = B5VH;
DocumentHeight = B5VW;
// A5縦
} else if ( (myDocumentSize == 2) && (myDocumentDirection == 0) ) {
DocumentWidth = A5VW;
DocumentHeight = A5VH;
// A5横
} else if ( (myDocumentSize == 2) && (myDocumentDirection == 1) ) {
DocumentWidth = A5VH;
DocumentHeight = A5VW;
}
bleedStatus = myCheckBox.checkedState;
TotalPage = myDDTotalPage[myDropDown.selectedIndex];
myDialog.destroy();
//PDFファイル選択ダイアログを表示
fileRef = File.openDialog("PDFファイルを選択してください", "PDFファイル:*.pdf" );
//面付メインルーチンを実行する
impositionMain();
} else {
//ダイアログ破棄
myDialog.destroy();
}
}

// 面付けのメインプログラム
function impositionMain() {
var myDocument = app.documents.add();
//面付けのため横2倍サイズのアートボードを作成
with (myDocument.documentPreferences) {
pageWidth = DocumentWidth * 2;
pageHeight = DocumentHeight;
facingPages = false; //単ページ表示(見開きではない)
pagesPerDocument = TotalPage / 2;
pageBinding = PageBindingOptions.leftToRight;
pageOrientation = PageOrientation.landscape;
}
//マスターの全マージンを0mmに設定
with (document.masterSpreads.item(0).pages.item(0)) {
editUnits = MeasurementUnits.millimeters;
with (marginPreferences) {
right = 0;
left = 0;
top = 0;
bottom = 0;
}
}

//レイアウトグリッド非表示
myDocument.cjkGridPreferences.showAllLayoutGrids = false;

//ガイドライン作成
verticalGuidelineBound = new Array(DocumentWidth / 2, DocumentWidth, DocumentWidth * 1.5);
//横に1本
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.horizontal;
myGuide.location = DocumentHeight / 2;
myGuide.fitToPage = true;
//縦に3本
for(i = 0; i < verticalGuidelineBound.length; i ++) {
myGuide = myDocument.masterSpreads.item(0).guides.add();
myGuide.orientation = HorizontalOrVertical.vertical;
myGuide.location = verticalGuidelineBound[i];
myGuide.fitToPage = true;
}
//全ページにデフォルトのマスタースプレッドを適用する
for (i = 0; i < myDocument.documentPreferences.pagesPerDocument; i++) {
myDocument.pages.item(i).appliedMaster = myDocument.masterSpreads.item("A-マスター");
}
//面付けページ番号テーブル生成
var ImpPageTable = new Array();
//左綴じ(横書き)の場合の処理
if (myDocumentBinding == 0) {
for(i = 0; i < TotalPage; i++) {
if( (i % 4 == 0) || ((i + 1) % 4 == 0) )
ImpPageTable[i] = TotalPage - (i >>> 1);
else if( (i % 2 == 0) || ((i + 1) % 2 == 0) )
ImpPageTable[i] = (i >>> 1) + 1;
}
//右綴じ(縦書き)の場合の処理
} else {
for(i = 0; i < TotalPage; i++) {
if( (i % 4 == 0) || ((i + 1) % 4 == 0) )
ImpPageTable[i] = (i >>> 1) + 1;
else if( (i % 2 == 0) || ((i + 1) % 2 == 0) )
ImpPageTable[i] = TotalPage - (i >>> 1);
}
}
//PDFはメディアサイズで貼込む
app.pdfPlacePreferences.pdfCrop = PDFCrop.cropMedia;
//InDesignでのPDFファイル貼り込み方法
//テキストフレームを作成して、それにPDFファイル名を指定する
for (i = 0; i < TotalPage; i++) {
//貼込むPDFファイルのページ数を設定
app.pdfPlacePreferences.pageNumber = ImpPageTable[i];
//画像貼り込み用のテキストフレームを作成
myTextFrame = myDocument.pages.item(Math.floor(i / 2) ).textFrames.add();
//テキストフレームの線・塗りの色は無し
myTextFrame.strokeColor = myDocument.swatches.item(0, 0, 0, 0);
myTextFrame.fillColor = myDocument.swatches.item(0, 0, 0, 0);
myTextFrame.contentType = ContentType.graphicType;
//テキストフレームの位置を指定
if (i % 2 == 0) {
//左側
if(bleedStatus == true) { //裁ち落とし有
myTextFrame.geometricBounds = [-BLEED, -BLEED, DocumentHeight + BLEED, DocumentWidth];
//テキストフレームに画像ファイル名を指定する
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myTextFrame.place(fileRef)[0]; // CS3以上
else
myTextFrame.place(fileRef); // CS, CS2
} else { //裁ち落とし無
myTextFrame.geometricBounds = [0, 0, DocumentHeight, DocumentWidth];
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myTextFrame.place(fileRef)[0]; // CS3以上
else
myTextFrame.place(fileRef); // CS, CS2
} myTextFrame.geometricBounds = [-BLEED, -BLEED, DocumentHeight + BLEED, DocumentWidth];
} else {
//右側
if(bleedStatus == true) { //裁ち落とし有
myTextFrame.geometricBounds = [-BLEED, DocumentWidth - BLEED, DocumentHeight + BLEED, DocumentWidth * 2 + BLEED];
//テキストフレームに画像ファイル名を指定する
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myTextFrame.place(fileRef)[0]; // CS3以上
else
myTextFrame.place(fileRef); // CS, CS2
myTextFrame.geometricBounds = [-BLEED, DocumentWidth, DocumentHeight + BLEED, DocumentWidth * 2 + BLEED];
} else { //裁ち落とし無
myTextFrame.geometricBounds = [0, DocumentWidth, DocumentHeight, DocumentWidth * 2];
//テキストフレームに画像ファイル名を指定する
if( (isNaN(app.version) ) && (parseInt(app.version) >= 5) )
myTextFrame.place(fileRef)[0]; // CS3以上
else
myTextFrame.place(fileRef); // CS, CS2
myTextFrame.geometricBounds = [-BLEED, DocumentWidth, DocumentHeight + BLEED, DocumentWidth * 2 + BLEED];
}
}
}
// 1ページ目に戻す
app.activeWindow.activePage = myDocument.pages[0];
}

数字1桁は全角、2桁以上は半角に変換するスクリプト

Indesign CS2のJavaScriptを使った、数字1桁を全角、2桁以上を半角に変換するスクリプトです。
テキストファイルを読み込んで変換し、再度テキストファイルに書き戻します。

//
// 数字1桁は全角、2桁以上は半角に変換するスクリプト
//

var tmpFileObj;
var srcText, distText;

//ダイアログで元ファイルを指定する
var srcFileRef = File.openDialog("txtファイルを選択してください", "txtファイル:*.txt" );
var srcFileObj = new File(srcFileRef);

//元ファイルをReadOnlyで開く
var flag = srcFileObj.open("r");

//ファイルオープンに成功した場合
if (flag == true) {
//作業用ファイルのファイル名を決定する。パスは元ファイルと同じ
do {
tmpFileObj = new File(srcFileObj.path + "/" + "hoge" + Math.floor(Math.random() * 10000) + 1 + ".tmp");
} while(tmpFileObj.exist)

//作業用ファイルをWrite属性で開く
tmpFileObj.open("w");

//新しい保存ファイルのエンコードは元ファイルと同じ
tmpFileObj.encoding = srcFileObj.encoding;

while(!srcFileObj.eof) {
srcText = srcFileObj.readln();
distText = numberConvert(srcText);
tmpFileObj.writeln(distText);
}

//元ファイル、作業用ファイルを閉じる
srcFileObj.close();
tmpFileObj.close();

do {
//保存ダイアログで保存するファイル名を指定する
distFileRef = File.saveDialog("保存", "txtファイル:*.txt" );
//OKが押された場合の処理
if(distFileRef != null) {
var distFileObj = new File(distFileRef);
//同じ名前のファイルがあった場合、上書き保存確認ダイアログを出す
if(distFileObj.exists) {
res = confirm("上書き保存しますか?");
//OKが押されたら元ファイルを削除、キャンセルならばループ先頭へ
if(res) distFileObj.remove()
else continue;
}
//作業用ファイルの名前を保存ファイル名にリネームし、ファイルオブジェクトを削除する
tmpFileObj.rename(distFileObj.name);
delete distFileObj;
break;
} else {
//保存ダイアログでキャンセルが押されたら作業用ファイルを削除する
tmpFileObj.remove();
break;
}
} while(1);

//ファイルオブジェクトを削除する
delete srcFileObj;
delete tmpFileObj;

} else {
alert("ファイルが開けませんでした。"); // ファイルオープンに失敗した場合
}

//
// 任意の半角数字1文字の前後が数字でない場合はその数字を全角に変換する関数
//
function numberConvert(srcText) {

var tmpStr = "";

// 全角数字を半角数字に変換
srcText = numZen2Han(srcText);

// 任意の半角数字1文字の前後が数字でない場合
for(i = 0; i < srcText.length; i++) {
switch(i) {
case 0: // 半角数字が行頭にあり、後の文字が数字(ピリオド、カンマ、ハイフンを含む)でない場合
if( (srcText[i].match(/[0-9]/) != null) && (srcText[i+1].match(/[0-9\.\,\-]/) == null) ) tmpStr += numHan2Zen(srcText[i]);
else tmpStr += srcText[i];
break;
case (srcText.length - 1): // 半角数字が行末にあり、前の文字が数字(ピリオド、カンマ、ハイフンを含む)でない場合
if( (srcText[i].match(/[0-9]/) != null) && (srcText[i-1].match(/[0-9\.\,\-]/) == null) ) tmpStr += numHan2Zen(srcText[i]);
else tmpStr += srcText[i];
break;
default: // 半角数字の前後が数字(ピリオド、カンマ、ハイフンを含む)でない場合
if( (srcText[i].match(/[0-9]/) != null) && (srcText[i-1].match(/[0-9\.\,\-]/) == null) && (srcText[i+1].match(/[0-9\.\,]/) == null) )
tmpStr += numHan2Zen(srcText[i]);
else tmpStr += srcText[i];
break;
}
}
return tmpStr;
}

//
// 半角数字→全角数字変換関数
//
function numHan2Zen(arg) {
var zenkakuZero = "0";
var hankakuZero = "0";
var hankakuNine = "9";

var strTmp = "";
var i;

for(i = 0; i < arg.length; i++) {
if( (arg.charCodeAt(i) >= hankakuZero.charCodeAt(0) ) && (arg.charCodeAt(i) <= hankakuNine.charCodeAt(0) ) )
strTmp += String.fromCharCode(arg.charCodeAt(i) - hankakuZero.charCodeAt(0) + zenkakuZero.charCodeAt(0) );
else
strTmp += arg[i];
}
return strTmp;
}

//
// 全角数字→半角数字変換関数
//
function numZen2Han(arg) {
var zenkakuZero = "0";
var zenkakuNine = "9";

var strTmp = "";
var i;

for(i = 0; i < arg.length; i++) {
if( (arg.charCodeAt(i) >= zenkakuZero.charCodeAt(0) ) && (arg.charCodeAt(i) <= zenkakuNine.charCodeAt(0) ) )
strTmp += (arg.charCodeAt(i) - zenkakuZero.charCodeAt(0) + "");
else
strTmp += arg[i];
}
return strTmp;
}

異体字(等幅半角字形)に切り替えるスクリプト

【おわび】
カテゴリーがIllustrator JSになっているにもかかわらず、IndesignのJavascriptを掲載していました。おわびして訂正いたします。

中ゴシックBBBのデフォルト英数字が気にくわなかったので作りました。
テキストフレームやテキストを選択してから実行して下さい。

//
// 選択されたテキストフレームや選択されているテキストの英数字等を
// 異体字(等幅半角字形)に切り替えるスクリプト
//
var docObj = app.activeDocument;
var selObj = docObj.selection;

var i, j;

// オブジェクトが選択されている場合
if(selObj.length != 0) {
// 任意の段落が選択されている場合
if (selObj.typename == "TextRange") {
for(i = 0; i < selObj.length; i++) {
// 対象文字が英数字等の場合、等幅半角字形に切り替える
if(selObj.characters[i].contents.match(/[0-90-9a-zA-Za-zA-Z\-\:]/) != null)
selObj.characters[i].characterAttributes.alternateGlyphs = AlternateGlyphsForm.HALFWIDTH;
}
// テキストフレームが選択されている場合
} else if( (selObj[0].typename == "TextFrame") ) {
for(j = 0; j < selObj.length; j++) {
for(i = 0; i < selObj[j].contents.length; i++) {
// 対象文字が英数字等の場合、対象文字を等幅半角字形に切り替える
if(selObj[j].characters[i].contents.match(/[0-90-9a-zA-Za-zA-Z\-\:]/) != null)
selObj[j].characters[i].characterAttributes.alternateGlyphs = AlternateGlyphsForm.HALFWIDTH;
}
}
}
} else alert("テキスト又はテキストフレームを選択して下さい");

JAN13バーコード(書籍用)を作るスクリプト

去年より書籍用スリップ(通称:ボウズ)の形式が変更になり、バーコードを追加することになりました。このスクリプトはそのときに作ったものです。
OCRフォントはArial Rを使用していますが、各自お使いのフォント名に書き換えてご使用下さい。
//
// JAN13バーコードを作るスクリプト
//

var code = prompt("バーコードデータを入力して下さい(13桁)", 1234567890128);
if(code) {
var myDocument = app.documents.add();
JAN13(50, 50, 11.0, 0, 1.0, code);
}

//
// JAN13バーコード描画関数
//
// 引数: offsetX 描画開始位置X[mm]
// offsetY 描画開始位置Y[mm]
// Height バーコード高さ[mm]
// Angle 描画角度[°] [0, 90, 180, 270のいずれか]
// Devide バーコード描画倍率 [規格上では0.8-2.0] 横幅と線の太さに影響を与える
// JANCode JANコード(13桁)
//
// 戻り値: 正常時はtrue, 桁数不足、またはチェック数字の間違いを訂正を行わない場合はfalse
//
function JAN13(offsetX, offsetY, Height, Angle, Devide, JANCode) {

var TABCODE = String.fromCharCode(9);
var ocrNumFontName = "Arial";
var ocrNumFontStyle = "Regular";
// var ocrNumFontName = "OCR B Std";
// var ocrNumFontStyle = "Medium";

// JANCodeが数値ならば文字列に変換
if(isNaN(JANCode) == true)
JANCode = JANCode + "";

// 数字以外を削除
JANCode = JANCode.replace(/[^0-90-9]/g, "");

// 全角数字->半角数字変換
strTmp = "";
for(i = 0; i < JANCode.length; i++) {
if(JANCode.charCodeAt(i) >= 65296)
strTmp += (JANCode.charCodeAt(i) - 65296) + "";
else
strTmp += JANCode[i];
}
JANCode = strTmp;

// 桁数が足らない場合はfalseを返して終了
if(JANCode.length != 13) {
alert("桁数が足りません");
return false;
}

// チェック数字が計算と一致しない場合の処理
if(JANCode.charAt(12) != getParity(JANCode)) {
// ダイアログ表示
dlgObj = app.dialogs.add({name:"チェック数字エラー"});
clmDlgObj =dlgObj.dialogColumns.add();
clmDlgObj.staticTexts.add({staticLabel : "正しい数値に修正してよろしいですか?"});
res = dlgObj.show();

// OKならば正しい数値に設定、キャンセルならばfalseを返して終了
if(res == true)
JANCode = JANCode.slice(0, JANCode.length - 1) + (getParity(JANCode) + "");
else
return false;
}

const startCode = "101";
const centerCode = "01010";
const endCode = "101";

firstAdditionalCode = new Array(10);
firstAdditionalCode[0] = [1, 1, 1, 1, 1, 1];
firstAdditionalCode[1] = [1, 1, 0, 1, 0, 0];
firstAdditionalCode[2] = [1, 1, 0, 0, 1, 0];
firstAdditionalCode[3] = [1, 1, 0, 0, 0, 1];
firstAdditionalCode[4] = [1, 0, 1, 1, 0, 0];
firstAdditionalCode[5] = [1, 0, 0, 1, 1, 0];
firstAdditionalCode[6] = [1, 0, 0, 0, 1, 1];
firstAdditionalCode[7] = [1, 0, 1, 0, 1, 0];
firstAdditionalCode[8] = [1, 0, 1, 0, 0, 1];
firstAdditionalCode[9] = [1, 0, 0, 1, 0, 1];

oddParityL = new Array(10);
oddParityL[0] = [0, 0, 0, 1, 1, 0, 1];
oddParityL[1] = [0, 0, 1, 1, 0, 0, 1];
oddParityL[2] = [0, 0, 1, 0, 0, 1, 1];
oddParityL[3] = [0, 1, 1, 1, 1, 0, 1];
oddParityL[4] = [0, 1, 0, 0, 0, 1, 1];
oddParityL[5] = [0, 1, 1, 0, 0, 0, 1];
oddParityL[6] = [0, 1, 0, 1, 1, 1, 1];
oddParityL[7] = [0, 1, 1, 1, 0, 1, 1];
oddParityL[8] = [0, 1, 1, 0, 1, 1, 1];
oddParityL[9] = [0, 0, 0, 1, 0, 1, 1];

evenParityL = new Array(10);
evenParityL[0] = [0, 1, 0, 0, 1, 1, 1];
evenParityL[1] = [0, 1, 1, 0, 0, 1, 1];
evenParityL[2] = [0, 0, 1, 1, 0, 1, 1];
evenParityL[3] = [0, 1, 0, 0, 0, 0, 1];
evenParityL[4] = [0, 0, 1, 1, 1, 0, 1];
evenParityL[5] = [0, 1, 1, 1, 0, 0, 1];
evenParityL[6] = [0, 0, 0, 0, 1, 0, 1];
evenParityL[7] = [0, 0, 1, 0, 0, 0, 1];
evenParityL[8] = [0, 0, 0, 1, 0, 0, 1];
evenParityL[9] = [0, 0, 1, 0, 1, 1, 1];

evenParityR = new Array(10);
evenParityR[0] = [1, 1, 1, 0, 0, 1, 0];
evenParityR[1] = [1, 1, 0, 0, 1, 1, 0];
evenParityR[2] = [1, 1, 0, 1, 1, 0, 0];
evenParityR[3] = [1, 0, 0, 0, 0, 1, 0];
evenParityR[4] = [1, 0, 1, 1, 1, 0, 0];
evenParityR[5] = [1, 0, 0, 1, 1, 1, 0];
evenParityR[6] = [1, 0, 1, 0, 0, 0, 0];
evenParityR[7] = [1, 0, 0, 0, 1, 0, 0];
evenParityR[8] = [1, 0, 0, 1, 0, 0, 0];
evenParityR[9] = [1, 1, 1, 0, 1, 0, 0];

const moduleWidth = 0.33 * Devide;

var barcodeBinaryData = new Array();

var posX1 = posY1 = posX2 = posY2 = 0.0;

FAC = new Array;
FAC = firstAdditionalCode[eval(JANCode[0])];

// JANコードをバイナリに変換
// 開始コード挿入
barcodeBinaryData += startCode;

// JANコードの2-6桁の番号を挿入
for(i = 1; i <= 6; i++) {
if(FAC[i - 1] == 0) {
for(j = 0; j < evenParityL[eval(JANCode[i])].length; j++)
barcodeBinaryData += evenParityL[eval(JANCode[i])][j];
}
else if(FAC[i - 1] == 1) {
for(j = 0; j < oddParityL[eval(JANCode[i])].length; j++)
barcodeBinaryData += oddParityL[eval(JANCode[i])][j];
}
}

// センターコードを挿入
barcodeBinaryData += centerCode;

// JANコードの7-13桁の番号を挿入
for(i = 7; i < 13; i++) {
for(j = 0; j < evenParityR[eval(JANCode[i])].length; j++)
barcodeBinaryData += evenParityR[eval(JANCode[i])][j];
}

// 終了コードを挿入
barcodeBinaryData += endCode;

//バーコード描画
myBarcodeColor = myDocument.colors.item("Black");

switch(Angle) {
case 0:
posX1 = offsetX + moduleWidth / 2;
posY1 = offsetY;
posX2 = offsetX + moduleWidth / 2;
posY2 = offsetY + Height;
break;
case 90:
posX1 = offsetX;
posY1 = offsetY - moduleWidth / 2;
posX2 = offsetX + Height;
posY2 = offsetY - moduleWidth / 2;
break;
case 180:
posX1 = offsetX - moduleWidth / 2;
posY1 = offsetY;
posX2 = offsetX - moduleWidth / 2;;
posY2 = offsetY - Height;
break;
case 270:
posX1 = offsetX;
posY1 = offsetY + moduleWidth / 2;
posX2 = offsetX - Height;
posY2 = offsetY + moduleWidth / 2;
break;
default:
posX1 = offsetX;
posY1 = offsetY;
posX2 = offsetX;
posY2 = offsetY + Height;
break;
}

for(i = 0; i < barcodeBinaryData.length; i++) {
if(barcodeBinaryData[i] == 1) {
myRectangle = app.activeDocument.rectangles.add();
myRectangle.strokeColor = myBarcodeColor;
myRectangle.strokeWeight = moduleWidth + "mm";
myRectangle.paths.item(0).entirePath = [[posX1 + "mm", posY1 + "mm"],[posX2 + "mm", posY2 + "mm"]];
}
switch(Angle) {
case 0:
posX1 += moduleWidth;
posX2 += moduleWidth;
break;
case 90:
posY1 -= moduleWidth;
posY2 -= moduleWidth;
break;
case 180:
posX1 -= moduleWidth;
posX2 -= moduleWidth;
break;
case 270:
posY1 += moduleWidth;
posY2 += moduleWidth;
break;
default:
posX1 += moduleWidth;
posX2 += moduleWidth;
break;
}
}

//OCR数字の付加
var ocrNumberSize = 13 * Devide; // unit = Q
var ocrNumberFrameSize = 31.35 * Devide; // unit = mm
const ocrNumberPosOffesetX = 0.00; // unit = mm
const ocrNumberPosOffesetY = 0.75; // unit = mm

myTextFrame = app.activeDocument.textFrames.add();
with(myTextFrame) {
texts[0].pointSize = ocrNumberSize + "Q";
contents = JANCode;

// CSでのフォント設定
// ※CSのapp.versionはNumber型の3、CS2はstring型でマイナーバージョンを含めた形でそれぞれ返ってくるので注意
if( !(isNaN(app.version) ) && (app.version < 4) ) {
paragraphs[0].appliedFont = app.fonts.item(ocrNumFontName);
paragraphs[0].fontStyle = ocrNumFontStyle;
} else
// CS2以降でのフォント設定
paragraphs[0].appliedFont = app.fonts.item(ocrNumFontName + TABCODE + ocrNumFontStyle);

paragraphs[0].justification = Justification.fullyJustified;
rotationAngle = Angle;
}

switch(Angle) {
case 0:
posX1 = offsetX - ((ocrNumberFrameSize - barcodeBinaryData.length * moduleWidth) / 2) + ocrNumberPosOffesetX;
posY1 = offsetY + Height + ocrNumberPosOffesetY;
posX2 = posX1 + ocrNumberFrameSize;
posY2 = offsetY + Height + ocrNumberPosOffesetY + q2mm(ocrNumberSize);
break;
case 90:
posX1 = offsetX + Height + ocrNumberPosOffesetY;
posY1 = offsetY + ((ocrNumberFrameSize - barcodeBinaryData.length * moduleWidth) / 2) + ocrNumberPosOffesetX;
posX2 = offsetX + Height + ocrNumberPosOffesetY + q2mm(ocrNumberSize);
posY2 = posY1 - ocrNumberFrameSize;
break;
case 180:
posX1 = offsetX - barcodeBinaryData.length * moduleWidth - ((ocrNumberFrameSize - barcodeBinaryData.length * moduleWidth) / 2) + ocrNumberPosOffesetX;
posY1 = offsetY - Height - q2mm(ocrNumberSize) - ocrNumberPosOffesetY;
posX2 = posX1 + ocrNumberFrameSize;
posY2 = offsetY - Height - ocrNumberPosOffesetY;
break;
case 270:
posX1 = offsetX - Height - q2mm(ocrNumberSize) - ocrNumberPosOffesetY;
posY1 = offsetY + barcodeBinaryData.length * moduleWidth + ((ocrNumberFrameSize - barcodeBinaryData.length * moduleWidth) / 2) + ocrNumberPosOffesetX;
posX2 = offsetX - Height - ocrNumberPosOffesetY;
posY2 = posY1 - ocrNumberFrameSize;
break;
default:
posX1 = offsetX - ((ocrNumberFrameSize - barcodeBinaryData.length * moduleWidth) / 2) + ocrNumberPosOffesetX;
posY1 = offsetY + Height + ocrNumberPosOffesetY;
posX2 = posX1 + ocrNumberFrameSize;
posY2 = offsetY + Height + ocrNumberPosOffesetY + q2mm(ocrNumberSize);
break;
}
myTextFrame.geometricBounds = [posY2 + "mm", posX2 + "mm", posY1 + "mm", posX1 + "mm"];

return true;
}

//
// JANコードのチェック数字(パリティーコード)を求める関数
//
// [チェック数字の求め方]
// チェック数字を除く12桁のJANコードを、左から数えて奇数桁の数字を合計した数字と
// 偶数桁の数字を合計して3倍した数字を加算し、その数字の一桁目のみを10から引いた
// 数をチェック数字とする。ただし結果が10の場合は0とする。
//
function getParity(arg) {

var odd = even = 0;

if( (arg.length < 12) || (arg.length > 13) ) return false;

for(i = 0; i < 12; i++) {
if(i % 2 == 0)
odd += Number(arg[i]);
else
even += Number(arg[i]);
}
even *= 3;
res = (10 - ( (odd + even) % 10) ) % 10;
return res;
}

function q2mm(arg) {
return arg / 4;
}

青空文庫のルビをIndesignのルビタグに変換する

以前、ルビを扱う仕事があったので関数の動作確認用として作りました。
(注意:青空文庫のルビは1字ずつ区切っていないので全てグループルビになります)

//
// 青空文庫のルビ付きテキストファイルのルビをIndesignのルビタグに変換して
// 書き出すスクリプト
//
// ※ルビ記号のルール
//
// ルビは「《》」で括る
// (例)健三《けんぞう》
//
// ルビの付く文字列の始まりを特定する場合、「|」を用いる
// (例)ある日|小雨《こさめ》が降った
//
// Indesignではグループルビで処理するため、モノルビにしたい場合はルビを全角空白で区切る
// (例)健三《けん ぞう》
//

var tmpFileObj;

//ダイアログで読み込むファイル名(元ファイル)を指定する
var srcFileRef = File.openDialog("ファイルを選択してください", "txtファイル:*.txt" );
var srcFileObj = new File(srcFileRef);

//元ファイルをReadOnlyで開く
var flag = srcFileObj.open("r");

if (flag == true) {
//作業用ファイルのファイル名を決定する。パスは元ファイルと同じ
do {
tmpFileObj = new File(srcFileObj.path + "/" + "hoge" + Math.floor(Math.random() * 10000) + 1 + ".tmp");
} while(tmpFileObj.exist)

//作業用ファイルをWrite属性で開く
tmpFileObj.open("w");
//作業用ファイルのエンコードはUTF-16(Unicodeベタ)
tmpFileObj.encoding = "UTF-16";

//Indesignタグのファイル開始タグを挿入
if(Folder.fs == "Windows")
tmpFileObj.writeln("");
else
tmpFileObj.writeln("");

//元ファイルを1行ずつ読み出し、青空文庫のルビを
//Indesignのルビタグに変換しタグ付きファイルに1行ずつ書き込む
while(!srcFileObj.eof) {
var srcText = srcFileObj.readln();
var distText = addIndesignRubyTag(srcText);
tmpFileObj.writeln(distText);
}

//元ファイル、作業用ファイルを閉じる
srcFileObj.close();
tmpFileObj.close();

do {
//保存ダイアログで保存するファイル名を指定する
distFileRef = File.saveDialog("保存", "txtファイル:*.txt" );
//OKが押された場合の処理
if(distFileRef != null) {
var distFileObj = new File(distFileRef);
//同じ名前のファイルがあった場合、上書き保存確認ダイアログを出す
if(distFileObj.exists) {
res = confirm("上書き保存しますか?");
//OKが押されたら元ファイルを削除、キャンセルならばループ先頭へ
if(res) distFileObj.remove()
else continue;
}
//作業用ファイルの名前を保存ファイル名にリネームし、ファイルオブジェクトを削除する
tmpFileObj.rename(distFileObj.name);
delete distFileObj;
break;
} else {
//保存ダイアログでキャンセルが押されたら作業用ファイルを削除する
tmpFileObj.remove();
break;
}
} while(1);

//ファイルオブジェクトを削除する
delete srcFileObj;
delete tmpFileObj;

} else {
alert("ファイルが開けませんでした。");
}

// 青空文庫のルビをIndesignのルビタグに変換する関数
function addIndesignRubyTag(srcText) {
res = srcText.replace(/([一-龠]+)《(.+?)》/g, "$1");
res = res.replace(/|/g,"");
return res;
}

Mac版、Win版のCS2、Mac版のCS3で動作確認しています。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。