革天明 发表于 2012-5-15 14:34:05

再接再厉!Gu_xl版主已经生成EAN-13条形码,如何生成二维码?

生成打开码的请见此贴:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=89727

       二维码 ,又称二维条码,二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理。它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。
       下面是百度百科的介绍:http://baike.baidu.com/view/132241.htm
       如果大家使用的是智能机的话,十有八九你已经接触过二维码了。
       大家如果有需要的话就顶一下此帖,望对此有研究的高手可以攻克二维码的LISP化。





革天明 发表于 2012-5-15 16:25:03

替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的。
;|*********************************************************************************
; 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)

革天明 发表于 2019-10-29 11:05:33

flowerson 发表于 2019-10-28 17:27
www.xcad.ch/tests/getqrcode.php

这里面的php你那里有没有呢?可否发上来学习?

php方式称为WebAPI,不是一个php就成的,要完整的API文档才能正常用
我几年前用过PHP,刚才搜了一下没找到,现在用C++方式实现的

flowerson 发表于 2019-10-28 17:27:24

革天明 发表于 2012-5-15 16:25
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...

www.xcad.ch/tests/getqrcode.php

这里面的php你那里有没有呢?可否发上来学习?

革天明 发表于 2012-5-15 14:34:57

那个RAR文件中包含一个DLL文件,就是不知道如何调用,高手们,挑战来了!

qjchen 发表于 2012-5-15 15:51:38

本帖最后由 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


革天明 发表于 2012-5-15 16:16:07

http://autocadtips.wordpress.com ... de-to-your-drawing/
该页无法访问,大侠们的视野很开阔啊,我虽然就在明经转,但我觉得明经已经很好了,呵呵

qjchen 发表于 2012-5-15 20:17:49

革天明 发表于 2012-5-15 16:25 static/image/common/back.gif
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...

说的是块的问题么,只要弄个随机块名如时间块名,也就可以了

革天明 发表于 2012-5-15 20:43:49

本帖最后由 革天明 于 2012-5-15 20:45 编辑

qjchen 发表于 2012-5-15 20:17 http://bbs.mjtd.com/static/image/common/back.gif
说的是块的问题么,只要弄个随机块名如时间块名,也就可以了

下午我的解决方法是使用x炸开,但这个代码需要联网,使用DLL可以不用联网吗,也就是一楼那个RAR里面的DLL

qjchen 发表于 2012-5-15 21:46:57

楼上的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
应该可以很快实现的。

时间不多,学习下原理:)

这个的代码应该是比较简单的

hf423 发表于 2012-5-27 13:34:34

革天明 发表于 2012-5-15 16:25 static/image/common/back.gif
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...

用不了中文字符啊,识别出来的是乱码。

革天明 发表于 2012-6-5 09:32:10

hf423 发表于 2012-5-27 13:34 static/image/common/back.gif
用不了中文字符啊,识别出来的是乱码。

输入汉字可以生成二维码,识别出来的却是乱码,我错了
每天一顶,希望此问题最终可以解决!
页: [1] 2 3 4
查看完整版本: 再接再厉!Gu_xl版主已经生成EAN-13条形码,如何生成二维码?