0

在 NetSuite 中,我们的一些产品通过“类型”设置为Document的自定义项目字段将MSDS 文档(以 PDF 文件的形式)附加到记录中。打印发票时,我们也希望自动打印出任何相关的 MSDS PDF 文件。SuiteScript 或任何其他扩展 NetSuite 的服务是否可以做到这一点?

(值得一提的是,我们知道可以选择打印 MSDS 文档作为物料清单的一部分,但打印 MSDS 文档和发票似乎并不是 NetSuite 的原生功能。)

4

2 回答 2

1

如果 PDFSET 不能正常工作,您可以使用服务器端语言(例如 Java、Node.js)中的客户端应用程序进行合并。

编写一个 RESTlet 来获取记录的 PDF 和附加的 PDF。RESTlet 将返回 base64 格式的 PDF。

接下来,步骤是在客户端应用程序中获取 PDF 并从 base64 解码并创建 PDF。然后在客户端应用程序中使用流程 API 使用pdftk合并 PDF

PDFtk 是一个命令行工具,因此您可以使用您的编程语言中的流程 API 公平地调用它

下面是 Node.js 中的流程 API 示例

var spawn = require('child_process').spawn;
var pdftk = spawn('pdftk', "invoice.pdf attachment.pdf cat output out1.pdf".split(" "));

    pdftk.on('close', function (code) {
        if(code !==0){
            return console.log('Failed PDF with code: ' + code);
        }
        return console.log ('All good');
    });

以下是流程 API 的 Java 片段

Process process = new ProcessBuilder("pdftk","invoice.pdf", "attachment.pdf", "cat", "output", "merged.pdf").start();
                errorStream = process.getErrorStream();
                errorMessage = readInputStream(errorStream);
                if(process.exitValue() == 0) {
                    trace("successful :)");
                }
于 2015-09-17T06:06:32.937 回答
1

幸运的是,您可以使用高级 HTML/PDF 模板来做到这一点。您的 MSDS 需要位于打印人员可以访问的文件夹中。

查看http://bfo.com/products/report/docs/tags/tags/pdfset.html 然后您的普通发票将位于 pdf 元素中,例如:

<?xml version="1.0"?>
<!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<pdfset>
<pdf> <!-- normal invoice here -->
<head>
...
</pdf>

<#assign msdsSeen='' /> <!-- if can use javascript hash as a set then great. othewise use string -->
<#list record.item as item>
<#if item.custcol_msds_link?has_content><!-- needs to be sourced from item -->
<#assign msdsKey='_'+item.custcol_msds_link+'_' />
<#if msdsSeen?indexOf(msdsKey) == -1>
<#assign msdsSeen=msdsSeen + msdsKey />
<pdf src="${item.custcol_msds_link}" />
</#if> <!-- msds not linked -->
</#if> <!-- has msds -->
</#list>
于 2015-09-14T16:03:09.137 回答