スポンサーサイト

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

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];
}
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

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