9/04/2011

Создание QR code в LaTeX и не только: QR code generator in LaTeX

Оформляя постер к очередной конференции SPIE, в рекомендациях наткнулся на желательность использования QR code в постерах. Раньше я думал, что это нужно только хитрым японцам для идентификации деталей на всяких промышленных объектах. Оказывается, что QR code теперь в моде и их суют куда надо и не надо. О том, что это такое и зачем надо, а так же как сгенерировать QR code в ЛаТеХе, можно
прочесть далее.



Что такое QR code?

QR это аббревиатура от Quick Response, а сам QR-code это двумерный штрих-код:который может хранить ссылки, обычный текст, SMS сообщения, URL и другую контактную информацию.
В двух словах, это такая бумажная гиперссылка. То есть не просто штрих-код, а содержащий куда больше информации идентификатор, и сканер может "кликнуть" по закодированной внутри ссылке. Переход по ссылке можно отследить, и так вы знаете, кто и где просканировал ваш код.

Создали QR-коды в Японии, где они первоначально использовались для отслеживания автомобильных деталей в процессе производства. Теперь ими маркируют документы и товары, чтобы иметь возможность определить, кто их сканировал и как часто.

Как сгенерировать QR Code в LaTeX?
Есть веб-сайты, которые могут это сгенерировать, но они выдают чаще всего растровые картинки. А так как постеры верстаются теперь в beamerposter, то хорошо бы это сделать в LaTeX.

Сделать это можно с помощью пакета pst-barcode, который доступен для загрузки отсюда. Так же следует установить латеховского пакета pstricks.

Далее создаём тестовый латеховский документ, в который вставляем следующее:


\documentclass{article}
\usepackage{pst-barcode}
\begin{document}

\begin{pspicture}(1in,1in)
\psbarcode{test string}{}{qrcode}
\end
{pspicture}

\end{document}
Приведённый выше пример закодирует фразу test string в такие вот хитрые квадратики:
Собственно, обратно расшифровать этот код тоже можно, но уже не ЛаТеХом, а веб-сайтом (например этим).

Надо сказать, что pst-barcode не любит pdflatex и компилировать текст нужно через DVI - PS - PDF типа:
latex 123.tex
dvips 123.dvi
ps2pdf 123.ps

При этом можно управлять параметрами кодирования и закодировать в QR code много чего интересного:
\begin{pspicture}(15mm,15mm) \psbarcode{MECARD:N:Visissualy,Poopkin;EMAIL:poopkin@rogaandcopyta.narod.ru;TEL:74950001111;NOTE:ceo roga copyta;}{eclevel=L}{qrcode}
\end{pspicture}
Так, можно управлять степенью избыточности при кодировании, что достигается параметром eclevel=L
    • eclevel=L - Low
    • eclevel=M - Medium
    • eclevel=Q - Quality
    • eclevel=H - High

Для своего постера я использовал Medium уровень коррекции ошибок, и вот что получилось:
Разумеется, приведённый пример это только для затравки. Если дать волю фантазии, можно заделать небольшой макрос на ЛаТеХе и автоматически генерить QR code для каждого документа, подставляя значения из \title{}, \date{} и \author{} - и вообще всего, до чего дотянутся шаловливые ручонки. Так можно по обрывку титульной страницы выудить информацию о документе и, возможно, его авторе.


QR code online: веб-cервисы для создания и декодирования QR кодов

В эпоху вебдваноля, когда всё бессмыссленно и беспощадно переезжает в Веб, генерировать и расшифровывать QR code можно на веб-сервисах.


Где сгенерировать - QR code generator
Собственно, помимо ЛаТеХа, можно генерировать и в более простых веб-формочках. Замечательный обзор свободных генераторов QR кодов собрал 5 сайтов, из которых работают нормально в основном:

Где распознать - QR code reader
Среди сайтов, которые могут прочесть все эти странные кодированные картинки, работают следующие:
Из всех этих сайтов этот, конечно, всё-в-одном: и расшифровать QR code, и сгенерировать, и просветиться заодно.


