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: