再接再厉!Gu_xl版主已经生成EAN-13条形码,如何生成二维码?
生成打开码的请见此贴:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=89727二维码 ,又称二维条码,二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。
下面是百度百科的介绍:http://baike.baidu.com/view/132241.htm
如果大家使用的是智能机的话,十有八九你已经接触过二维码了。
大家如果有需要的话就顶一下此帖,望对此有研究的高手可以攻克二维码的LISP化。
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的。
;|*********************************************************************************
; QRCODE for Autocad
; ?2010 swisscad / Ian Vogel
; V 0.91 released 2010.08.22
;*********************************************************************************|;
(defun c:QRcode (/ str)
(cond
((not (validstr
(setq str (getstring "\nEnter Text to encode :" T))
)
)
(princ "\nNo text entered")
)
((QRcode str (setq name "QRCode") 0)
(command "_REGENALL")
(command "_INSERT" name)
)
)
(princ)
)
(defun QRcode (string ; string to encode
blockname ; name of the block to create
options ; options
; 1 = perform only if block already exists
/ QR x y startx row)
(vl-load-com)
(cond
((not (validstr blockname)))
((or (zerop (logand 1 options))
(tblsearch "BLOCK" blockname)
)
(setq baseurl "www.xcad.ch/tests/getqrcode.php")
(setq QR (valstr (gethttp (strcat baseurl
"%3Fstring="
(urlencode (urlencode string))
)
0
)
)
)
(cond
((eq (substr QR 1 6) "111111") ;response OK
(setq QR (split QR "-")
y 0
)
;create Qrcode block
(entmake (list '(0 . "BLOCK")
(cons 2 blockname)
'(8 . "0")
'(70 . 0)
'(10 0.0 0.0 0.0)
)
)
(foreach row QR
(setq x 0)
(while (< x (strlen row))
(cond
((eq (substr row (1+ x) 1) "1")
;memorize start of filled zone
(if (not startx)
(setq startx x)
)
(if (not (eq (substr row (+ x 2) 1) "1"))
(progn
;draw filled zone
(entmake (list (cons 0 "SOLID")
(cons 8 "0")
(cons 10 (list startx y))
(cons 11 (list (1+ x) y))
(cons 12 (list startx (1- y)))
(cons 13 (list (1+ x) (1- y)))
(cons 62 0)
)
)
(setq startx nil)
)
)
)
)
(setq x (1+ x))
)
(setq y (1- y))
)
;end of block
(setq bl_a (entmake '((0 . "ENDBLK"))))
)
)
T
)
)
)
;;-------------------------------------------------------
;; Get an URL
;;-------------------------------------------------------
(defun gethttp (lien opt / fi line tmp util content)
(setq util (vla-get-Utility
(vla-get-ActiveDocument (vlax-get-acad-object))
)
)
(if (eq (vla-isurl util lien) :vlax-true)
(if (vl-catch-all-error-p
(vl-catch-all-apply
'vla-GetRemoteFile
(list util lien 'tmp :vlax-true)
)
)
(princ "\nError getting http file.")
(progn
(setq fi (open tmp "r")
content ""
)
(while (setq line (read-line fi))
(setq content (strcat content line))
)
(close fi)
)
)
)
content
)
;;-------------------------------------------------------
;; Turn any var to a string
;;-------------------------------------------------------
(defun valstr (val)
(cond
((eq (type val) 'STR) val)
((eq (type val) 'REAL) (rtos val))
((eq (type val) 'INT) (itoa val))
(T "")
)
)
;;-------------------------------------------------------
;; Check that a string is not empty
;;-------------------------------------------------------
(defun validstr (str / tmp)
(if (> (strlen (setq tmp (trim (valstr str)))) 0)
tmp
nil
)
)
;;-------------------------------------------------------
;; Remove blanks from a string
;;-------------------------------------------------------
(defun trim (str /)
(setq str (valstr str))
(while (eq (substr str 1 1) " ")
(setq str (substr str 2))
)
(while (and (> (strlen str) 1)
(eq (substr str (strlen str) 1) " ")
)
(setq str (substr str 1 (- (strlen str) 1)))
)
str
)
;;-------------------------------------------------------
;; Split a string
;;-------------------------------------------------------
(defun split (str ; string to split
cara ; separator
/ n portion xstring seqstart chrcode portion)
(cond
((and (= (type str) (type cara) 'STR) (eq (strlen cara) 1))
(setq n -1
seqstart 1
chrcode(ascii cara)
)
(while (setq n (vl-string-position chrcode str (+ n 1) nil))
(setq xstring(append xstring
(list (substr str seqstart (- n seqstart -1)))
)
seqstart (+ n 2)
)
)
(setq xstring (append xstring (list (substr str seqstart))))
(if xstring
xstring
(list str)
)
)
((= (type str) (type cara) 'STR)
(setq portion ""
n 1
)
(if (<= (strlen cara) (strlen str))
(progn
(while (<= n (strlen str))
(if (eq (substr str n (strlen cara)) cara)
(setq xstring (append xstring (list portion))
portion ""
n (+ n (strlen cara))
)
(setq portion (strcat portion (substr str n 1))
n (+ 1 n)
)
)
)
(if
(or (> (strlen portion) 0)
(eq (substr str (abs (- (strlen str) (strlen cara) -1)))
cara
)
)
(setq xstring (append xstring (list portion)))
)
)
(setq xstring (list str))
)
(if xstring
xstring
(list "")
)
)
(T (list nil))
)
)
;;----------------------------------------------------------
;; See PHP function
;; http://ch2.php.net/manual/fr/function.htmlentities.php
;;----------------------------------------------------------
(defun urlencode (str / result n len)
(setq result ""
n 1
len (strlen str)
)
(while (<= n len)
(setq result (strcat result (urlenc (substr str n 1)))
n (+ 1 n)
)
)
result
)
(defun urlenc (ch)
(cond
((eq ch " ") " ") ;+
((eq ch "!") "%21")
((eq ch "\"") "%22")
((eq ch "#") "%23")
((eq ch "$") "%24")
((eq ch "%") "%25")
((eq ch "&") "%26")
((eq ch "'") "%27")
((eq ch "(") "%28")
((eq ch ")") "%29")
((eq ch "*") "%2A")
((eq ch "+") "%2B")
((eq ch ",") "%2C")
((eq ch "/") "%2F")
((eq ch ":") "%3A")
((eq ch ";") "%3B")
((eq ch "<") "%3C")
((eq ch "=") "%3D")
((eq ch ">") "%3E")
((eq ch "?") "%3F")
((eq ch "@") "%40")
((eq ch "[") "%5B")
((eq ch "\\") "%5C")
((eq ch "]") "%5D")
((eq ch "^") "%5E")
((eq ch "`") "%60")
((eq ch "{") "%7B")
((eq ch "|") "%7C")
((eq ch "}") "%7D")
((eq ch "~") "%7E")
((eq ch "‘") "%91")
((eq ch "’") "%92")
((eq ch "?") "%A1")
((eq ch "¢") "%A2")
((eq ch "£") "%A3")
((eq ch "¤") "%A4")
((eq ch "¥") "%A5")
((eq ch "|") "%A6")
((eq ch "§") "%A7")
((eq ch "¨") "%A8")
((eq ch "?") "%A9")
((eq ch "a") "%AA")
((eq ch "?") "%AB")
((eq ch "?") "%AC")
((eq ch "-") "%AD")
((eq ch "?") "%AE")
((eq ch "ˉ") "%AF")
((eq ch "°") "%B0")
((eq ch "±") "%B1")
((eq ch "2") "%B2")
((eq ch "3") "%B3")
((eq ch "′") "%B4")
((eq ch "μ") "%B5")
((eq ch "?") "%B6")
((eq ch "·") "%B7")
((eq ch "?") "%B8")
((eq ch "1") "%B9")
((eq ch "o") "%BA")
((eq ch "?") "%BB")
((eq ch "?") "%BC")
((eq ch "?") "%BD")
((eq ch "?") "%BE")
((eq ch "?") "%BF")
((eq ch "à") "%C0")
((eq ch "á") "%C1")
((eq ch "?") "%C2")
((eq ch "?") "%C3")
((eq ch "?") "%C4")
((eq ch "?") "%C5")
((eq ch "?") "%C6")
((eq ch "?") "%C7")
((eq ch "è") "%C8")
((eq ch "é") "%C9")
((eq ch "ê") "%CA")
((eq ch "?") "%CB")
((eq ch "ì") "%CC")
((eq ch "í") "%CD")
((eq ch "?") "%CE")
((eq ch "?") "%CF")
((eq ch "D") "%D0")
((eq ch "?") "%D1")
((eq ch "ò") "%D2")
((eq ch "ó") "%D3")
((eq ch "?") "%D4")
((eq ch "?") "%D5")
((eq ch "?") "%D6")
((eq ch "×") "%D7")
((eq ch "?") "%D8")
((eq ch "ù") "%D9")
((eq ch "ú") "%DA")
((eq ch "?") "%DB")
((eq ch "ü") "%DC")
((eq ch "Y") "%DD")
((eq ch "T") "%DE")
((eq ch "?") "%DF")
((eq ch "à") "%E0")
((eq ch "á") "%E1")
((eq ch "a") "%E2")
((eq ch "?") "%E3")
((eq ch "?") "%E4")
((eq ch "?") "%E5")
((eq ch "?") "%E6")
((eq ch "?") "%E7")
((eq ch "è") "%E8")
((eq ch "é") "%E9")
((eq ch "ê") "%EA")
((eq ch "?") "%EB")
((eq ch "ì") "%EC")
((eq ch "í") "%ED")
((eq ch "?") "%EE")
((eq ch "?") "%EF")
((eq ch "e") "%F0")
((eq ch "?") "%F1")
((eq ch "ò") "%F2")
((eq ch "ó") "%F3")
((eq ch "?") "%F4")
((eq ch "?") "%F5")
((eq ch "?") "%F6")
((eq ch "÷") "%F7")
((eq ch "?") "%F8")
((eq ch "ù") "%F9")
((eq ch "ú") "%FA")
((eq ch "?") "%FB")
((eq ch "ü") "%FC")
((eq ch "y") "%FD")
((eq ch "t") "%FE")
((eq ch "?") "%FF")
(T ch)
)
)
(princ "\nType QRCODE")
(princ) flowerson 发表于 2019-10-28 17:27
www.xcad.ch/tests/getqrcode.php
这里面的php你那里有没有呢?可否发上来学习?
php方式称为WebAPI,不是一个php就成的,要完整的API文档才能正常用
我几年前用过PHP,刚才搜了一下没找到,现在用C++方式实现的 革天明 发表于 2012-5-15 16:25
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...
www.xcad.ch/tests/getqrcode.php
这里面的php你那里有没有呢?可否发上来学习? 那个RAR文件中包含一个DLL文件,就是不知道如何调用,高手们,挑战来了! 本帖最后由 qjchen 于 2012-5-15 20:18 编辑
:)
我是没有研究过二维码的。
不过搜索了一下。
QRCODE for Autocad
2010 swisscad / Ian Vogel
V 0.91 released 2010.08.22
瑞士人曾经写过二维码的代码,http://cadtips.cadalyst.com/standard-blocks/create-qr-codes
这里面 Download this tips是可以下载代码的,不过下载完的代码,是有问题的,大概是语言问题。
所以,在
http://autocadtips.wordpress.com ... de-to-your-drawing/
这里可以看到源代码。其中主要是这个函数替换掉zip中的函数即可
(defun urlenc (ch)
(cond
((eq ch " ") " ");+
((eq ch "!") "%21")
((eq ch "\"") "%22")
((eq ch "#") "%23")
((eq ch "[ DISCUZ_CODE_0 ]quot;) "%24")
((eq ch "%") "%25")
((eq ch "&") "%26")
((eq ch "'") "%27")
((eq ch "(") "%28")
((eq ch ")") "%29")
((eq ch "*") "%2A")
((eq ch "+") "%2B")
((eq ch ",") "%2C")
((eq ch "/") "%2F")
((eq ch ":") "%3A")
((eq ch ";") "%3B")
((eq ch "<") "%3C")
((eq ch "=") "%3D")
((eq ch ">") "%3E")
((eq ch "?") "%3F")
((eq ch "@") "%40")
((eq ch "[") "%5B")
((eq ch "\\") "%5C")
((eq ch "]") "%5D")
((eq ch "^") "%5E")
((eq ch "`") "%60")
((eq ch "{") "%7B")
((eq ch "|") "%7C")
((eq ch "}") "%7D")
((eq ch "~") "%7E")
((eq ch "‘") "%91")
((eq ch "’") "%92")
((eq ch "?") "%A1")
((eq ch "¢") "%A2")
((eq ch "£") "%A3")
((eq ch "¤") "%A4")
((eq ch "¥") "%A5")
((eq ch "|") "%A6")
((eq ch "§") "%A7")
((eq ch "¨") "%A8")
((eq ch "?") "%A9")
((eq ch "a") "%AA")
((eq ch "?") "%AB")
((eq ch "?") "%AC")
((eq ch "-") "%AD")
((eq ch "?") "%AE")
((eq ch "ˉ") "%AF")
((eq ch "°") "%B0")
((eq ch "±") "%B1")
((eq ch "2") "%B2")
((eq ch "3") "%B3")
((eq ch "′") "%B4")
((eq ch "μ") "%B5")
((eq ch "?") "%B6")
((eq ch "·") "%B7")
((eq ch "?") "%B8")
((eq ch "1") "%B9")
((eq ch "o") "%BA")
((eq ch "?") "%BB")
((eq ch "?") "%BC")
((eq ch "?") "%BD")
((eq ch "?") "%BE")
((eq ch "?") "%BF")
((eq ch "à") "%C0")
((eq ch "á") "%C1")
((eq ch "?") "%C2")
((eq ch "?") "%C3")
((eq ch "?") "%C4")
((eq ch "?") "%C5")
((eq ch "?") "%C6")
((eq ch "?") "%C7")
((eq ch "è") "%C8")
((eq ch "é") "%C9")
((eq ch "ê") "%CA")
((eq ch "?") "%CB")
((eq ch "ì") "%CC")
((eq ch "í") "%CD")
((eq ch "?") "%CE")
((eq ch "?") "%CF")
((eq ch "D") "%D0")
((eq ch "?") "%D1")
((eq ch "ò") "%D2")
((eq ch "ó") "%D3")
((eq ch "?") "%D4")
((eq ch "?") "%D5")
((eq ch "?") "%D6")
((eq ch "×") "%D7")
((eq ch "?") "%D8")
((eq ch "ù") "%D9")
((eq ch "ú") "%DA")
((eq ch "?") "%DB")
((eq ch "ü") "%DC")
((eq ch "Y") "%DD")
((eq ch "T") "%DE")
((eq ch "?") "%DF")
((eq ch "à") "%E0")
((eq ch "á") "%E1")
((eq ch "a") "%E2")
((eq ch "?") "%E3")
((eq ch "?") "%E4")
((eq ch "?") "%E5")
((eq ch "?") "%E6")
((eq ch "?") "%E7")
((eq ch "è") "%E8")
((eq ch "é") "%E9")
((eq ch "ê") "%EA")
((eq ch "?") "%EB")
((eq ch "ì") "%EC")
((eq ch "í") "%ED")
((eq ch "?") "%EE")
((eq ch "?") "%EF")
((eq ch "e") "%F0")
((eq ch "?") "%F1")
((eq ch "ò") "%F2")
((eq ch "ó") "%F3")
((eq ch "?") "%F4")
((eq ch "?") "%F5")
((eq ch "?") "%F6")
((eq ch "÷") "%F7")
((eq ch "?") "%F8")
((eq ch "ù") "%F9")
((eq ch "ú") "%FA")
((eq ch "?") "%FB")
((eq ch "ü") "%FC")
((eq ch "y") "%FD")
((eq ch "t") "%FE")
((eq ch "?") "%FF")
(T ch)
)
)
当然,相信问题应该有更优美的写法的。
另,.Net大师Kean也在这个时间附近,探讨了是否将二维码作为 PLUGINS OF THE MONTH
于是,有这么几篇文章
http://through-the-interface.typ ... inside-autocad.html
http://through-the-interface.typ ... es-for-autocad.html
http://through-the-interface.typ ... tocad-drawings.html
http://autocadtips.wordpress.com ... de-to-your-drawing/
该页无法访问,大侠们的视野很开阔啊,我虽然就在明经转,但我觉得明经已经很好了,呵呵 革天明 发表于 2012-5-15 16:25 static/image/common/back.gif
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...
说的是块的问题么,只要弄个随机块名如时间块名,也就可以了 本帖最后由 革天明 于 2012-5-15 20:45 编辑
qjchen 发表于 2012-5-15 20:17 http://bbs.mjtd.com/static/image/common/back.gif
说的是块的问题么,只要弄个随机块名如时间块名,也就可以了
下午我的解决方法是使用x炸开,但这个代码需要联网,使用DLL可以不用联网吗,也就是一楼那个RAR里面的DLL 楼上的DLL,应该用ARX、VBA或者.NET办到 (一楼中的两篇PDF,有一篇就是用VC利用这个生成的,另一篇很长的是讲QRCODE的编码标准),利用Highflybird兄的方法,应该可以用lisp顺利调用DLL,不过感觉可能还是C的方便些
刚才看了KEAN的.NET代码,也是用的ZXING.ORG的ENCODING方法
假如想用.NET编的话,也可以利用一下 http://www.codeproject.com/Articles/20574/Open-Source-QRCode-Library
应该可以很快实现的。
时间不多,学习下原理:)
这个的代码应该是比较简单的 革天明 发表于 2012-5-15 16:25 static/image/common/back.gif
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...
用不了中文字符啊,识别出来的是乱码。 hf423 发表于 2012-5-27 13:34 static/image/common/back.gif
用不了中文字符啊,识别出来的是乱码。
输入汉字可以生成二维码,识别出来的却是乱码,我错了
每天一顶,希望此问题最终可以解决!