/* ========================================================================= InDesign ExtendScript NAME: ImportMultipagePDF VERSION: 1.3 AUTHOR: Vitaly Batushev co-Author: Vlad Ossipov (version 1.3) pp.ossipov@inbox.ru ossipov.info DATE : 28.06.2006 Version history: 1.3 + добавлена функция создания нового документа с размерами MediaBox PDF-файла 1.2 Импорт многостраничного PDF с выбором импортируемого диапазона страниц. Пользователь может указать стартовую полосу публикации для импорта. Кроме того доступны четыре варианта размещения на полосе: а) На всю страницу (включая поля); б) На всю страницу (без полей); в) В центр страницы; г) В левый верхний угол страницы. При нехватке страниц для размещения указанного диапазона добавляетя необходимое их количество. Идея версии 1.3: Михаил Юдин Особая благодарность: Олегу Бутрину, и Максиму Стринже за помощь в разработке. Основан на скрипте Дмитрия Злотникова PDFImport для Adobe InDesign 2.x SUPPORT: http://toolbox.rudtp.ru E-MAIL: vbatushev@indesign.rudtp.ru ============================================================================ */ with (app) { var myDocumentNames = new Array; var myPDFFile = File.openDialog('Выберите файл', 'Файлы PDF: *.pdf'); if(myPDFFile == null) { exit(); } myDocumentNames.push("New Document"); for(var myDocumentCounter = 0;myDocumentCounter < app.documents.length; myDocumentCounter++){ myDocumentNames.push(app.documents.item(myDocumentCounter).name); } var myDlg = dialogs.add({name: "Импорт многостраничного PDF: " + myPDFFile.name + " :: ver. 1.3"}) with (myDlg) { with (dialogColumns.add()) { with (borderPanels.add()) { var lblStart = staticTexts.add({staticLabel:"Страницы в PDF: c"}); var txtStart = integerEditboxes.add({editValue: 1, minWidth:51}); var lblEnd = staticTexts.add({staticLabel:"по"}); var txtEnd = integerEditboxes.add({editValue: 1, minWidth:50}); } with (borderPanels.add()) { var lblStartPage = staticTexts.add({staticLabel:"Первая страница для помещения:"}); var txtStartPage = integerEditboxes.add({editValue: 1, minWidth:82}); } with (borderPanels.add()) { var lblPlace = staticTexts.add({staticLabel:"Поместить PDF:"}); var rbGroup = radiobuttonGroups.add(); with(rbGroup) { var rb1 = radiobuttonControls.add({staticLabel:"На всю страницу (включая поля)"}); var rb2 = radiobuttonControls.add({staticLabel:"На всю страницу (без полей)"}); var rb3 = radiobuttonControls.add({staticLabel:"В центр страницы", checkedState: true}); var rb4 = radiobuttonControls.add({staticLabel:"В левый верхний угол страницы"}); } } with (borderPanels.add()) { var lblCrop = staticTexts.add({staticLabel:"Область PDF для помещения:"}); var cropDown = dropdowns.add({stringList:['Bounding Box', 'Artwork', 'Bleed', 'Media', 'Crop', 'Trim'], selectedIndex:3}); } with (borderPanels.add()) { staticTexts.add({staticLabel:"Place PDF in:"}); var myChooseDocumentDropdown = dropdowns.add({stringList:myDocumentNames, selectedIndex:0}); } } } var myResult = myDlg.show(); if(myResult == false) {exit();} if(txtStartPage.editValue == 0) { alert("Значение стартовой страницы равно 0!"); exit();} if(txtStart.editValue == 0) { alert("Значение стартовой страницы PDF равно 0!"); exit();} if(txtEnd.editValue == 0) { alert("Значение конечной страницы PDF равно 0!"); exit();} if(txtEnd.editValue < txtStart.editValue) { alert("Значение конечной страницы PDF меньше значения стартовой страницы PDF!"); exit();} // Определение размеров PDF if (myChooseDocumentDropdown.selectedIndex == 0) { myPDFFile.open("r"); myPDFFile.seek(0, 0) var re = new RegExp("(MediaBox)\\[(.*?)\\]") while ( true ) { var str = myPDFFile.readln() result = re.exec(str) if (RegExp.$1 == 'MediaBox') { newDocSize = RegExp.$2.split(" ") break } } myPDFFile.close() myDoc = app.documents.add(); var myOldXUnits = app.activeDocument.viewPreferences.horizontalMeasurementUnits; var myOldYUnits = app.activeDocument.viewPreferences.verticalMeasurementUnits; app.activeDocument.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.points; app.activeDocument.viewPreferences.verticalMeasurementUnits = MeasurementUnits.points; myDoc.documentPreferences.pageHeight = parseFloat(newDocSize[3]); myDoc.documentPreferences.pageWidth = parseFloat(newDocSize[2]); app.activeDocument.viewPreferences.horizontalMeasurementUnits = myOldXUnits; app.activeDocument.viewPreferences.verticalMeasurementUnits = myOldYUnits; }else{ myDoc = app.documents.item(myChooseDocumentDropdown.selectedIndex-1); } var myPlacePref = pdfPlacePreferences; myPageHeight = myDoc.documentPreferences.pageHeight; myPageWidth = myDoc.documentPreferences.pageWidth; switch (cropDown.selectedIndex) { case 0: myPlacePref.pdfCrop = PDFCrop.cropContent; break; case 1: myPlacePref.pdfCrop = PDFCrop.cropArt; break; case 2: myPlacePref.pdfCrop = PDFCrop.cropBleed; break; case 3: myPlacePref.pdfCrop = PDFCrop.cropMedia; break; case 4: myPlacePref.pdfCrop = PDFCrop.cropPDF; break; case 5: myPlacePref.pdfCrop = PDFCrop.cropTrim; break; } myPH = myDoc.documentPreferences.pageHeight; myPW = myDoc.documentPreferences.pageWidth; myPlacePref.transparentBackground = true; pCount = txtStartPage.editValue; if (pCount > myDoc.pages.length) { for (pa = myDoc.pages.length; pa < pCount; pa++) { myDoc.pages.add(1701733408); } } allPages = (txtEnd.editValue - txtStart.editValue) + pCount; if (allPages > myDoc.pages.length) { for (pa = myDoc.pages.length; pa < allPages; pa++) { myDoc.pages.add(1701733408); } } for (p = txtStart.editValue; p < txtEnd.editValue + 1; p++) { myPlacePref.pageNumber = p; var myPage = myDoc.pages[pCount - 1]; var myFrame = myPage.rectangles.add(); var myPDF = myFrame.place(myPDFFile); myFrame.fit(1718906723); // FitFrameToContent var myBounds = myFrame.geometricBounds; myPDFh = myBounds[2] - myBounds[0]; myPDFw = myBounds[3] - myBounds[1]; var myPageBound = myPage.bounds; var myMargins = myPage.marginPreferences; switch (rbGroup.selectedButton) { case 0: myFrame.geometricBounds = Array(myPageBound[0], myPageBound[1], myPageBound[2], myPageBound[3]); myFrame.fit(1668247152); break; case 1: myFrame.geometricBounds = Array(myPageBound[0] + myMargins.top, myPageBound[1] + myMargins.left, myPageBound[2] - myMargins.bottom, myPageBound[3] - myMargins.right); myFrame.fit(1668247152); break; case 2: myOne = (myPW - myPDFw)/2; myTwo = (myPH - myPDFh)/2; myFrame.move(undefined,[myOne, myTwo]); break; case 3: myFrame.move(undefined,[0, 0]); break; } pCount++; } myDlg.destroy(); exit(); }