NetSuite实现pdf打印中的条形码的功能

     2020-11-27

     提起NS,在程序员这一块应该不怎么被人知道,算是比较小众的一门技术了,毕竟Netsuite兴起的时间算不上早,进入中国的时间更晚,除了从事这一块的程序员,可能都没有见过,恰好我是从事这块的。写这个的目的一是记录一些自己的职业生涯,二是归纳一些知识点吧。

  1.      通常pdf打印都是通过Suitelet脚本链接去触发,下面是sl脚本中的代码。其中需要引用handlebars.min.js中的方法将数据插入到xml模板中。
    /**
     * @NApiVersion 2.x
     * @NScriptType Suitelet
     * @NModuleScope SameAccount
     */
    define([ 'N/file', 'N/render', '../third/handlebars.min.js' ],
    
    function(file, render, cuxHandlebars) {
    
        /**
         * Definition of the Suitelet script trigger point.
         * 
         * @param {Object}
         *            context
         * @param {ServerRequest}
         *            context.request - Encapsulation of the incoming request
         * @param {ServerResponse}
         *            context.response - Encapsulation of the Suitelet response
         * @Since 2015.2
         */
        function onRequest(context) {
            var response = context.response;
            var request = context.request;
            var data = {};
            model = file.load({
                id : "../xml/barcode_model.xml"
            }).getContents();
            var pdfXml = renderPage(model, data);
            var pdfFile = render.xmlToPdf({
                xmlString : pdfXml
            });
            response.writeFile({
                file : pdfFile,
                isInline : true
            });
        }
        /**
         * handlebars编译并加载对象
         * 
         * @param html
         * @param page_object
         * @returns
         */
        function renderPage(html, page_object) {
            var template = cuxHandlebars.compile(html);
            return template(page_object);
        }
    
        return {
            onRequest : onRequest
        };
    
    });
  2. xml中的代码  xml中实现条形码的标签是barcode,一共有这几个属性 bar-width的范围是“0.6-1”主要用于控制条形码的长度,该属性可以不写,默认为1,也可以通过style的width属性设置条形码的宽度,经测试只对code128系列码生效, codetype=”code128″用于控制条形码的类型,showtext=”true”,该属性为布尔类型,用于控制是否展示条形码下面文本,true为展示,false为不展示。

    <?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
    <pdf lang="ZH_CN">
    	<!--HAND PDF/HTML Template -->
    	<head>
    		<macrolist>
    		</macrolist>
    		<style type="text/css">
    			span {
    			font-size:12pt;
    			}
    		</style>
    	</head>
    
    	<body width="10cm" height="10cm" padding="0.1cm 0.1cm 0.1cm 0.1cm">
    		<!--表体 -->
    		<table width="100%">
    			<tr height="20px">
    				<td align="center" valign="middle">
    					<span>code128码</span>
    				</td>
    			</tr>
    			<tr height="20px">
    				<td align="center" valign="middle">
    					<barcode style="height:30px;" codetype="code128" showtext="true"
    						value="123sku" />
    				</td>
    			</tr>
    			<tr height="30px">
    				<td align="center" valign="middle">
    					<barcode style="height:20px;" bar-width="0.7" codetype="code128"
    						showtext="true" value="123sku" />
    				</td>
    			</tr>
    			<tr height="30px">
    				<td align="center" valign="middle">
    					<barcode style="height:30px;" codetype="code128" showtext="true"
    						value="123sku" />
    				</td>
    			</tr>
    			<tr height="30px">
    				<td align="center" valign="middle">
    					<barcode style="height:30px;" codetype="code128" showtext="true"
    						value="123sku" />
    				</td>
    			</tr>
    		</table>
    	</body>
    </pdf>
  3.  展示效果 下面分别展示了xml中的实现效果

  4. 利用barcode打印upcA码和ean13码,upcA和ean13码与code128码有着比较明显的区别,从样式到位数,code128是支持50位之内,而ean13和upca码分别是13位和12位的条形码,且最后一位有验证,如果位数或者最后一位不对,则会出现打印错误,展示不了pdf文件。另外就是ean13码和upca吗只能通过css调解码高度,不能调解宽度,否则会报错,是否显示文本由showtext的值控制。
<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<pdf lang="ZH_CN">
	<!--HAND PDF/HTML Template -->
	<head>
		<macrolist>
		</macrolist>
		<style type="text/css">
			span {
			font-size:12pt;
			}
		</style>
	</head>
	<body width="10cm" height="10cm" padding="0.1cm 0.1cm 0.1cm 0.1cm">
		<!--表体 -->
		
		<table width="100%">
			<tr height="70px">
				<td align="center" valign="middle">
					<barcode style="height:60px;"  codetype="ean13" showtext="true"
						value="6926742738053" />
				</td>
			</tr>
			<tr height="70px">
				<td align="center" valign="middle">
					<barcode style="height:60px;" codetype="ean13" showtext="false"
						value="6926742738053" />
				</td>
			</tr>
		</table>

 

	</body>
</pdf>

 

<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">
<pdf lang="ZH_CN">
    <!--HAND PDF/HTML Template -->
    <head>
        <macrolist>
        </macrolist>
        <style type="text/css">
            span {
            font-size:12pt;
            }
        </style>
    </head>

    <body width="10cm" height="10cm" padding="0.1cm 0.1cm 0.1cm 0.1cm">
        <table width="100%">
            <tr height="70px">
                <td align="center" valign="middle">
                    upca码
                    <barcode style="height:60px;" codetype="upca" showtext="true"
                        value="692674273806" />
                </td>
            </tr>
            <tr height="70px">
                <td align="center" valign="middle">
                    <barcode style="height:60px;" codetype="upca" showtext="false"
                        value="692674273806" />
                </td>
            </tr>
        </table>
    </body>
</pdf>

 

展示效果

 

 

   barcode标签能实现的不仅仅是这几种条形码,通过正确的value和codetype属性可以实现以下类型所有图码。

 

 

Tags: