#target indesign; export_to_pdf (app.books.item (get_book ())); //============================================================ function export_to_pdf (book) { var data = select_items (book); chapters_to_pdf (data.chapters /*array of file objects*/, data.preset /*string*/); } function chapters_to_pdf (chapters, preset) { var f; var p_list = progress_list (create_list (chapters), 'Exporting PDF...'); for (var i = 0; i < chapters.length; i++) try { p_list[i].text = '+'; app.open (chapters[i], false); f = new File (chapters[i].fullName.replace (/indd$/, 'pdf')); app.pdfExportPreferences.pageRange = PageRange.allPages; app.documents[0].exportFile (ExportFormat.pdfType, f, false, preset ); app.documents[0].close (SaveOptions.no); } catch(_){}; p_list[0].parent.parent.close (); } function first_page (doc) {return String (doc.pages[0].name)} function create_list (f) { var array = []; for (i = 0; i < f.length; i++) array.push (f[i].name); return array } function select_items (book) { var array = []; var book_contents = book.bookContents.everyItem().fullName; for (var i = 0; i < book_contents.length; i++) array[i] = File (book_contents[i]).name; var history = 'pdf_individuals_history.txt'; var presets = app.pdfExportPresets.everyItem().name; var w = new Window ('dialog', book.name + ': export chapters to PDF'); w.alignChildren = ['left', 'top']; w.orientation = 'row'; var g1 = w.add ('group'); g1.alignChildren = 'fill'; g1.minimumSize.width = 200; g1.orientation = 'column'; var list = g1.add ('listbox', undefined, array, {multiselect: true}); list.maximumSize.height = 700; var panel = g1.add ('panel'); panel.orientation = 'row'; panel.add ('statictext', undefined, 'PDF preset: '); var preset_list = panel.add ('dropdownlist', undefined, presets); preset_list.selection = array_pos (read_history (history), presets); var buttons = w.add ('group'); buttons.orientation = 'column'; var select_all = buttons.add ('button', undefined, 'Select all'); var deselect_all = buttons.add ('button', undefined, 'Deselect all'); var invert = buttons.add ('button', undefined, 'Invert selection'); var ok = buttons.add ('button', undefined, 'OK', {name: 'ok'}); var cancel = buttons.add ('button', undefined, 'Cancel', {name:'cancel'}); select_all.preferredSize = deselect_all.preferredSize = [120,20]; invert.preferredSize = ok.preferredSize = cancel.preferredSize = [120,20]; select_all.onClick = function () { var all_items = new Array(); var L = list.items.length; for (var i = 0; i < L; i++) all_items[i] = list.items[i]; list.selection = all_items; } // select all items on start-up select_all.notify(); invert.onClick = function () { var selected_items = new Array(); var L = list.items.length; for (var i = 0; i < L; i++) if (list.items[i].selected == false) selected_items.push (list.items[i]); list.selection = null; list.selection = selected_items; } deselect_all.onClick = function () { list.selection = null; } if (w.show () == 1) { store_history (history, preset_list.selection.text); var selected_docs = get_selected (list, book_contents); w.close (); return {chapters: selected_docs, preset: preset_list.selection.text} } else { w.close (); exit(); } } function get_selected (selected_list, booklist) { var array = []; for (var i = 0; i < selected_list.items.length; i++) if (selected_list.items[i].selected) array.push (booklist[selected_list.items[i].index]); return array } function array_pos (item, array) { for (var i = 0; i < array.length; i++) if (item == array[i]) return i; return 0 } function read_history (s) { var temp = ""; var f = File (script_dir() + s); if (f.exists) { f.open ('r'); var temp = f.read (); f.close (); } return temp } function store_history (s, picked) { var f = File (script_dir() + s); f.open ('w'); f.write (picked); f.close () } function progress_bar (stop, title) { w___ = new Window ('palette', title); pb___ = w___.add ('progressbar', undefined, 0, stop); pb___.preferredSize = [300,20]; w___.show() return pb___; } function progress_list (array, title) { var txt = []; dlg___ = new Window ('palette', title); dlg___.orientation = 'row'; var gr1 = dlg___.add ('group'); gr1.orientation = 'column'; gr1.alignChildren = ['left','top']; for (var i = 0; i < array.length; i++) { txt[i] = gr1.add ('statictext', undefined, ''); txt[i].characters = 1 } var gr2 = dlg___.add ('group'); gr2.minimumSize.width = 200; gr2.orientation = 'column'; gr2.alignChildren = ['left','top']; for (var i = 0; i < array.length; i++) gr2.add ('statictext', undefined, array[i]); dlg___.show(); return txt; } function script_dir() { try {return File (app.activeScript).path + '/'} catch (e) {return File (e.fileName).path + '/'} } function errorM (m) { alert (m, 'Error', true); exit(); } function get_book () { switch (app.books.length) { case 0: alert ("Please open a book."); exit (); case 1: return app.books[0].name; default: return pick_book (); } } function pick_book () { var w = new Window ("dialog", "Select a book"); w.alignChildren = "right"; var g = w.add ("group"); var list = g.add ("listbox", undefined, app.books.everyItem().name); list.minimumSize.width = 250; list.selection = 0; var b = w.add ("group"); b.add ("button", undefined, "OK", {name: "ok"}) b.add ("button", undefined, "Cancel", {name: "cancel"}) if (w.show () == 1) return list.selection.text; else exit (); }