报表打印系统
報表系統
使用說明
(ver 1.3.7.0)
一、概述:
B/S應用系統的報表打印一直以來都是一個難題,以前常規(guī)的思路是通過在瀏覽器中安裝ActiveX插件以獲得直接驅動打印機的能力。
但是,隨著瀏覽器的發(fā)展,越來越多的瀏覽器廠商禁止安裝ActiveX,以避免因ActiveX組件導致的各種安全問題。
為解決B/S打印中的痛點,我工作室開發(fā)了本報表服務器,完美地解決了在瀏覽器端不用ActiveX而獲得與C/S系統一樣的打印能力。
本報表系統不需要在瀏覽器安裝任何插件,只需通過JavaScript即可實現報表精確打印以及打印過程免人工介入。
-------------
二、特點:
1、高兼容:不需要在瀏覽器端和服務端安裝任何插件,在瀏覽器插件被各大瀏覽器紛紛禁用的今天,無插件設計兼容絕大多數瀏覽器;
2、免安裝:軟件即拷即用,不安裝,不污染操作系統,讓操作系統歷久彌新;?
3、可視化:可視化的模板設計器,通過拖拽即可完成模板設計;?
4、高精度:實現精確到毫米的打印精度,對于一些格式復雜,要求精確打印的場合,可以很容易達到毫米級精度;
5、易套打:可視化的模板設計器,在模板中加入一個票據格式的底圖,可以很方便地實現套打,對于實現發(fā)票、快遞面單、支票等打印毫無壓力;
6、功能強:從簡單報表、主從報表到嵌套報表甚至交叉報表,均能輕松應對。還有一維二維條形碼,甚至,還有逆天的腳本功能,只有想不到,沒有做不到;
7、自動化: 打印過程中全部自動化,無需象生成PDF、Word、Excel那樣還需要人工再點打印;
8、易部署:打印模板既可以部署在客戶端(與 cfprint.exe 程序放在同一目錄下),也支持部署在服務端隨報表數據一起傳到客戶端;
9、目標活:支持在數據文件中或模板中指定要輸出的打印機,發(fā)票用針打、報表用激光打、小票用小票機,專機專打;
三、使用前提條件:
1、IE6以上版本、Chrome(谷歌瀏覽器)4.0以上版本、Firefox 4.0以上版本、Opera 11以上版本、Safari 5.0.2以上版本、iOS 4.2以上版本
或使用Chrome內核、Firefox內核的瀏覽器均可直接使用本打印系統;
2、在進行打印前,需要先設計好打印模板(模板設計器請見第五節(jié));
3、打印數據必須Json的格式發(fā)送給打印服務器,并且數據必須滿足指定的格式(見下文);
四、數據格式說明:
下面以一個跨境電商快遞面單數據為例解釋一下數據各項的含義;
{
? "template": "waybill.fr3", ? ?/*打印模板文件名。除了指定模板文件以外,還支持把模板嵌入到數據文件中,以實現在服務器端靈活使用打印模板,格式如下:*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*"template": "base64:QTBBRTNEQTE3MkFFQjIzNEFERD<后面省略>" */
? "ver": 4, ? ? ? ? ? ? ? ? ? ? /*數據模板文件版本*/
? "Copies": 3, ? ? ? ? ? ? ? ? ?/*打印份數,支持指定打印份數*/
? "Duplex": 1, ? ? ? ? ? ? ? ? ?/*是否雙面打印,0:默認,不雙面,1:垂直,2:水平,3:單面打印(simplex)*/
? "Printer": "priPrinter", ? ? ?/*指定打印機,本系統支持在數據文件中指定打印機,也支持在打印模板中指定打印機*/
? "PageNumbers": "", ? ? ? ? ? ?/*要打印的頁碼范圍,同打印機的打印設置里的格式相同,例如:"1,2,3"表示打印前3頁, “2-5”:表示打印第2到5頁,“1,2,4-8”表示打印第1、2、4到8頁*/
? "Preview": 1, ? ? ? ? ? ? ? ? /*是否預覽,跟主界面上選擇“預覽”效果相同,取值為0:不預覽,1:預覽*/
? "Tables":[ ? ? ? ? ? ? ? ? ? ?/*數據表數組*/
? ? {
? ? ? "Name": "Table1", ? ? ? ? /*表名*/
? ? ? "Cols": [ ? ? ? ? ? ? ? ? /*字段定義*/
? ? ? ? {
? ? ? ? ? "type": "str", ? ? ? ?/*字段類型,可選值:String,Str,Integer,Int,Smallint,Float,Long, Blob,*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*對于圖片、PDF等使用Blob類型,并把值進行Base64編碼,并加前綴:*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* "base64/pdf:" 字段值是PDF; "base64/jpg:" 字段值是jpg; "base64/png:" 字段值是png; "base64/gif:" 字段值是gif; ?*/
? ? ? ? ? "size": 255, ? ? ? ? ?/*字段長度*/
? ? ? ? ? "name": "HAWB#", ? ? ?/*字段名稱,必須與打印模板中的打印項名稱相同*/
? ? ? ? ? "required": false ? ? /*字段是否必填*/
? ? ? ? },
? ? ? ? { "type": "int", "size": 0, "name": "NO", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "報關公司面單號", "required": false },
? ? ? ? { "type": "integer", "size": 0, "name": "公司內部單號", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)件人", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)件人地址", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)件人電話", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)貨國家", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收件人", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收件人地址", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收件人電話", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收貨人證件號碼", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收貨省份", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "總計費重量", "required": false },
? ? ? ? { "type": "int", "size": 0, "name": "總件數", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價(CNY)", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價(JPY)", "required": false },
? ? ? ? { "type": "int", "size": 0, "name": "件數1", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "品名1", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "單價1(JPY)", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "單位1", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價1(CNY)", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價1(JPY)", "required": false },
? ? ? ? { "type": "int", "size": 0, "name": "件數2", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "品名2", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "單價2(JPY)", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "單位2", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價2(CNY)", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價2(JPY)", "required": false },
? ? ? ? { "type": "AutoInc", "size": 0, "name": "ID", "required": false },
? ? ? ? { "type": "blob", "size": 0, "name": "附件", "required": false }
? ? ? ],
? ? ? "Data": [ ? ? ? ? ? ? ? ?/*數據行定義,每一行含義見上面的字段定義*/
? ? ? ? {
? ? ? ? ? "HAWB#": "860014010055",
? ? ? ? ? "NO": 1,
? ? ? ? ? "報關公司面單號": 200303900791,
? ? ? ? ? "公司內部單號": 730293,
? ? ? ? ? "發(fā)件人": "NAKAGAWA SUMIRE 2",
? ? ? ? ? "發(fā)件人地址": " 991-199-113,Kameido,Koto-ku,Tokyo",
? ? ? ? ? "發(fā)件人電話": "03-3999-3999",
? ? ? ? ? "發(fā)貨國家": "日本",
? ? ? ? ? "收件人": "張三豐",
? ? ? ? ? "收件人地址": "上海市閔行區(qū)虹梅南路1660弄薔薇八村99號9999室",
? ? ? ? ? "收件人電話": "182-1234-8888",
? ? ? ? ? "收貨人證件號碼": null,
? ? ? ? ? "收貨省份": null,
? ? ? ? ? "總計費重量": 3.2,
? ? ? ? ? "總件數": 13,
? ? ? ? ? "申報總價(CNY)": null,
? ? ? ? ? "申報總價(JPY)": null,
? ? ? ? ? "件數1": 10,
? ? ? ? ? "品名1": "紙尿片",
? ? ? ? ? "單價1(JPY)": null,
? ? ? ? ? "單位1": null,
? ? ? ? ? "申報總價1(CNY)": null,
? ? ? ? ? "申報總價1(JPY)": null,
? ? ? ? ? "件數2": null,
? ? ? ? ? "品名2": null,
? ? ? ? ? "單價2(JPY)": null,
? ? ? ? ? "單位2": null,
? ? ? ? ? "申報總價2(CNY)": null,
? ? ? ? ? "申報總價2(JPY)": null,
? ? ? ? ? "ID": 1,
? ? ? ? ? "附件": "base64/pdf:JVBERi0xLjQKJcDIzNINCjEgMCBvYmoKPDwKL1RpdGxlICh3YXliaWxsLmZyMykKL0F1dGhvciAoc2hlbmcpCi9DcmVhdG9yIChwZGZGYWN0b3J5IFBybyB3d3cucGRmZmFjdG9yeS5jb20pCi9Qcm9kdWNlciAocGRmRmFjdG9yeSBQcm8gNS4zNSBcKFdpbmRvd3MgNyBVbHRpbWF0ZSB4ODYgQ2hpbmVzZSBcKFNpbXBsaWZpZWRcKVwpKQovQ3JlYXRpb25EYXRlIChEOjIwMTcwMjI3MTIyODM2KzA4JzAwJykKPj4KZW5kb2JqCjUgMCBvYmoKPDwKL0ZpbHRlci9GbGF0ZURlY29kZQovTGVuZ3RoIDQwNAo+PnN0cmVhbQ0KSImVVMlOw0AMvecrTLkUoZqxZ80VhR44gTQSH4CKEKJIhQO/j2cS0skGrRo1cWy/97xkDvAIByC4B4We4Rso5EvZZLLxaAx87uAVnuCjIg5o5bULqBn2FVmk3nzvTNKYjTZ2aPWhX1XivY3VzZauCWqsHcSXqhCyIVDykxspSbQOa4a4F7dwxGdYw8UVxDcB4D79mBMIgymyNgqV0brNfMiJKj832w6llHHEcZQAZthXlznvLlZSRBve/kuQIfROkqTy2MwKZcFxKbg5UxnVSUhOnJEyniVxiiZSaKSLGEB4ORznOem/FIC1d1S37SfmpDMB2K587WywphzAMq+WNNcTC9CQmAtaGhJKpgtLc5O6Qwhlj5YlWAFaVnBC6TYDjksftvyvNW43WG6yDkmQFy25sjV0sx76XdKa3NOlGYf20vq1GfqNyRsi/mbWr11HNbdok+DfiaxXs2CcGp3c5XchApUn5aF/2ExfWYtKThw5KMx/3/dJeK5GlnVnf9YKjao/hSgkxWTySZMbUyzFD6PnEr4KZW5kc3RyZWFtCmVuZG9iago0IDAgb2JqCjw8Ci9UeXBlL1BhZ2UKL1BhcmVudCAzIDAgUgovTWVkaWFCb3hbMCAwIDE0MiAyODNdCi9SZXNvdXJjZXMKPDwKL1Byb2NTZXRbL1BERi9UZXh0XQovRm9udAo8PAovRjErMSA2IDAgUgovRjIgNyAwIFIKPj4KPj4KL0NvbnRlbnRzIDUgMCBSCj4+CmVuZG9iago2IDAgb2JqCjw8Ci9UeXBlL0ZvbnQKL1N1YnR5cGUvVHJ1ZVR5cGUKL0Jhc2VGb250IC9BSEpTV1orTlNpbVN1bgovTmFtZS9GMSsxCi9Ub1VuaWNvZGUgOCAwIFIKL0ZpcnN0Q2hhciAzMgovTGFzdENoYXIgMzUKL1dpZHRocyBbMTAwMCAxMDAwIDEwMDAgMTAwMF0KL0ZvbnREZXNjcmlwdG9yIDkgMCBSCj4+CmVuZG9iago5IDAgb2JqCjw8Ci9UeXBlL0ZvbnREZXNjcmlwdG9yCi9Gb250TmFtZSAvQUhKU1daK05TaW1TdW4KL0ZsYWdzIDcKL0ZvbnRCQm94Wy04IC0xNDUgMTAwMCA4NTldCi9TdGVtViA1MDAKL0l0YWxpY0FuZ2xlIDAKL0NhcEhlaWdodCA4NTkKL0FzY2VudCA4NTkKL0Rlc2NlbnQgLTE0MQovRm9udEZpbGUyIDEwIDAgUgo+PgplbmRvYmoKOCAwIG9iago8PAovRmlsdGVyL0ZsYXRlRGVjb2RlCi9MZW5ndGggMjQ2Cj4+c3RyZWFtDQpIiW1QwUrEMBS85yve0cVDtnGtK5SA7Fqs4CpGELxlk9caMGlI00P/3qRbVhQPecxj3gyTobtm3zgTgb6EXgmM0BqnAw79GBTCETvjoGCgjYrLNk9lpSc0icU0RLSNa3tSVYS+JnKIYYILevfwKN4/Lg/CWDG6FdDnoDEY1/3HidH7L7ToIqwJ56CxTfZP0h+kRfhz/8O+TR6BzXuxBOs1Dl4qDNJ1CBVb8zSuOKDTvzmyOSmOrfqUgZwut/X+lidcJFyWrM6YZXy9vck4GVWb+7rkJPktyuyc6oBzXDWGkH4ydzbHzAGNw3Otvvc5T37kGxjtexEKZW5kc3RyZWFtCmVuZG9iagoxMCAwIG9iago8PAovRmlsdGVyL0ZsYXRlRGVjb2RlCi9MZW5ndGggMTI3OAovTGVuZ3RoMSAyNjc2Cj4+c3RyZWFtDQpIie1WXWwUVRQ+997ZmZ2d353dmdku3R+26+7SrSUtdBdWWlpaCP4UkEIKUaObsm3R3XapxVCfeJAXjcbwYDSYIG8kRm3ExAqJERMeTAgPhjdrNDExijHxJ8QXw3ju7tAEjEEfjd7Jvff7zjn33nPu7wABABVOAoPhqUa1KYjMQclVAGJNPbeYljawnxB/DUA/nm7ONB46d/o7AOEttNFm6kvTy9dfOIZ8GfXnZ2vVI6F6igJIh1BfmkUBkm+Qv4o8O9tYPCEA9CL/AHmsPj9VpR1kDjmOB3qjeqJJPt0+iXwVeXqu2qi9d+7FN5H/jj6ca84/u+j9CBqAzMdPNxdqzcDqXmwrf4L8fcwEeDw8IiAi3DNRJgTubfVvTt7/6T+d4G2g0MQseLe8r5CLEIQQng8dTLAgCg7EIA6dkOSSv9Sjxd8YK4nfZ7jpOvGj3g04CJtgC1zG/oahDIPQD9tg1fsSJmEcFEi18mnUPI8e1mEe0vjFcUTuA88GwHKh5+H9h3aOrVu//vD9fEMLoHg/w024hhZd0A27ALaTJNFJTtpUdrtEieNekhelfKmcy5cdt1Tuykj5csvGTdJS2RbtTC9rGQxwFbaTTlEnJITEoSXDKsrhuBMQlQ45XaQbo7EOmrXMwGhQGaKWQTUxKqeHSo7dszVnh2KCEXFlTZELUli+ShVVk2NJ08kmo45NI53BbJglE67FbD3ZySo0pJtK52shi1EqBFTBsJkbNDR5gsmKFuSx6d4P8CvGxnDuHagAlO1NA3mXexh1pYEuWypt5qJWrHarSBIMSOql7YhdnUiOy8M6ODltHpBNmRiTBtEnz3xk2LXNWuSANWpb9IG+lBq5j/YojigK4dSDmnImmeyXQ5q0xQxqstjRpyYSVcPOaJENAcICgkqNmNltsfWjmhBSbG2coY+q9z38gt4GIAEZ9DVJxFzeXwbHRa9yt5cB/WmtxDE9HBaVxy+azpCWKoxE2GBq4ygZ6U6o6zRlq56IK9fkqJMO95nOSDEbEJhqZYoaixSLw4xV8vkK7mTZ+xbX/3PI4t6C8ua8K9lrs4GTVGqv6QD6kB8iOHGiQUqDhDPKmYT2Ufcsickp1RrsVq3dxCQ9uITjRdVgiibYQSGwg8QNFrTjITsYEbUgeSWXVKR+1aqo1iOG1NfH5EpnlLq96xRRMc+nwk/nsWlmS1oXM4oszVqx1jsUkN7t+e3R608a226C0n6YPnx9x0leX7k0thtP5Bco5W+dinG1Ezdb9VYhS8C71aLkrit97V1DBe9Vx6xiln3xHFzBZ/CA35dI6tC31vNG2ICgOnjJtzXgot8/AQluj0URSz4WEOk+FhHbPmbg4ilnQAQZJTqe9DamiEd8jPsZ9vpYRPyEjxn+AzzDcVDAtiK84WPe9qyPBZS/42Pe9oKPGeTg8p6Jo42J43P7azPH69UFn/lV88j0rurU4vzCUnrfwnwl7YthD0zAUWhgeRynaD/UYAZRHaqwcJfuTtaEIzCN10wVpmARL6kFWMJrah/W83hA03da15Yfe2nvxJ29+7J/1KvfpjXP7Xf8Bv+n+dNegJE4CRMTb9YC7mIdClgbfq0SDQcoEM3nOvJYW35hV2EfWSHeqZchsdyPF+zyycThFSLunMWia2yFCBwJHAVaaOdTiDila5RyyjilnDJOYU0LnBJOgVPSNUaK7QTwBzD6P0QKZW5kc3RyZWFtCmVuZG9iago3IDAgb2JqCjw8Ci9UeXBlL0ZvbnQKL1N1YnR5cGUvVHJ1ZVR5cGUKL0Jhc2VGb250IC9BcmlhbE1UCi9OYW1lL0YyCi9GaXJzdENoYXIgMzIKL0xhc3RDaGFyIDI1NQovV2lkdGhzIFsyNzggMjc4IDM1NSA1NTYgNTU2IDg4OSA2NjcgMTkxIDMzMyAzMzMgMzg5IDU4NCAyNzggMzMzIDI3OCAyNzgKNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDU1NiA1NTYgNTU2IDI3OCAyNzggNTg0IDU4NCA1ODQgNTU2CjEwMTUgNjY3IDY2NyA3MjIgNzIyIDY2NyA2MTEgNzc4IDcyMiAyNzggNTAwIDY2NyA1NTYgODMzIDcyMiA3NzgKNjY3IDc3OCA3MjIgNjY3IDYxMSA3MjIgNjY3IDk0NCA2NjcgNjY3IDYxMSAyNzggMjc4IDI3OCA0NjkgNTU2CjMzMyA1NTYgNTU2IDUwMCA1NTYgNTU2IDI3OCA1NTYgNTU2IDIyMiAyMjIgNTAwIDIyMiA4MzMgNTU2IDU1Ngo1NTYgNTU2IDMzMyA1MDAgMjc4IDU1NiA1MDAgNzIyIDUwMCA1MDAgNTAwIDMzNCAyNjAgMzM0IDU4NCAyNzgKNTU2IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4CjI3OCAyNzggMjc4IDI3OCA5MjMgMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OAoyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzgKMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4CjI3OCA1NTYgNTU2IDMzMyA1NTYgNTU2IDU1NiA1NTYgMjc4IDY2NyAyNzggMjc4IDI3OCAyNzggMjc4IDY2NwoyNzggNjY3IDI3OCAyNzggMjc4IDI3OCAyNzggNjY3IDI3OCA2NjcgMjc4IDY2NyAyNzggNjY3IDI3OCAyNzgKMjc4IDY2NyAyNzggNjY3IDU1MiAyNzggMjc4IDI3OCAyNzggNTU2IDI3OCA1NTYgMjc4IDI3OCAyNzggNjY3CjI3OCA2NjcgMjc4IDI3OCAyNzggNjY3IDI3OCA2NjcgMjc4IDY2NyAyNzggNjY3IDI3OCA2NjcgMjc4IDI3OF0KL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZwovRm9udERlc2NyaXB0b3IgMTEgMCBSCj4+CmVuZG9iagoxMSAwIG9iago8PAovVHlwZS9Gb250RGVzY3JpcHRvcgovRm9udE5hbWUgL0FyaWFsTVQKL0ZsYWdzIDMyCi9Gb250QkJveFstNjY1IC0zMjUgMjAwMCAxMDA2XQovU3RlbVYgOTUKL0l0YWxpY0FuZ2xlIDAKL0NhcEhlaWdodCA5MDUKL0FzY2VudCA5MDUKL0Rlc2NlbnQgLTIxMgo+PgplbmRvYmoKMyAwIG9iago8PAovVHlwZS9QYWdlcwovQ291bnQgMQovS2lkc1s0IDAgUl0KPj4KZW5kb2JqCjIgMCBvYmoKPDwKL1R5cGUvQ2F0YWxvZwovUGFnZXMgMyAwIFIKL1BhZ2VMYXlvdXQvU2luZ2xlUGFnZQovVmlld2VyUHJlZmVyZW5jZXMgMTIgMCBSCj4+CmVuZG9iagoxMiAwIG9iago8PAovVHlwZS9WaWV3ZXJQcmVmZXJlbmNlcwo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMDAxNiAwMDAwMCBuDQowMDAwMDA0MjEzIDAwMDAwIG4NCjAwMDAwMDQxNTggMDAwMDAgbg0KMDAwMDAwMDcxNiAwMDAwMCBuDQowMDAwMDAwMjQxIDAwMDAwIG4NCjAwMDAwMDA4NzIgMDAwMDAgbg0KMDAwMDAwMjkyNyAwMDAwMCBuDQowMDAwMDAxMjQ1IDAwMDAwIG4NCjAwMDAwMDEwNTUgMDAwMDAgbg0KMDAwMDAwMTU2MiAwMDAwMCBuDQowMDAwMDAzOTg5IDAwMDAwIG4NCjAwMDAwMDQzMTAgMDAwMDAgbg0KdHJhaWxlcgo8PAovU2l6ZSAxMwovSW5mbyAxIDAgUgovUm9vdCAyIDAgUgovSURbPDVBMkU0QzkzOTdENEU0RDE3NkIwOTBDRUU3OTMxMzRGPjw1QTJFNEM5Mzk3RDRFNEQxNzZCMDkwQ0VFNzkzMTM0Rj5dCj4+CnN0YXJ0eHJlZgo0MzU2CiUlRU9GCg==",
? ? ? ? },
? ? ? ? {
? ? ? ? ? "HAWB#": "860014010035",
? ? ? ? ? "NO": 2,
? ? ? ? ? "報關公司面單號": 200303900789,
? ? ? ? ? "公司內部單號": 730291,
? ? ? ? ? "發(fā)件人": "NAKAGAWA SUMIRE",
? ? ? ? ? "發(fā)件人地址": " 991-199-113,Kameido,Koto-ku,Tokyo",
? ? ? ? ? "發(fā)件人電話": "03-3999-3999",
? ? ? ? ? "發(fā)貨國家": "日本",
? ? ? ? ? "收件人": "張無忌",
? ? ? ? ? "收件人地址": "上海市閔行區(qū)虹梅南路1660弄薔薇八村88號8888室",
? ? ? ? ? "收件人電話": "182-1234-8888",
? ? ? ? ? "收貨人證件號碼": null,
? ? ? ? ? "收貨省份": null,
? ? ? ? ? "總計費重量": 3.2,
? ? ? ? ? "總件數": 13,
? ? ? ? ? "申報總價(CNY)": null,
? ? ? ? ? "申報總價(JPY)": null,
? ? ? ? ? "件數1": 10,
? ? ? ? ? "品名1": "紙尿片",
? ? ? ? ? "單價1(JPY)": null,
? ? ? ? ? "單位1": null,
? ? ? ? ? "申報總價1(CNY)": null,
? ? ? ? ? "申報總價1(JPY)": null,
? ? ? ? ? "件數2": null,
? ? ? ? ? "品名2": null,
? ? ? ? ? "單價2(JPY)": null,
? ? ? ? ? "單位2": null,
? ? ? ? ? "申報總價2(CNY)": null,
? ? ? ? ? "申報總價2(JPY)": null,
? ? ? ? ? "ID": 2,
? ? ? ? ? "附件":"base64/gif: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"
? ? ? ? }
? ? ? ]
? ? },
? ? {
? ? ? "Name": "Table2",
? ? ? "Cols": [
? ? ? ? { "type": "int", "size": 0, "name": "NO", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "訂單編號", "required": false },
? ? ? ? { "type": "integer", "size": 0, "name": "下單日期", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "下單平臺", "required": false }
? ? ? ],
? ? ? "Data": [
? ? ? ? {
? ? ? ? ? "NO": 1,
? ? ? ? ? "訂單編號": 200303900791,
? ? ? ? ? "下單日期": "2017-01-20",
? ? ? ? ? "下單平臺": "天貓"
? ? ? ? },
? ? ? ? {
? ? ? ? ? "NO": 2,
? ? ? ? ? "訂單編號": 200303900792,
? ? ? ? ? "下單日期": "2017-01-20",
? ? ? ? ? "下單平臺": "京東"
? ? ? ? }
? ? ? ]
? ? }
? ]
}
五、調用示例:
<!-- ★★★ 模式1 ★★★ -->
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title>康虎云報表系統測試</title>
</head>
<body>
? <div style="width: 100%;text-align:center;">
? ? <h2>康虎云報表系統</h2>
? ? <h3>打印測試(模式1)</h3>
? ? <div>
? ? ? <input type="button" id="btnPrint" value="打印" onClick="doSend(_reportData);" />
? ? </div>
? </div>
? <div id="output"></div>
</body>
<script type="text/javascript">
//定義數據腳本
var _reportData = '{"template":"waybill.fr3","Cols":[{"type":"str","size":255,"name":"HAWB#","required":false},<這里省略1000字> ]}';
//在瀏覽器控制臺輸出調試信息
console.log("reportData = " + _reportData);
</script>
<script language="javascript" type="text/javascript" src="cfprint.min.js"></script>
<script language="javascript" type="text/javascript" src="cfprint_ext.js"></script>
<script language="javascript" type="text/javascript">
/**下面四個參數必須放在myreport.js腳本后面,以覆蓋myreport.js中的默認值**/
var _delay_send = 1000; ? ? ? ? ? ? //發(fā)送打印服務器前延時時長,-1則表示不自動打印
var _delay_close = 1000; ? ? ? ? ? ?//打印完成后關閉窗口的延時時長, -1則表示不關閉
var cfprint_addr = "127.0.0.1"; ? ? //打印服務器監(jiān)聽地址
var cfprint_port = 54321; ? ? ? ? ? //打印服務器監(jiān)聽端口
</script>
</html>
<!-- ★★★ 模式2 ★★★ -->
<?php?
//如果有php運行環(huán)境,只需把該文件擴展名改成 .php,然后上傳到web目錄即可在真實服務器上測試
header("Access-Control-Allow-Origin: *");
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title>康虎云報表系統測試</title>
<style type="text/css">
#output {font-size: 12px; background-color:#F0FFF0;}
</style>
</head>
<body>
? <div style="width: 100%;text-align:center;">
? ? <h2>康虎云報表系統(Ver 1.3.0)</h2>
? ? <h3>打印測試(模式2)</h3>
? ? <div style="line-height: 1.5;">
? ? ? <div style="width: 70%; text-align: left;">
? ? ? <b>一、首先按下列步驟設置:</b><br/>
? ? ? 1、運行打印服務器;<br/>
? ? ? 2、按“停止”按鈕停止服務;<br/>
? ? ? 3、打開“設置”區(qū);<br/>
? ? ? 4、在“常用參數-->服務模式”中,選擇“模式2”;<br/>
? ? ? 5、按“啟動”按鈕啟動服務。
? ? ? </div>
? ? ? <div style="width: 70%; text-align: left;">
? ? ? <b>二、按本頁的“打印”按鈕開始打印。</b><br/>
? ? ? </div><br/>
? ? ? <input type="button" id="btnPrint" value="打印" /><br/><br/>
? ? ??
? ? ? <div style="width: 70%; text-align: left; font-size: 12px;">
? ? ? ? 由于JavaScript在不同域名下訪問會出現由來已久的跨域問題,所以正式部署到服務器使用時,要解決跨域問題。<br/>
? ? ? ? 對于IE8以上版本瀏覽器,只需增加一個reponse頭:Access-Control-Allow-Origin即可,而對于php、jsp、asp/aspx等動態(tài)語言而言,增加一個response頭是非常簡單的事,例如:<br/>
? ? ? ? <b>在php:</b><br/><span style="color: red;">
<?php <br/>
header("Access-Control-Allow-Origin: *");<br/>
?><br/>
? ? ? ? </span>
? ? ? ? <b>在jsp:</b><br/><span style="color: red;">
<% ?<br/>
response.setHeader("Access-Control-Allow-Origin", "*"); ?<br/>
%><br/>
? ? ? ? </span>
? ? ? ? <b>在asp.net中:</b><br/><span style="color: red;">
Response.AppendHeader("Access-Control-Allow-Origin", "*");
? ? ? ? </span>,<br/>其他語言里,大家請自行搜索“ajax跨域”。而對于IE8以下的瀏覽器,大家可以自行搜索“IE6+Ajax+跨域”尋找解決辦法吧,也可以聯系我們幫助。
? ? ? </div>
? ? </div>
? </div>
? <div id="output"></div>
</body>
<!-- 引入模式2所需的javascript支持庫 -->
<script type="text/javascript" src="cfprint_mode2.min.js" charset="UTF-8"></script>
<!-- 構造報表數據 -->
<script type="text/javascript">
var _reportData = '{"template":"waybill.fr3","ver":3, "Tables":[ {"Name":"Table1", "Cols":[{"type":"str","size":255,"name":"HAWB#","required":false},{"type":"int","size":0,"name":"NO","required":false},{"type":"float","size":0,"name":"報關公司面單號","required":false},{"type":"integer","size":0,"name":"公司內部單號","required":false},{"type":"str","size":255,"name":"發(fā)件人","required":false},{"type":"str","size":255,"name":"發(fā)件人地址","required":false},{"type":"str","size":255,"name":"發(fā)件人電話","required":false},{"type":"str","size":255,"name":"發(fā)貨國家","required":false},{"type":"str","size":255,"name":"收件人","required":false},{"type":"str","size":255,"name":"收件人地址","required":false},{"type":"str","size":255,"name":"收件人電話","required":false},{"type":"str","size":255,"name":"收貨人證件號碼","required":false},{"type":"str","size":255,"name":"收貨省份","required":false},{"type":"float","size":0,"name":"總計費重量","required":false},{"type":"int","size":0,"name":"總件數","required":false},{"type":"float","size":0,"name":"申報總價(CNY)","required":false},{"type":"float","size":0,"name":"申報總價(JPY)","required":false},{"type":"int","size":0,"name":"件數1","required":false},{"type":"str","size":255,"name":"品名1","required":false},{"type":"float","size":0,"name":"單價1(JPY)","required":false},{"type":"str","size":255,"name":"單位1","required":false},{"type":"float","size":0,"name":"申報總價1(CNY)","required":false},{"type":"float","size":0,"name":"申報總價1(JPY)","required":false},{"type":"int","size":0,"name":"件數2","required":false},{"type":"str","size":255,"name":"品名2","required":false},{"type":"float","size":0,"name":"單價2(JPY)","required":false},{"type":"str","size":255,"name":"單位2","required":false},{"type":"float","size":0,"name":"申報總價2(CNY)","required":false},{"type":"float","size":0,"name":"申報總價2(JPY)","required":false},{"type":"int","size":0,"name":"件數3","required":false},{"type":"str","size":255,"name":"品名3","required":false},{"type":"float","size":0,"name":"單價3(JPY)","required":false},{"type":"str","size":255,"name":"單位3","required":false},{"type":"float","size":0,"name":"申報總價3(CNY)","required":false},{"type":"float","size":0,"name":"申報總價3(JPY)","required":false},{"type":"int","size":0,"name":"件數4","required":false},{"type":"str","size":255,"name":"品名4","required":false},{"type":"float","size":0,"name":"單價4(JPY)","required":false},{"type":"str","size":255,"name":"單位4","required":false},{"type":"float","size":0,"name":"申報總價4(CNY)","required":false},{"type":"float","size":0,"name":"申報總價4(JPY)","required":false},{"type":"int","size":0,"name":"件數5","required":false},{"type":"str","size":255,"name":"品名5","required":false},{"type":"float","size":0,"name":"單價5(JPY)","required":false},{"type":"str","size":255,"name":"單位5","required":false},{"type":"float","size":0,"name":"申報總價5(CNY)","required":false},{"type":"float","size":0,"name":"申報總價5(JPY)","required":false},{"type":"str","size":255,"name":"參考號","required":false},{"type":"AutoInc","size":0,"name":"ID","required":false}],"Data":[{"公司內部單號":730293,"發(fā)貨國家":"日本","單價1(JPY)":null,"申報總價2(JPY)":null,"單價4(JPY)":null,"申報總價2(CNY)":null,"申報總價5(JPY)":null,"報關公司面單號":200303900791,"申報總價5(CNY)":null,"收貨人證件號碼":null,"申報總價1(JPY)":null,"單價3(JPY)":null,"申報總價1(CNY)":null,"申報總價4(JPY)":null,"申報總價4(CNY)":null,"收件人電話":"182-1758-9999","收件人地址":"上海市閔行區(qū)虹梅南路1660弄薔薇八村139號502室","HAWB#":"860014010055","發(fā)件人電話":"03-3684-9999","發(fā)件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":3,"ID":3,"單價2(JPY)":null,"申報總價3(JPY)":null,"單價5(JPY)":null,"申報總價3(CNY)":null,"收貨省份":null,"申報總價(JPY)":null,"申報總價(CNY)":null,"總計費重量":3.20,"收件人":"張三豐2","總件數":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"紙尿片","參考號":null,"發(fā)件人":"NAKAGAWA SUMIRE 2","單位5":null,"單位4":null,"單位3":null,"單位2":null,"單位1":null,"件數5":null,"件數4":null,"件數3":3,"件數2":null,"件數1":10},{"公司內部單號":730291,"發(fā)貨國家":"日本","單價1(JPY)":null,"申報總價2(JPY)":null,"單價4(JPY)":null,"申報總價2(CNY)":null,"申報總價5(JPY)":null,"報關公司面單號":200303900789,"申報總價5(CNY)":null,"收貨人證件號碼":null,"申報總價1(JPY)":null,"單價3(JPY)":null,"申報總價1(CNY)":null,"申報總價4(JPY)":null,"申報總價4(CNY)":null,"收件人電話":"182-1758-9999","收件人地址":"上海市閔行區(qū)虹梅南路1660弄薔薇八村139號502室","HAWB#":"860014010035","發(fā)件人電話":"03-3684-9999","發(fā)件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":1,"ID":1,"單價2(JPY)":null,"申報總價3(JPY)":null,"單價5(JPY)":null,"申報總價3(CNY)":null,"收貨省份":null,"申報總價(JPY)":null,"申報總價(CNY)":null,"總計費重量":3.20,"收件人":"張三豐","總件數":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"紙尿片","參考號":null,"發(fā)件人":"NAKAGAWA SUMIRE","單位5":null,"單位4":null,"單位3":null,"單位2":null,"單位1":null,"件數5":null,"件數4":null,"件數3":3,"件數2":null,"件數1":10},{"公司內部單號":730292,"發(fā)貨國家":"日本","單價1(JPY)":null,"申報總價2(JPY)":null,"單價4(JPY)":null,"申報總價2(CNY)":null,"申報總價5(JPY)":null,"報關公司面單號":200303900790,"申報總價5(CNY)":null,"收貨人證件號碼":null,"申報總價1(JPY)":null,"單價3(JPY)":null,"申報總價1(CNY)":null,"申報總價4(JPY)":null,"申報總價4(CNY)":null,"收件人電話":"182-1758-9999","收件人地址":"上海市閔行區(qū)虹梅南路1660弄薔薇八村139號502室","HAWB#":"860014010045","發(fā)件人電話":"03-3684-9999","發(fā)件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":2,"ID":2,"單價2(JPY)":null,"申報總價3(JPY)":null,"單價5(JPY)":null,"申報總價3(CNY)":null,"收貨省份":null,"申報總價(JPY)":null,"申報總價(CNY)":null,"總計費重量":3.20,"收件人":"張無忌","總件數":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"紙尿片","參考號":null,"發(fā)件人":"NAKAGAWA SUMIRE 1","單位5":null,"單位4":null,"單位3":null,"單位2":null,"單位1":null,"件數5":null,"件數4":null,"件數3":3,"件數2":null,"件數1":10}]}]}';
if(window.console) console.log("reportData = " + _reportData);
</script>
<!-- 設置服務器參數 -->
<script language="javascript" type="text/javascript">
var cfprint_addr = "127.0.0.1"; ?//打印服務器監(jiān)聽地址
var cfprint_port = 54321; ? ? ? ?//打印服務器監(jiān)聽端口
var _url = "http://"+cfprint_addr+":"+cfprint_port;
</script>
<!-- 編寫回調函數用以處理服務器返回的數據 -->
<script type="text/javascript">
/**
?* 參數:
?* readyState: XMLHttpRequest的狀態(tài)
?* httpStatus: 服務端返回的http狀態(tài)
?* responseText: 服務端返回的內容
?*/
var callbackSuccess = function(readyState, httpStatus, responseText){
? if (httpStatus === 200) {
? ? //{"result": 1, "message": "打印完成"}
? ? var response = CFPrint.parseJSON(responseText);
? ? alert(response.message+", 狀態(tài)碼["+response.result+"]");
? }else{
? ? alert('打印失敗,HTTP狀態(tài)代碼是:'+httpStatus);
? }
}
/**
?* 參數:
?* message: 錯誤信息
?*/
var callbackFailed = function(message){?
? alert('發(fā)送打印任務出錯: ' + message);
}
</script>
<!-- 調用發(fā)送打印請求功能 ?-->
<script type="text/javascript">
(function(){
document.getElementById("btnPrint").onclick = function() {
? CFPrint.outputid = "output"; ?//指定調試信息輸出div的id
? CFPrint.SendRequest(_url, _reportData, callbackSuccess, callbackFailed); ?//發(fā)送打印請求
};
})();
</script>
</html>
六、模板設計器(重要!重要!!,好多朋友都找不到設計器入口)
在主界面上,雙擊右下角的“設計”兩個字,即可打開模板設計工具箱,在工具箱有三個按鈕和一個大文本框。三個按鈕的作用分別是:
設計:以大文本框中的json數據為數據源,打開模板設計器窗口;
預覽:以大文本框中的json數據為數據源,預覽當前所用模板的打印效果;
打印:以大文本框中的json數據為數據源,向打印機輸出當前所用模板生成的報表;
以后將會有詳細的模板設計教程發(fā)布,如果您遇到緊急的難題,請向作者咨詢。
使用說明
(ver 1.3.7.0)
一、概述:
B/S應用系統的報表打印一直以來都是一個難題,以前常規(guī)的思路是通過在瀏覽器中安裝ActiveX插件以獲得直接驅動打印機的能力。
但是,隨著瀏覽器的發(fā)展,越來越多的瀏覽器廠商禁止安裝ActiveX,以避免因ActiveX組件導致的各種安全問題。
為解決B/S打印中的痛點,我工作室開發(fā)了本報表服務器,完美地解決了在瀏覽器端不用ActiveX而獲得與C/S系統一樣的打印能力。
本報表系統不需要在瀏覽器安裝任何插件,只需通過JavaScript即可實現報表精確打印以及打印過程免人工介入。
-------------
二、特點:
1、高兼容:不需要在瀏覽器端和服務端安裝任何插件,在瀏覽器插件被各大瀏覽器紛紛禁用的今天,無插件設計兼容絕大多數瀏覽器;
2、免安裝:軟件即拷即用,不安裝,不污染操作系統,讓操作系統歷久彌新;?
3、可視化:可視化的模板設計器,通過拖拽即可完成模板設計;?
4、高精度:實現精確到毫米的打印精度,對于一些格式復雜,要求精確打印的場合,可以很容易達到毫米級精度;
5、易套打:可視化的模板設計器,在模板中加入一個票據格式的底圖,可以很方便地實現套打,對于實現發(fā)票、快遞面單、支票等打印毫無壓力;
6、功能強:從簡單報表、主從報表到嵌套報表甚至交叉報表,均能輕松應對。還有一維二維條形碼,甚至,還有逆天的腳本功能,只有想不到,沒有做不到;
7、自動化: 打印過程中全部自動化,無需象生成PDF、Word、Excel那樣還需要人工再點打印;
8、易部署:打印模板既可以部署在客戶端(與 cfprint.exe 程序放在同一目錄下),也支持部署在服務端隨報表數據一起傳到客戶端;
9、目標活:支持在數據文件中或模板中指定要輸出的打印機,發(fā)票用針打、報表用激光打、小票用小票機,專機專打;
三、使用前提條件:
1、IE6以上版本、Chrome(谷歌瀏覽器)4.0以上版本、Firefox 4.0以上版本、Opera 11以上版本、Safari 5.0.2以上版本、iOS 4.2以上版本
或使用Chrome內核、Firefox內核的瀏覽器均可直接使用本打印系統;
2、在進行打印前,需要先設計好打印模板(模板設計器請見第五節(jié));
3、打印數據必須Json的格式發(fā)送給打印服務器,并且數據必須滿足指定的格式(見下文);
四、數據格式說明:
下面以一個跨境電商快遞面單數據為例解釋一下數據各項的含義;
{
? "template": "waybill.fr3", ? ?/*打印模板文件名。除了指定模板文件以外,還支持把模板嵌入到數據文件中,以實現在服務器端靈活使用打印模板,格式如下:*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*"template": "base64:QTBBRTNEQTE3MkFFQjIzNEFERD<后面省略>" */
? "ver": 4, ? ? ? ? ? ? ? ? ? ? /*數據模板文件版本*/
? "Copies": 3, ? ? ? ? ? ? ? ? ?/*打印份數,支持指定打印份數*/
? "Duplex": 1, ? ? ? ? ? ? ? ? ?/*是否雙面打印,0:默認,不雙面,1:垂直,2:水平,3:單面打印(simplex)*/
? "Printer": "priPrinter", ? ? ?/*指定打印機,本系統支持在數據文件中指定打印機,也支持在打印模板中指定打印機*/
? "PageNumbers": "", ? ? ? ? ? ?/*要打印的頁碼范圍,同打印機的打印設置里的格式相同,例如:"1,2,3"表示打印前3頁, “2-5”:表示打印第2到5頁,“1,2,4-8”表示打印第1、2、4到8頁*/
? "Preview": 1, ? ? ? ? ? ? ? ? /*是否預覽,跟主界面上選擇“預覽”效果相同,取值為0:不預覽,1:預覽*/
? "Tables":[ ? ? ? ? ? ? ? ? ? ?/*數據表數組*/
? ? {
? ? ? "Name": "Table1", ? ? ? ? /*表名*/
? ? ? "Cols": [ ? ? ? ? ? ? ? ? /*字段定義*/
? ? ? ? {
? ? ? ? ? "type": "str", ? ? ? ?/*字段類型,可選值:String,Str,Integer,Int,Smallint,Float,Long, Blob,*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /*對于圖片、PDF等使用Blob類型,并把值進行Base64編碼,并加前綴:*/
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* "base64/pdf:" 字段值是PDF; "base64/jpg:" 字段值是jpg; "base64/png:" 字段值是png; "base64/gif:" 字段值是gif; ?*/
? ? ? ? ? "size": 255, ? ? ? ? ?/*字段長度*/
? ? ? ? ? "name": "HAWB#", ? ? ?/*字段名稱,必須與打印模板中的打印項名稱相同*/
? ? ? ? ? "required": false ? ? /*字段是否必填*/
? ? ? ? },
? ? ? ? { "type": "int", "size": 0, "name": "NO", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "報關公司面單號", "required": false },
? ? ? ? { "type": "integer", "size": 0, "name": "公司內部單號", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)件人", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)件人地址", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)件人電話", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "發(fā)貨國家", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收件人", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收件人地址", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收件人電話", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收貨人證件號碼", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "收貨省份", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "總計費重量", "required": false },
? ? ? ? { "type": "int", "size": 0, "name": "總件數", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價(CNY)", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價(JPY)", "required": false },
? ? ? ? { "type": "int", "size": 0, "name": "件數1", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "品名1", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "單價1(JPY)", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "單位1", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價1(CNY)", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價1(JPY)", "required": false },
? ? ? ? { "type": "int", "size": 0, "name": "件數2", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "品名2", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "單價2(JPY)", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "單位2", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價2(CNY)", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "申報總價2(JPY)", "required": false },
? ? ? ? { "type": "AutoInc", "size": 0, "name": "ID", "required": false },
? ? ? ? { "type": "blob", "size": 0, "name": "附件", "required": false }
? ? ? ],
? ? ? "Data": [ ? ? ? ? ? ? ? ?/*數據行定義,每一行含義見上面的字段定義*/
? ? ? ? {
? ? ? ? ? "HAWB#": "860014010055",
? ? ? ? ? "NO": 1,
? ? ? ? ? "報關公司面單號": 200303900791,
? ? ? ? ? "公司內部單號": 730293,
? ? ? ? ? "發(fā)件人": "NAKAGAWA SUMIRE 2",
? ? ? ? ? "發(fā)件人地址": " 991-199-113,Kameido,Koto-ku,Tokyo",
? ? ? ? ? "發(fā)件人電話": "03-3999-3999",
? ? ? ? ? "發(fā)貨國家": "日本",
? ? ? ? ? "收件人": "張三豐",
? ? ? ? ? "收件人地址": "上海市閔行區(qū)虹梅南路1660弄薔薇八村99號9999室",
? ? ? ? ? "收件人電話": "182-1234-8888",
? ? ? ? ? "收貨人證件號碼": null,
? ? ? ? ? "收貨省份": null,
? ? ? ? ? "總計費重量": 3.2,
? ? ? ? ? "總件數": 13,
? ? ? ? ? "申報總價(CNY)": null,
? ? ? ? ? "申報總價(JPY)": null,
? ? ? ? ? "件數1": 10,
? ? ? ? ? "品名1": "紙尿片",
? ? ? ? ? "單價1(JPY)": null,
? ? ? ? ? "單位1": null,
? ? ? ? ? "申報總價1(CNY)": null,
? ? ? ? ? "申報總價1(JPY)": null,
? ? ? ? ? "件數2": null,
? ? ? ? ? "品名2": null,
? ? ? ? ? "單價2(JPY)": null,
? ? ? ? ? "單位2": null,
? ? ? ? ? "申報總價2(CNY)": null,
? ? ? ? ? "申報總價2(JPY)": null,
? ? ? ? ? "ID": 1,
? ? ? ? ? "附件": "base64/pdf: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IDI3OCAyNzgKMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4IDI3OCAyNzggMjc4CjI3OCA1NTYgNTU2IDMzMyA1NTYgNTU2IDU1NiA1NTYgMjc4IDY2NyAyNzggMjc4IDI3OCAyNzggMjc4IDY2NwoyNzggNjY3IDI3OCAyNzggMjc4IDI3OCAyNzggNjY3IDI3OCA2NjcgMjc4IDY2NyAyNzggNjY3IDI3OCAyNzgKMjc4IDY2NyAyNzggNjY3IDU1MiAyNzggMjc4IDI3OCAyNzggNTU2IDI3OCA1NTYgMjc4IDI3OCAyNzggNjY3CjI3OCA2NjcgMjc4IDI3OCAyNzggNjY3IDI3OCA2NjcgMjc4IDY2NyAyNzggNjY3IDI3OCA2NjcgMjc4IDI3OF0KL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZwovRm9udERlc2NyaXB0b3IgMTEgMCBSCj4+CmVuZG9iagoxMSAwIG9iago8PAovVHlwZS9Gb250RGVzY3JpcHRvcgovRm9udE5hbWUgL0FyaWFsTVQKL0ZsYWdzIDMyCi9Gb250QkJveFstNjY1IC0zMjUgMjAwMCAxMDA2XQovU3RlbVYgOTUKL0l0YWxpY0FuZ2xlIDAKL0NhcEhlaWdodCA5MDUKL0FzY2VudCA5MDUKL0Rlc2NlbnQgLTIxMgo+PgplbmRvYmoKMyAwIG9iago8PAovVHlwZS9QYWdlcwovQ291bnQgMQovS2lkc1s0IDAgUl0KPj4KZW5kb2JqCjIgMCBvYmoKPDwKL1R5cGUvQ2F0YWxvZwovUGFnZXMgMyAwIFIKL1BhZ2VMYXlvdXQvU2luZ2xlUGFnZQovVmlld2VyUHJlZmVyZW5jZXMgMTIgMCBSCj4+CmVuZG9iagoxMiAwIG9iago8PAovVHlwZS9WaWV3ZXJQcmVmZXJlbmNlcwo+PgplbmRvYmoKeHJlZgowIDEzCjAwMDAwMDAwMDAgNjU1MzUgZg0KMDAwMDAwMDAxNiAwMDAwMCBuDQowMDAwMDA0MjEzIDAwMDAwIG4NCjAwMDAwMDQxNTggMDAwMDAgbg0KMDAwMDAwMDcxNiAwMDAwMCBuDQowMDAwMDAwMjQxIDAwMDAwIG4NCjAwMDAwMDA4NzIgMDAwMDAgbg0KMDAwMDAwMjkyNyAwMDAwMCBuDQowMDAwMDAxMjQ1IDAwMDAwIG4NCjAwMDAwMDEwNTUgMDAwMDAgbg0KMDAwMDAwMTU2MiAwMDAwMCBuDQowMDAwMDAzOTg5IDAwMDAwIG4NCjAwMDAwMDQzMTAgMDAwMDAgbg0KdHJhaWxlcgo8PAovU2l6ZSAxMwovSW5mbyAxIDAgUgovUm9vdCAyIDAgUgovSURbPDVBMkU0QzkzOTdENEU0RDE3NkIwOTBDRUU3OTMxMzRGPjw1QTJFNEM5Mzk3RDRFNEQxNzZCMDkwQ0VFNzkzMTM0Rj5dCj4+CnN0YXJ0eHJlZgo0MzU2CiUlRU9GCg==",
? ? ? ? },
? ? ? ? {
? ? ? ? ? "HAWB#": "860014010035",
? ? ? ? ? "NO": 2,
? ? ? ? ? "報關公司面單號": 200303900789,
? ? ? ? ? "公司內部單號": 730291,
? ? ? ? ? "發(fā)件人": "NAKAGAWA SUMIRE",
? ? ? ? ? "發(fā)件人地址": " 991-199-113,Kameido,Koto-ku,Tokyo",
? ? ? ? ? "發(fā)件人電話": "03-3999-3999",
? ? ? ? ? "發(fā)貨國家": "日本",
? ? ? ? ? "收件人": "張無忌",
? ? ? ? ? "收件人地址": "上海市閔行區(qū)虹梅南路1660弄薔薇八村88號8888室",
? ? ? ? ? "收件人電話": "182-1234-8888",
? ? ? ? ? "收貨人證件號碼": null,
? ? ? ? ? "收貨省份": null,
? ? ? ? ? "總計費重量": 3.2,
? ? ? ? ? "總件數": 13,
? ? ? ? ? "申報總價(CNY)": null,
? ? ? ? ? "申報總價(JPY)": null,
? ? ? ? ? "件數1": 10,
? ? ? ? ? "品名1": "紙尿片",
? ? ? ? ? "單價1(JPY)": null,
? ? ? ? ? "單位1": null,
? ? ? ? ? "申報總價1(CNY)": null,
? ? ? ? ? "申報總價1(JPY)": null,
? ? ? ? ? "件數2": null,
? ? ? ? ? "品名2": null,
? ? ? ? ? "單價2(JPY)": null,
? ? ? ? ? "單位2": null,
? ? ? ? ? "申報總價2(CNY)": null,
? ? ? ? ? "申報總價2(JPY)": null,
? ? ? ? ? "ID": 2,
? ? ? ? ? "附件":"base64/gif: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"
? ? ? ? }
? ? ? ]
? ? },
? ? {
? ? ? "Name": "Table2",
? ? ? "Cols": [
? ? ? ? { "type": "int", "size": 0, "name": "NO", "required": false },
? ? ? ? { "type": "float", "size": 0, "name": "訂單編號", "required": false },
? ? ? ? { "type": "integer", "size": 0, "name": "下單日期", "required": false },
? ? ? ? { "type": "str", "size": 255, "name": "下單平臺", "required": false }
? ? ? ],
? ? ? "Data": [
? ? ? ? {
? ? ? ? ? "NO": 1,
? ? ? ? ? "訂單編號": 200303900791,
? ? ? ? ? "下單日期": "2017-01-20",
? ? ? ? ? "下單平臺": "天貓"
? ? ? ? },
? ? ? ? {
? ? ? ? ? "NO": 2,
? ? ? ? ? "訂單編號": 200303900792,
? ? ? ? ? "下單日期": "2017-01-20",
? ? ? ? ? "下單平臺": "京東"
? ? ? ? }
? ? ? ]
? ? }
? ]
}
五、調用示例:
<!-- ★★★ 模式1 ★★★ -->
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title>康虎云報表系統測試</title>
</head>
<body>
? <div style="width: 100%;text-align:center;">
? ? <h2>康虎云報表系統</h2>
? ? <h3>打印測試(模式1)</h3>
? ? <div>
? ? ? <input type="button" id="btnPrint" value="打印" onClick="doSend(_reportData);" />
? ? </div>
? </div>
? <div id="output"></div>
</body>
<script type="text/javascript">
//定義數據腳本
var _reportData = '{"template":"waybill.fr3","Cols":[{"type":"str","size":255,"name":"HAWB#","required":false},<這里省略1000字> ]}';
//在瀏覽器控制臺輸出調試信息
console.log("reportData = " + _reportData);
</script>
<script language="javascript" type="text/javascript" src="cfprint.min.js"></script>
<script language="javascript" type="text/javascript" src="cfprint_ext.js"></script>
<script language="javascript" type="text/javascript">
/**下面四個參數必須放在myreport.js腳本后面,以覆蓋myreport.js中的默認值**/
var _delay_send = 1000; ? ? ? ? ? ? //發(fā)送打印服務器前延時時長,-1則表示不自動打印
var _delay_close = 1000; ? ? ? ? ? ?//打印完成后關閉窗口的延時時長, -1則表示不關閉
var cfprint_addr = "127.0.0.1"; ? ? //打印服務器監(jiān)聽地址
var cfprint_port = 54321; ? ? ? ? ? //打印服務器監(jiān)聽端口
</script>
</html>
<!-- ★★★ 模式2 ★★★ -->
<?php?
//如果有php運行環(huán)境,只需把該文件擴展名改成 .php,然后上傳到web目錄即可在真實服務器上測試
header("Access-Control-Allow-Origin: *");
?>
<!DOCTYPE html>
<head>
<meta charset="utf-8" />
<title>康虎云報表系統測試</title>
<style type="text/css">
#output {font-size: 12px; background-color:#F0FFF0;}
</style>
</head>
<body>
? <div style="width: 100%;text-align:center;">
? ? <h2>康虎云報表系統(Ver 1.3.0)</h2>
? ? <h3>打印測試(模式2)</h3>
? ? <div style="line-height: 1.5;">
? ? ? <div style="width: 70%; text-align: left;">
? ? ? <b>一、首先按下列步驟設置:</b><br/>
? ? ? 1、運行打印服務器;<br/>
? ? ? 2、按“停止”按鈕停止服務;<br/>
? ? ? 3、打開“設置”區(qū);<br/>
? ? ? 4、在“常用參數-->服務模式”中,選擇“模式2”;<br/>
? ? ? 5、按“啟動”按鈕啟動服務。
? ? ? </div>
? ? ? <div style="width: 70%; text-align: left;">
? ? ? <b>二、按本頁的“打印”按鈕開始打印。</b><br/>
? ? ? </div><br/>
? ? ? <input type="button" id="btnPrint" value="打印" /><br/><br/>
? ? ??
? ? ? <div style="width: 70%; text-align: left; font-size: 12px;">
? ? ? ? 由于JavaScript在不同域名下訪問會出現由來已久的跨域問題,所以正式部署到服務器使用時,要解決跨域問題。<br/>
? ? ? ? 對于IE8以上版本瀏覽器,只需增加一個reponse頭:Access-Control-Allow-Origin即可,而對于php、jsp、asp/aspx等動態(tài)語言而言,增加一個response頭是非常簡單的事,例如:<br/>
? ? ? ? <b>在php:</b><br/><span style="color: red;">
<?php <br/>
header("Access-Control-Allow-Origin: *");<br/>
?><br/>
? ? ? ? </span>
? ? ? ? <b>在jsp:</b><br/><span style="color: red;">
<% ?<br/>
response.setHeader("Access-Control-Allow-Origin", "*"); ?<br/>
%><br/>
? ? ? ? </span>
? ? ? ? <b>在asp.net中:</b><br/><span style="color: red;">
Response.AppendHeader("Access-Control-Allow-Origin", "*");
? ? ? ? </span>,<br/>其他語言里,大家請自行搜索“ajax跨域”。而對于IE8以下的瀏覽器,大家可以自行搜索“IE6+Ajax+跨域”尋找解決辦法吧,也可以聯系我們幫助。
? ? ? </div>
? ? </div>
? </div>
? <div id="output"></div>
</body>
<!-- 引入模式2所需的javascript支持庫 -->
<script type="text/javascript" src="cfprint_mode2.min.js" charset="UTF-8"></script>
<!-- 構造報表數據 -->
<script type="text/javascript">
var _reportData = '{"template":"waybill.fr3","ver":3, "Tables":[ {"Name":"Table1", "Cols":[{"type":"str","size":255,"name":"HAWB#","required":false},{"type":"int","size":0,"name":"NO","required":false},{"type":"float","size":0,"name":"報關公司面單號","required":false},{"type":"integer","size":0,"name":"公司內部單號","required":false},{"type":"str","size":255,"name":"發(fā)件人","required":false},{"type":"str","size":255,"name":"發(fā)件人地址","required":false},{"type":"str","size":255,"name":"發(fā)件人電話","required":false},{"type":"str","size":255,"name":"發(fā)貨國家","required":false},{"type":"str","size":255,"name":"收件人","required":false},{"type":"str","size":255,"name":"收件人地址","required":false},{"type":"str","size":255,"name":"收件人電話","required":false},{"type":"str","size":255,"name":"收貨人證件號碼","required":false},{"type":"str","size":255,"name":"收貨省份","required":false},{"type":"float","size":0,"name":"總計費重量","required":false},{"type":"int","size":0,"name":"總件數","required":false},{"type":"float","size":0,"name":"申報總價(CNY)","required":false},{"type":"float","size":0,"name":"申報總價(JPY)","required":false},{"type":"int","size":0,"name":"件數1","required":false},{"type":"str","size":255,"name":"品名1","required":false},{"type":"float","size":0,"name":"單價1(JPY)","required":false},{"type":"str","size":255,"name":"單位1","required":false},{"type":"float","size":0,"name":"申報總價1(CNY)","required":false},{"type":"float","size":0,"name":"申報總價1(JPY)","required":false},{"type":"int","size":0,"name":"件數2","required":false},{"type":"str","size":255,"name":"品名2","required":false},{"type":"float","size":0,"name":"單價2(JPY)","required":false},{"type":"str","size":255,"name":"單位2","required":false},{"type":"float","size":0,"name":"申報總價2(CNY)","required":false},{"type":"float","size":0,"name":"申報總價2(JPY)","required":false},{"type":"int","size":0,"name":"件數3","required":false},{"type":"str","size":255,"name":"品名3","required":false},{"type":"float","size":0,"name":"單價3(JPY)","required":false},{"type":"str","size":255,"name":"單位3","required":false},{"type":"float","size":0,"name":"申報總價3(CNY)","required":false},{"type":"float","size":0,"name":"申報總價3(JPY)","required":false},{"type":"int","size":0,"name":"件數4","required":false},{"type":"str","size":255,"name":"品名4","required":false},{"type":"float","size":0,"name":"單價4(JPY)","required":false},{"type":"str","size":255,"name":"單位4","required":false},{"type":"float","size":0,"name":"申報總價4(CNY)","required":false},{"type":"float","size":0,"name":"申報總價4(JPY)","required":false},{"type":"int","size":0,"name":"件數5","required":false},{"type":"str","size":255,"name":"品名5","required":false},{"type":"float","size":0,"name":"單價5(JPY)","required":false},{"type":"str","size":255,"name":"單位5","required":false},{"type":"float","size":0,"name":"申報總價5(CNY)","required":false},{"type":"float","size":0,"name":"申報總價5(JPY)","required":false},{"type":"str","size":255,"name":"參考號","required":false},{"type":"AutoInc","size":0,"name":"ID","required":false}],"Data":[{"公司內部單號":730293,"發(fā)貨國家":"日本","單價1(JPY)":null,"申報總價2(JPY)":null,"單價4(JPY)":null,"申報總價2(CNY)":null,"申報總價5(JPY)":null,"報關公司面單號":200303900791,"申報總價5(CNY)":null,"收貨人證件號碼":null,"申報總價1(JPY)":null,"單價3(JPY)":null,"申報總價1(CNY)":null,"申報總價4(JPY)":null,"申報總價4(CNY)":null,"收件人電話":"182-1758-9999","收件人地址":"上海市閔行區(qū)虹梅南路1660弄薔薇八村139號502室","HAWB#":"860014010055","發(fā)件人電話":"03-3684-9999","發(fā)件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":3,"ID":3,"單價2(JPY)":null,"申報總價3(JPY)":null,"單價5(JPY)":null,"申報總價3(CNY)":null,"收貨省份":null,"申報總價(JPY)":null,"申報總價(CNY)":null,"總計費重量":3.20,"收件人":"張三豐2","總件數":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"紙尿片","參考號":null,"發(fā)件人":"NAKAGAWA SUMIRE 2","單位5":null,"單位4":null,"單位3":null,"單位2":null,"單位1":null,"件數5":null,"件數4":null,"件數3":3,"件數2":null,"件數1":10},{"公司內部單號":730291,"發(fā)貨國家":"日本","單價1(JPY)":null,"申報總價2(JPY)":null,"單價4(JPY)":null,"申報總價2(CNY)":null,"申報總價5(JPY)":null,"報關公司面單號":200303900789,"申報總價5(CNY)":null,"收貨人證件號碼":null,"申報總價1(JPY)":null,"單價3(JPY)":null,"申報總價1(CNY)":null,"申報總價4(JPY)":null,"申報總價4(CNY)":null,"收件人電話":"182-1758-9999","收件人地址":"上海市閔行區(qū)虹梅南路1660弄薔薇八村139號502室","HAWB#":"860014010035","發(fā)件人電話":"03-3684-9999","發(fā)件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":1,"ID":1,"單價2(JPY)":null,"申報總價3(JPY)":null,"單價5(JPY)":null,"申報總價3(CNY)":null,"收貨省份":null,"申報總價(JPY)":null,"申報總價(CNY)":null,"總計費重量":3.20,"收件人":"張三豐","總件數":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"紙尿片","參考號":null,"發(fā)件人":"NAKAGAWA SUMIRE","單位5":null,"單位4":null,"單位3":null,"單位2":null,"單位1":null,"件數5":null,"件數4":null,"件數3":3,"件數2":null,"件數1":10},{"公司內部單號":730292,"發(fā)貨國家":"日本","單價1(JPY)":null,"申報總價2(JPY)":null,"單價4(JPY)":null,"申報總價2(CNY)":null,"申報總價5(JPY)":null,"報關公司面單號":200303900790,"申報總價5(CNY)":null,"收貨人證件號碼":null,"申報總價1(JPY)":null,"單價3(JPY)":null,"申報總價1(CNY)":null,"申報總價4(JPY)":null,"申報總價4(CNY)":null,"收件人電話":"182-1758-9999","收件人地址":"上海市閔行區(qū)虹梅南路1660弄薔薇八村139號502室","HAWB#":"860014010045","發(fā)件人電話":"03-3684-9999","發(fā)件人地址":" 1-1-13,Kameido,Koto-ku,Tokyo","NO":2,"ID":2,"單價2(JPY)":null,"申報總價3(JPY)":null,"單價5(JPY)":null,"申報總價3(CNY)":null,"收貨省份":null,"申報總價(JPY)":null,"申報總價(CNY)":null,"總計費重量":3.20,"收件人":"張無忌","總件數":13,"品名5":null,"品名4":null,"品名3":null,"品名2":null,"品名1":"紙尿片","參考號":null,"發(fā)件人":"NAKAGAWA SUMIRE 1","單位5":null,"單位4":null,"單位3":null,"單位2":null,"單位1":null,"件數5":null,"件數4":null,"件數3":3,"件數2":null,"件數1":10}]}]}';
if(window.console) console.log("reportData = " + _reportData);
</script>
<!-- 設置服務器參數 -->
<script language="javascript" type="text/javascript">
var cfprint_addr = "127.0.0.1"; ?//打印服務器監(jiān)聽地址
var cfprint_port = 54321; ? ? ? ?//打印服務器監(jiān)聽端口
var _url = "http://"+cfprint_addr+":"+cfprint_port;
</script>
<!-- 編寫回調函數用以處理服務器返回的數據 -->
<script type="text/javascript">
/**
?* 參數:
?* readyState: XMLHttpRequest的狀態(tài)
?* httpStatus: 服務端返回的http狀態(tài)
?* responseText: 服務端返回的內容
?*/
var callbackSuccess = function(readyState, httpStatus, responseText){
? if (httpStatus === 200) {
? ? //{"result": 1, "message": "打印完成"}
? ? var response = CFPrint.parseJSON(responseText);
? ? alert(response.message+", 狀態(tài)碼["+response.result+"]");
? }else{
? ? alert('打印失敗,HTTP狀態(tài)代碼是:'+httpStatus);
? }
}
/**
?* 參數:
?* message: 錯誤信息
?*/
var callbackFailed = function(message){?
? alert('發(fā)送打印任務出錯: ' + message);
}
</script>
<!-- 調用發(fā)送打印請求功能 ?-->
<script type="text/javascript">
(function(){
document.getElementById("btnPrint").onclick = function() {
? CFPrint.outputid = "output"; ?//指定調試信息輸出div的id
? CFPrint.SendRequest(_url, _reportData, callbackSuccess, callbackFailed); ?//發(fā)送打印請求
};
})();
</script>
</html>
六、模板設計器(重要!重要!!,好多朋友都找不到設計器入口)
在主界面上,雙擊右下角的“設計”兩個字,即可打開模板設計工具箱,在工具箱有三個按鈕和一個大文本框。三個按鈕的作用分別是:
設計:以大文本框中的json數據為數據源,打開模板設計器窗口;
預覽:以大文本框中的json數據為數據源,預覽當前所用模板的打印效果;
打印:以大文本框中的json數據為數據源,向打印機輸出當前所用模板生成的報表;
以后將會有詳細的模板設計教程發(fā)布,如果您遇到緊急的難題,請向作者咨詢。
總結
- 上一篇: NC6 关于打印
- 下一篇: 在Windows10上安装3Ds Max