使用以下 LaTeX 代码:
\documentclass[a4paper]{article}
\usepackage[pdf]{pstricks}
\usepackage{pst-barcode}
\begin{document}
\begin{pspicture}(0.7in,0.7in)
\psbarcode{01234567890}{eclevel=L}{qrcode}
\end{pspicture}
\end{document}
和带有“shell-escape”选项的 pdflatex
pdflatex -shell-escape QRCode.tex
已创建包含二维码的 PDF。但是,二维码是抗锯齿的。如何关闭抗锯齿功能?
我在 Mac OS X 10.6 上使用 MacTeX (TeX-Live 2010)
答案1
这纯 PostScript 条形码编写器pst-barcode 使用的 (BWIPP) 库将使用 PostScriptimagemask
运算符生成矩阵样式的条形码,而某些查看器(例如 Mac 上的预览)会错误地*选择进行插入。
回顾一下历史,BWIPPimage
在 2008-12-07 版本中放弃了 PostScript 操作符,因为越来越多的 PS 和 PDF 预览器开始插入其输出。替换imagemask
操作符一度效果更好,但显然并不完美,因此 BWIPP 在 2014-01-06 版本中改用填充路径,这应该最终解决了这个问题。
在 pst-barcode 更新之前,希望使用其现有 pst-barcode 和最新版本 BWIPP 的用户应将其barcode.pro
文件替换为barcode.ps
来自 monolithic 或 monolithic-package 的文件BWIPP 的分配。
更新
该问题已在 pst-barcode 0.14 中解决。
有趣的消遣
类似于马利皮沃的回答很有趣它使用自动跟踪针对二维条形码位图构建填充路径,BWIPP 自 2016-07-19 版本以来现在包含显着的成像改进。
矩阵渲染器之前将基于路径的图像构建为一组填充的正方形,每个正方形代表符号的一个暗模块,而现在我们将路径构建为一组最小的复杂多边形,描述图像内的暗区和亮区——非常小心地处理非零缠绕规则,以确保正确绘制封闭区域。这使我们能够提供高级成像功能,例如通过将暗区边缘收缩固定量来补偿二维条形码中的墨水扩散,如本文所述邮件列表帖子。
可以参见 PostScript 实现这里。
*:imagemask
除非有要求,否则应将其作为位图模板掩码应用,无需“插值”。
答案2
据我所知,抗锯齿是 PDF 查看器的一个功能,不受 LaTeX 的影响。您需要在查看器中手动关闭它。另请参阅相关文章使用 LaTeX 编译时,我的像素完美图片变得模糊,指的是图像看起来模糊。
答案3
不推荐的方式
我想分享我的解决方案仅用于历史目的,并作为新版本postscriptbarcode
目前还不是 TeX 发行版的一部分(2014 年 4 月)。解决方案这个问题对我很有效。
我不想吓到你,尤其是 TeX 初学者,但有时即使使用 TeX,你也可能会面临严峻的截止日期。2013 年 11 月,一位 Mac OS X 用户抱怨 PDF 中的条形码预览,我有两个小时的时间在生产和公开 PDF 文件之前修复它。我需要快速的解决方案,并且适用于 Windows、Linux 和 Mac OS X。出版商允许我使用任何(肮脏的)技巧。
那时我找到了补丁diff
但我没有测试过,因为这个项目有太多不同的版本。当时还没有解决这个问题的官方版本。我当时想以某种方式转换 PDF 文件。我试过了Inkscape
我没有时间pstoedit
实验。
作为一个FontForge
用户我开始考虑将光栅转换为矢量。有几个项目,其中两个主要项目是autotrace
和potrace
。我安装了它们并开始阅读文档,然后进行了我的第一次实验。
让我长话短说,我马上给你一个解决方案GraphicsMagick
+autotrace
, 在哪里:
- 我从
pst-barcode
通常的方式(auto-pst-pdf
)。 - 我将临时文件转换为光栅(GraphicsMagick,ImageMagick)。
- 我将结果跟踪为没有背景的矢量格式(自动跟踪)。蓝色是从 TeX 内部设置的,用于检查没有白色或其他背景颜色。关键值是
-corner-surround 1
它有助于找到 90 度角。 - 如果存在这样的结果,我会将结果包含回主 TeX 文件(
\IfFileExists
)。
所提出的解决方案仅适用于一页/条形码,对于包含更多页面/条形码的临时 PDF 文件,需要进行额外设置。除此之外,还可以即时进行此类转换 ( \write18
)。由于我主要使用 90 度角,因此它可能不适用于其他条形码类型。
我运行这些命令(它适用于 pdf-、xe- 和 lualatex;TeX Live):
lualatex --shell-escape mal-qrcode.tex
gm convert mal-qrcode-pics.pdf mal-qrcode-pics.bmp
autotrace -output-format pdf -output-file pst-qr.pdf -corner-surround 1 -background-color FFFFFF mal-qrcode-pics.bmp
pdfcrop --hires --margins 0 pst-qr.pdf mal-qrcode-pics-vector.pdf
lualatex --shell-escape mal-qrcode.tex
我附上了 TeX 文件 ( mal-qrcode.tex
) 和网络浏览器 (使用 pdf.js 的 Firefox) 中的结果预览。左图介绍了问题,右图显示了解决方案。
%! *latex mal-qrcode.tex
% with shell escape on
\documentclass[a4paper]{article}
\pagestyle{empty}
\usepackage{pst-barcode}
\usepackage{auto-pst-pdf}
\pagecolor{blue}
\begin{document}
\def\malfile{mal-qrcode-pics-vector.pdf}
\begin{pspicture}(0.7in,0.7in)
\psbarcode{01234567890}{eclevel=L}{qrcode}
\end{pspicture}
\IfFileExists{\malfile}{\includegraphics{\malfile}}{%
% The pspicture environment goes here if we want permanent replacement...
}% End of \IfFileExists...
\end{document}