2016-08-29 22 views
-2

我需要在InDesign中自动创建PDF,方法是观察XML文件的更改,下载XML中引用的所有远程图像(因为InDesign无法与远程图像),将XML转换为引用下载的本地图像路径,加载InDesign模板,然后执行XML合并并将结果导出为PDF。通过FTP自动下载目录

我目前正在侦听对XML文件所做的更改并使用PowerShell启动InDesign,但是我一直在如何获取所需的图像。

我想,不是试图读取XML并拉下引用的图像,我可以下载整个图像目录。我已经考虑通过PowerShell使用类,但使用批处理和.NET脚本不是我的强项,我只能找到下载单个文件或基于CSV的文件列表的示例表现。

我是一名JS开发人员,所以我研究了一个使用像gulp和ftp模块这样的任务运行的Node.js实现,但我不确定这是一个好的解决方案,还是甚至可以做我想做的事。

如果您必须在Windows计算机上执行此操作,那么您的工作流程是什么?

+0

使用'wget'或'curl'不够吗?有一个这样的任务的标准解决方案。还有内置的ftp工具可以用来下载所有的远程文件。 – wOxxOm

+0

我能够通过HTTP服务图像,而不是使用FTP,这使事情变得更容易一些。我的解决方案是一个完整的node.js实现。 – SchattenJager

回答

0

我的解决办法是使用Node.js和受吞掉(使用一饮而尽手表)来创建监听到一个目录编译环境和揭开序幕检测到XML文件时的变化构建:

gulp.task('watchXml', function() { 
    watch('input/*.xml', batch(function (events, done) { 
     gulp.start('build', done); 
    })); 
}); 

我使用npm 请求模块通过HTTP(而不是FTP)下载图像,并使用模块将它们流式传输到本地文件系统。在下载和XSLT完成后,我可以运行shell命令使用child_process推出的InDesign:

var exec = require('child_process').exec; 

gulp.task('shell', function(done) { 
    exec('start "" "C:\\Program Files\\Adobe\\Adobe InDesign CC 2015\\InDesign.exe"', function(err, stdout, stderr) { 
     if (err) { 
      done(); 
      return console.log('error:', err); 
     } 
     console.log('InDesign launched.'); 
     done(); 
    }); 
}); 

从那里,InDesign的启动脚本接管,导入XML,并创建PDF。

+0

请注意,您的解决方案可能会违反InDesign EULA,因为人员(或更糟糕的系统)存放xmls因此运行自动化可能不是InDesign Client许可证所有者。在这样的“服务器”环境中,您需要一个InDesign Server许可证。如果许可所有者存储xml文件并运行您的系统,则此系统将是合法的。 – Loic

+0

@Loic,我感谢你给我留下了可能的法律问题,但你们的例子并不清楚。我从第三方系统(SAP)生成XML,并将文件放置在运行InDesign和node.js应用程序的Windows VM上的共享目录中。这是否违反了EULA?你能否提供有问题的条款,以便我可以查看该语言? – SchattenJager

+0

请参阅/Legal/en_GB/license.html中的第2.1.7.1和2.1.7.2小节:http://img15.hostingpics.net/pics/818141Capturedecran20160916a111053.png – Loic