NetSuite,打印类型的自定义项目字段:文档以及发票

时间:2015-09-11 17:09:55

标签: pdf printing netsuite invoice suitescript

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

(对于它的价值,我们知道printing MSDS documents as part of a Bill of Materials有一个选项,但是打印MSDS文档和发票似乎不是NetSuite原生的。)

2 个答案:

答案 0 :(得分:1)

Luckily you can probably do this with Advanced HTML/PDF templates. Your MSDS needs to be in a folder that is accessible to the person doing the printing.

Check out http://bfo.com/products/report/docs/tags/tags/pdfset.html Then your normal invoice would be inside a pdf element something like:

<?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>

答案 1 :(得分: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');
    });

以下是Process 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 :)");
                }