スポンサーサイト

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

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

COMMENTS

COMMENT FORM

TRACKBACK


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

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