Былое и думы
Описание полей MECARD для QR кодов хорошо и с примерами описано тут. Охочим до официального формата просьба проследовать по ссылке. Желающие почитать про софт для Андроидов, способный распознавать QR коды, могут насладиться хорошим обзором. С настольным софтом для QR code всё несколько грустно, но ситуация может исправиться, когда Zint допилят до съедобного состояния.

16 комментариев:

  1. самый простой способ получить qr код — google chart, вписывай что хочешь в URL и вперёд: https://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=Hello%20world&choe=UTF-8

    сохраняем png и используем с pdflatex/xelatex/luaчтотоновенькое

    ОтветитьУдалить
  2. @Сергей комментирует...

    сохраняем png и используем с pdflatex/xelatex/luaчтотоновенькое

    Как раз хотелось бы узнать у Михаила: зачем так всё усложнять? Понятно, что pst-barcode на выходе даёт векторный EPS, который легко масштабируется по размеру постера. Но если QR - всё равно набор пикселей, то "зачем платить больше"?

    ОтветитьУдалить
  3. кстати, ещё из неплохих онлайн-генераторов можно отметить http://qrcoder.ru/ и http://qr-coder.ru/

    ОтветитьУдалить
  4. Опечатка: латеховского пакет pstricks.

    За мануал спасибо, интересная информация.

    ОтветитьУдалить
  5. > С настольным софтом для QR code всё несколько грустно.
    По-моему, не стоит делать выводы по трёхлетней статье :-)

    Есть консольный qrencode, к нему GUI финские парни пишут. Или нужны какие-то специфические фичи?

    ОтветитьУдалить
  6. > http://qrcode.good-survey.com/ - генерирует и расшифровывает QR codes.

    Там в разделе Decode используется Silverlight О_о

    ОтветитьУдалить
  7. @Сергей комментирует...
    самый простой способ получить qr код — google chart
    Серж, оно не айс, мне ж в постер это вставлять.


    @iv_vl комментирует...
    Как раз хотелось бы узнать у Михаила: зачем так всё усложнять?
    Хотелось это вставлять сразу в документ при рендеринге постера.

    Но если QR - всё равно набор пикселей, то "зачем платить больше"?
    Смотри на вещи шире. Так можно делать автоматические пометки документов в латехе. Ну и чтобы перегенерировать, каждый раз не надо лезть в эти ваши интернеты.


    @goblinyara комментирует...
    кстати, ещё из неплохих онлайн-генераторов можно отметить
    О, спасибо за ссылки! Добавлено.

    @engraver комментирует...
    Опечатка: латеховского пакет pstricks.
    Пофиксено.

    За мануал спасибо, интересная информация.
    Пожалуйста. Собственно, я постеры готовил и нашёл сие. Решил поделиться и самому потом быстрее найти.


    @Dr.AKULAvich комментирует...
    По-моему, не стоит делать выводы по трёхлетней статье :-)
    Так ведь нету нифига, один навоз на джаве, который у меня так и не завёлся, сколько я ни бил в этот индийский бубен.

    Есть консольный qrencode, к нему GUI финские парни пишут. Или нужны какие-то специфические фичи?
    Ну, хочется настроек. Вот в этом латеховском варианте можно задать уровень коррекции ошибок, к примеру. Для простеньких кодов можно и на сайт слазить.

    @Yurij комментирует...
    Там в разделе Decode используется Silverlight О_о
    Хм... странно, а у меня в дебиане работает. Может, ко мне какой микрософтский код просочился? :-)

    ОтветитьУдалить
  8. Отличная статья! Про QR коды знал, но не знал что для LaTeXa есть тоже пакеты. Ну и коллекция ссылок на сайты полезная. Спасибо!

    ОтветитьУдалить
  9. Немного не в тему, но требую статьи про настройки ifplugd + guessnet в debian, ибо боролся неделю но до конца не победил((( (смог только сделать ацкое быстрое подключение мегафон гпрс)
    wicd и network manager не предлагать...

    ОтветитьУдалить
  10. Как то запись сильно напоминает перепечатку с
    http://gentoo.ru/node/23477

    ОтветитьУдалить
  11. @coderoid комментирует...
    Про QR коды знал, но не знал что для LaTeXa есть тоже пакеты.
    Я тоже не знал, и по началу хотел вклеивать QR-картинки с веб-сервисов в постер. Потом подумал, что это как-то моветон и латех должен такое уметь. Собственно....

    Ну и коллекция ссылок на сайты полезная. Спасибо!
    Пожалуйста. Ссылок не так много, и там кое-где пропущены важные моменты.


    @Анонимный комментирует...
    Немного не в тему, но требую статьи про настройки ifplugd + guessnet в debian
    Анонимус, а кто все эти люди?! :-)
    Судя по названиям, это что-то сетевое, а моя гармошка такое плохо умеет играть :-)


    до конца не победил
    Ну если Анонимус не победил, значит дело серьёзное.
    У меня нынче цейтнот, так что за идею поста, конечно, спасибо, но когда реализовать - не знаю. Может, Анонимус к тому времени всё победит.


    @alexxy комментирует...
    Как то запись сильно напоминает перепечатку с
    http://gentoo.ru/node/23477

    , я писал этот пост (и следующий, про визитку с QR) сам, и пользовался теми же ссылками, что и топикстартер на генте.ру. Когда гуглил в яндексе, оно мне не попалось. За ссылку спасибо, я её воткну в пост про визитку (он скоро будет).

    ОтветитьУдалить
  12. Кстати, в руководстве по созданию визитной карточки автор упомянул свой андроид-смартфон, а здесь нет. А ведь он и распознает, и создаст qr-код не хуже онлайн сервисов, да и третьим лицам информация не передастся.

    ОтветитьУдалить
  13. QR code становится все популярней, лавинообразно завоевывает рынок ритейла. масса интересных статей встретилась мне на одном из сайтов, http://qr.mid.ua/ , кажется...

    ОтветитьУдалить
  14. Я слышала, что можно генерировать QR-код таким образом, чтобы когда сканируешь его не отображался просто сайт а сразу открывалась в интернете страничка этого сайта. Может быть есть знающие люди которые подскажут где и как это можно сделать?

    ОтветитьУдалить
  15. А все-таки, как вставить кириллицу в qr-код, чтобы она потом правильно отразилась? Пробовал
    \documentclass[a4paper,10pt]{article}
    \usepackage[utf8]{inputenc}
    \usepackage[russian]{babel}
    \usepackage[T2A]{fontenc}
    \usepackage{pst-barcode}
    \begin{document}
    \begin{pspicture}(1in,1in)
    \psbarcode{MECARD:N:Пупкин,Вася;EMAIL:pupkin@mail.com;;}{eclevel=M height=1.15 width=1.15}{qrcode}
    \end{pspicture}
    \end{document}
    Пробовал распознать полученную картинку на сайте
    http://qrcode.good-survey.com/ , получил:

    ...
    First name
    T2ACYRV T2Acyra T2Acyrs T2Acyrya
    ...
    Raw content from QR Code: MECARD:N:T2ACYRP T2Acyru T2Acyrp T2Acyrk T2Acyri T2Acyrn ,T2ACYRV T2Acyra T2Acyrs T2Acyrya ;EMAIL:pupkin@mail.com;;

    Из гугления вынес что любой не английский текст является проблемой. Индонезийские товарищи прямо советуют преключиться на английский перед тем как в qr-код что-то писать...

    ОтветитьУдалить
  16. Прошу прощения за неточность в коммент. от 16.11.2012, 15:55:00.
    На сайте малазийских товарищей
    http://latex-my.blogspot.ru/2011/08/barcodes-galore.html ,
    вот в этом месте о языках и qr-коде:
    http://latex-my.blogspot.com/2011/08/barcodes-galore.html?showComment=1314104295134#c6245453720153452832

    ОтветитьУдалить