【问题标题】:NetSuite, print Custom Item Field of Type:Document along with an InvoiceNetSuite,打印自定义项目字段类型:文档以及发票
【发布时间】:2015-12-08 07:49:52
【问题描述】:

在 NetSuite 中,我们的一些产品通过“类型”设置为 文档。打印发票时,我们也希望自动打印出任何相关的 MSDS PDF 文件。 SuiteScript 或任何其他扩展 NetSuite 的服务是否可以做到这一点?

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

【问题讨论】:

  • 您的意思是要打印记录的 PDF 中嵌入的 Pdf 文档还是要将 PDF 作为单独的文件打印?
  • 基本上,我需要打印一张发票,遍历发票上的每个项目,并打印与这些项目关联的所有 PDF。发票和相关文档是合并到一个文件中还是连续打印都没有关系。唯一的要求是与发票项目相关的 PDF 以某种方式与发票一起打印。提前感谢您提供的任何帮助!
  • 当您在 Netsuite 中打印一条记录时,您会得到一个 pdf 或 html,您的意思是要让 pdf 邮寄或在浏览器选项卡中打开??
  • 标准行为允许用户生成 PDF 格式的发票以供以后打印。我们希望发票 PDF 将所有相关的 MSDS 文档合并到其中。

标签: pdf printing netsuite invoice suitescript


【解决方案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>

【讨论】:

  • 非常非常有帮助!尝试保存模板时出现此错误:由于以下错误,无法保存模板:与元素类型“pdf”关联的属性“src”的值不得包含“ 我已经渲染了 ${item.custcol_msds_link} 内容并验证了它是一个有效的 URL,所以我不知道它从哪里得到 '
  • 您必须粘贴您的代码让我发表评论,但请检查引用字符协议;适当的结束标签等。如果一切都平衡,那么一件简单的事情就是代替 &lt;pdf src... 指令,只需打印出 &lt;!-- ${item.custcol_msds_link} --&gt; 以确保模板正确解释这些值。
  • 我可以看到使用此代码呈现的 PDF 的 URL:&lt;#assign msdsSeen='' /&gt; &lt;!-- if can use javascript hash as a set then great. othewise use string --&gt; &lt;#list record.item as item&gt; &lt;#if item.custcol_msds?has_content&gt;&lt;!-- needs to be sourced from item --&gt; &lt;#assign msdsKey='_'+item.custcol_msds+'_' /&gt; &lt;#if msdsSeen?index_of(msdsKey) == -1&gt; &lt;#assign msdsSeen=msdsSeen + msdsKey /&gt; &lt;pdf&gt; &lt;body&gt; ${item.custcol_msds} &lt;/body&gt; &lt;/pdf&gt; &lt;!-- &lt;pdf src="${item.custcol_msds}" /&gt; --&gt; &lt;/#if&gt; &lt;!-- msds not linked --&gt; &lt;/#if&gt; &lt;!-- has msds --&gt; &lt;/#list&gt;
  • 这里是 item.custcol_msds 的值:system.sandbox.netsuite.com/core/media/media.nl? id=85132&c=951739&h=2fc8ef5a1c00740e41fd&_xt=.pdf
  • 这个怎么样:&lt;pdf src="${item.custcol_msds?xml}" /&gt;
【解决方案2】:

如果 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');
    });

下面是一个 Java sn-p 的 Process APIs

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 :)");
                }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    相关资源
    最近更新 更多