// Command.File.PDFtk // (c) 2022 Felix // Based on tbone's great PDF Toolkit Menu // https://resource.dopus.com/t/pdf-toolkit-menu-pdf-merge-extract-protect-unprotect-organize/22348 // This is a script for Directory Opus. // See https://www.gpsoft.com.au/DScripts/redirect.asp?page=scripts for development information. // Called by Directory Opus to initialize the script function OnInit(initData) { initData.name = "Command.File.PDFtk"; initData.version = "1.0 (2022.03.11)"; initData.copyright = "(c) 2022 Felix"; initData.url = "https://resource.dopus.com/t/command-file-pdftk-a-wrapper-for-pdftk-as-an-internal-command/40771"; initData.desc = "Wrapper for PDF Toolkit as internal command"; initData.default_enable = true; initData.min_version = "12.0"; initData.group = "Column"; var cmd = initData.AddCommand(); cmd.name = "PDFTK"; cmd.method = "OnPDFTK"; cmd.desc = "Wrapper for PDF Toolkit as internal command"; cmd.label = "PDFTK"; cmd.template = "APPENDFROMDEST/S,EXTRACT/K[all,even,odd,range],MERGE/S,MERGEODDEVEN/S,ROTATE/K[left,right,reverse,llrr,rrll],SPLIT/S,PROTECT/S,UNPROTECT/S,COMPRESS/S"; cmd.hide = false; cmd.icon = "rename2"; } var PDFtkBinaryPath = null; // Implement the PDFTK command function OnPDFTK(scriptCmdData) { PDFtkBinaryPath = "\"" + DOpus.FSUtil.Resolve('/pdftoolkit\\bin\\pdftk.exe') + "\""; if(!PDFtkBinaryPath) { Log("Pdftk binary path not found", true); return; } var args = scriptCmdData.func.args; if(args.got_arg.MERGE) Merge(scriptCmdData); else if(args.got_arg.SPLIT) Split(scriptCmdData); else if(args.got_arg.ROTATE) Rotate(scriptCmdData, args.ROTATE.toLowerCase()); else if(args.got_arg.EXTRACT) Extract(scriptCmdData, args.EXTRACT.toLowerCase()); else if(args.got_arg.PROTECT) Protect(scriptCmdData); else if(args.got_arg.UNPROTECT) Unprotect(scriptCmdData); else if(args.got_arg.COMPRESS) Compress(scriptCmdData); else if(args.got_arg.APPENDFROMDEST) AppendFromDest(scriptCmdData); } function Merge(data) { var dlg = DOpus.Dlg; var tab = data.func.sourcetab; var selFiles = tab.selected_files; var cmd = data.func.command; cmd.deselect = false; cmd.SetModifier('runmode', 'hide'); var shell = new ActiveXObject("WScript.Shell"); if (selFiles.count<2) return; var input = dlg.GetString("Enter new *basename* for merged PDF file (will be overwritten if exists):", selFiles(0).name_stem+"_merged", 255, "Ok|Cancel", "Merge PDF", data.func.sourcetab.lister); if (!input) return; var path = (selFiles(0).path+"").replace('(\/|\\\\)$', ""); //var pdftkPath = DOpus.FSUtil.Resolve('/pdftoolkit\\bin\\pdftk.exe'); var pdfFilePaths = PrepItems(selFiles, "realpath").join(" "); cmd.RunCommand('"'+PDFtkBinaryPath+'" '+pdfFilePaths+' cat output "'+path+'\\'+input+'.pdf"'); var mergeTextFiles = true; var textFilePaths = PrepItems(selFiles, "realpath", "", "", false); for(var i=0;i