明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9010|回复: 36

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

    [复制链接]
发表于 2012-5-15 14:34 | 显示全部楼层 |阅读模式
生成打开码的请见此贴:http://bbs.mjtd.com/forum.php?mod=viewthread&tid=89727

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





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2012-5-15 16:25 | 显示全部楼层
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的。
;|*********************************************************************************
; 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)
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2019-10-29 11:05 | 显示全部楼层
flowerson 发表于 2019-10-28 17:27
www.xcad.ch/tests/getqrcode.php

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

php方式称为WebAPI,不是一个php就成的,要完整的API文档才能正常用
我几年前用过PHP,刚才搜了一下没找到,现在用C++方式实现的
发表于 2019-10-28 17:27 | 显示全部楼层
革天明 发表于 2012-5-15 16:25
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...

www.xcad.ch/tests/getqrcode.php

这里面的php你那里有没有呢?可否发上来学习?
 楼主| 发表于 2012-5-15 14:34 | 显示全部楼层
那个RAR文件中包含一个DLL文件,就是不知道如何调用,高手们,挑战来了!
发表于 2012-5-15 15:51 | 显示全部楼层
本帖最后由 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中的函数即可

  1. (defun urlenc (ch)
  2.         (cond
  3.                 ((eq ch " ") " ");+
  4.                 ((eq ch "!") "%21")
  5.                 ((eq ch """) "%22")
  6.                 ((eq ch "#") "%23")
  7.                 ((eq ch "[        DISCUZ_CODE_0        ]quot;) "%24")
  8.                 ((eq ch "%") "%25")
  9.                 ((eq ch "&") "%26")
  10.                 ((eq ch "'") "%27")
  11.                 ((eq ch "(") "%28")
  12.                 ((eq ch ")") "%29")
  13.                 ((eq ch "*") "%2A")
  14.                 ((eq ch "+") "%2B")
  15.                 ((eq ch ",") "%2C")
  16.                 ((eq ch "/") "%2F")
  17.                 ((eq ch ":") "%3A")
  18.                 ((eq ch ";") "%3B")
  19.                 ((eq ch "<") "%3C")
  20.                 ((eq ch "=") "%3D")
  21.                 ((eq ch ">") "%3E")
  22.                 ((eq ch "?") "%3F")
  23.                 ((eq ch "@") "%40")
  24.                 ((eq ch "[") "%5B")
  25.                 ((eq ch "\") "%5C")
  26.                 ((eq ch "]") "%5D")
  27.                 ((eq ch "^") "%5E")
  28.                 ((eq ch "`") "%60")
  29.                 ((eq ch "{") "%7B")
  30.                 ((eq ch "|") "%7C")
  31.                 ((eq ch "}") "%7D")
  32.                 ((eq ch "~") "%7E")
  33.                 ((eq ch "‘") "%91")
  34.                 ((eq ch "’") "%92")
  35.                 ((eq ch "?") "%A1")
  36.                 ((eq ch "¢") "%A2")
  37.                 ((eq ch "£") "%A3")
  38.                 ((eq ch "¤") "%A4")
  39.                 ((eq ch "¥") "%A5")
  40.                 ((eq ch "|") "%A6")
  41.                 ((eq ch "§") "%A7")
  42.                 ((eq ch "¨") "%A8")
  43.                 ((eq ch "?") "%A9")
  44.                 ((eq ch "a") "%AA")
  45.                 ((eq ch "?") "%AB")
  46.                 ((eq ch "?") "%AC")
  47.                 ((eq ch "-") "%AD")
  48.                 ((eq ch "?") "%AE")
  49.                 ((eq ch "ˉ") "%AF")
  50.                 ((eq ch "°") "%B0")
  51.                 ((eq ch "±") "%B1")
  52.                 ((eq ch "2") "%B2")
  53.                 ((eq ch "3") "%B3")
  54.                 ((eq ch "′") "%B4")
  55.                 ((eq ch "μ") "%B5")
  56.                 ((eq ch "?") "%B6")
  57.                 ((eq ch "·") "%B7")
  58.                 ((eq ch "?") "%B8")
  59.                 ((eq ch "1") "%B9")
  60.                 ((eq ch "o") "%BA")
  61.                 ((eq ch "?") "%BB")
  62.                 ((eq ch "?") "%BC")
  63.                 ((eq ch "?") "%BD")
  64.                 ((eq ch "?") "%BE")
  65.                 ((eq ch "?") "%BF")
  66.                 ((eq ch "à") "%C0")
  67.                 ((eq ch "á") "%C1")
  68.                 ((eq ch "?") "%C2")
  69.                 ((eq ch "?") "%C3")
  70.                 ((eq ch "?") "%C4")
  71.                 ((eq ch "?") "%C5")
  72.                 ((eq ch "?") "%C6")
  73.                 ((eq ch "?") "%C7")
  74.                 ((eq ch "è") "%C8")
  75.                 ((eq ch "é") "%C9")
  76.                 ((eq ch "ê") "%CA")
  77.                 ((eq ch "?") "%CB")
  78.                 ((eq ch "ì") "%CC")
  79.                 ((eq ch "í") "%CD")
  80.                 ((eq ch "?") "%CE")
  81.                 ((eq ch "?") "%CF")
  82.                 ((eq ch "D") "%D0")
  83.                 ((eq ch "?") "%D1")
  84.                 ((eq ch "ò") "%D2")
  85.                 ((eq ch "ó") "%D3")
  86.                 ((eq ch "?") "%D4")
  87.                 ((eq ch "?") "%D5")
  88.                 ((eq ch "?") "%D6")
  89.                 ((eq ch "×") "%D7")
  90.                 ((eq ch "?") "%D8")
  91.                 ((eq ch "ù") "%D9")
  92.                 ((eq ch "ú") "%DA")
  93.                 ((eq ch "?") "%DB")
  94.                 ((eq ch "ü") "%DC")
  95.                 ((eq ch "Y") "%DD")
  96.                 ((eq ch "T") "%DE")
  97.                 ((eq ch "?") "%DF")
  98.                 ((eq ch "à") "%E0")
  99.                 ((eq ch "á") "%E1")
  100.                 ((eq ch "a") "%E2")
  101.                 ((eq ch "?") "%E3")
  102.                 ((eq ch "?") "%E4")
  103.                 ((eq ch "?") "%E5")
  104.                 ((eq ch "?") "%E6")
  105.                 ((eq ch "?") "%E7")
  106.                 ((eq ch "è") "%E8")
  107.                 ((eq ch "é") "%E9")
  108.                 ((eq ch "ê") "%EA")
  109.                 ((eq ch "?") "%EB")
  110.                 ((eq ch "ì") "%EC")
  111.                 ((eq ch "í") "%ED")
  112.                 ((eq ch "?") "%EE")
  113.                 ((eq ch "?") "%EF")
  114.                 ((eq ch "e") "%F0")
  115.                 ((eq ch "?") "%F1")
  116.                 ((eq ch "ò") "%F2")
  117.                 ((eq ch "ó") "%F3")
  118.                 ((eq ch "?") "%F4")
  119.                 ((eq ch "?") "%F5")
  120.                 ((eq ch "?") "%F6")
  121.                 ((eq ch "÷") "%F7")
  122.                 ((eq ch "?") "%F8")
  123.                 ((eq ch "ù") "%F9")
  124.                 ((eq ch "ú") "%FA")
  125.                 ((eq ch "?") "%FB")
  126.                 ((eq ch "ü") "%FC")
  127.                 ((eq ch "y") "%FD")
  128.                 ((eq ch "t") "%FE")
  129.                 ((eq ch "?") "%FF")
  130.                 (T ch)
  131.         )
  132. )



当然,相信问题应该有更优美的写法的。


另,.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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2012-5-15 16:16 | 显示全部楼层
http://autocadtips.wordpress.com ... de-to-your-drawing/
该页无法访问,大侠们的视野很开阔啊,我虽然就在明经转,但我觉得明经已经很好了,呵呵
发表于 2012-5-15 20:17 | 显示全部楼层
革天明 发表于 2012-5-15 16:25
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...

说的是块的问题么,只要弄个随机块名如时间块名,也就可以了
 楼主| 发表于 2012-5-15 20:43 | 显示全部楼层
本帖最后由 革天明 于 2012-5-15 20:45 编辑
qjchen 发表于 2012-5-15 20:17
说的是块的问题么,只要弄个随机块名如时间块名,也就可以了


下午我的解决方法是使用x炸开,但这个代码需要联网,使用DLL可以不用联网吗,也就是一楼那个RAR里面的DLL
发表于 2012-5-15 21:46 | 显示全部楼层
楼上的DLL,应该用ARX、VBA或者.NET办到 (一楼中的两篇PDF,有一篇就是用VC利用这个生成的,另一篇很长的是讲QRCODE的编码标准),利用Highflybird兄的方法,应该可以用lisp顺利调用DLL,不过感觉可能还是C的方便些

刚才看了KEAN的.NET代码,也是用的ZXING.ORG的ENCODING方法

假如想用.NET编的话,也可以利用一下 http://www.codeproject.com/Artic ... urce-QRCode-Library
应该可以很快实现的。

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

这个的代码应该是比较简单的
发表于 2012-5-27 13:34 | 显示全部楼层
革天明 发表于 2012-5-15 16:25
替换后的代码如下,可以使用中文字符了,但不一个比较大的问题是你生成新的二维码时,已生成的会变成最新的 ...

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

点评

支持汉字的,你再试试  发表于 2012-5-28 08:08
 楼主| 发表于 2012-6-5 09:32 | 显示全部楼层
hf423 发表于 2012-5-27 13:34
用不了中文字符啊,识别出来的是乱码。

输入汉字可以生成二维码,识别出来的却是乱码,我错了
每天一顶,希望此问题最终可以解决!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 06:47 , Processed in 0.215184 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表