iTextSharp和QR码大小调整

时间:2015-02-16 19:40:52

标签: .net itextsharp itext

我正在尝试使用iTextSharp在其上创建带有QR码的PDF。我遇到的问题是QR码的大小会根据我传入的内容而改变。说我有以下代码:

var val = "SER K250102 PNO 1011555-001 WGT 296.00 UNT LB";
//val = "SER K237706 PNO 1017401-001EJ08 WGT 365.00 UNT LB";

var barcode = new BarcodeQRCode(val, 100, 100, null);

var content = stamper.GetOverContent(1);

var image = barcode.GetImage();image.ScaleToFitHeight = false;
image.SetAbsolutePosition(100f, 100f);
image.SetDpi(600, 600);
content.AddImage(image);

如果我将第一个“val”变量传递给BarcodeQRCode(),则qr代码是一个大小;但是,如果我传入第二个“val”变量(注释掉,它只有4个附加字符),则qr代码大小要小得多。请注意,我正在以固定的高度和宽度传递,并且我正在设置绝对位置。

当我说qr代码较小时,我的意思是整体高度/宽度看起来是相同的,但代码本身的边距要厚得多,所以代码本身更小。有点像HTML,其中CSS元素的宽度可能是100px,由90px内容+ 10px边距组成。这里,“内容”(qr代码)正在缩小,边缘(周围的空白区域)正在增加。

奇怪的是,如果我在“val”变量中添加更多文本,则qr代码大小会增加!

更奇怪的是,当我调试并观察每个场景的图像变量时,属性是相同的:相同的h / w,比例等。

还有其他人经历过这种波动的大小吗?解决了吗?我是否遗漏了一些关于如何渲染qr代码的设置或误解?

由于 汤姆

1 个答案:

答案 0 :(得分:2)

我的大小也有同样的问题,所以我使用不同的宽度和高度检查了源代码。

所以我发现,特殊尺寸与更大的填充相同。 因此,我在两种尺寸上使用318以获得最佳分辨率。

我使用的是itextpdf-5.5.6.jar(但我认为它的相对之处是相同的)。 我在QRCodeWriter.class中找到了我的解决方案,尤其是在renderResult()方法中。

例如,第一个差异在105/106之间,接下来在158/159之间,依此类推。 leftPadding就是这样30 / 8,34 / 12,依此类推。诀窍是"多个" -variable和inputWidth基于qrCode的版本。

该版本将使用initQRCode()

中的Encoder.class方法计算

" numInputBytes" - 121 " ErrorCorrectionLevel" - M. "模式" - Mode.BYTE

所以在我的情况下它的版本7和inputWidth是(17 + 4 *版本= 45)。

根据你的评论我写了更多的信息。

我使用Jaspersoft® Studio来创建发票。在类中,代码看起来像这样 - > java.awt.Image qrCode = new BarcodeQRCode(qrCodeDataString, 318, 318, hints).createAwtImage(Color.BLUE, Color.WHITE);。 变量hints中包含ERROR_CORRECTIONCHARACTER_SET的选项,在发票上有74px * 74px的图像正方形。 因此,所有qrcodes看起来都是一样的,无论字符串是60还是160个字符都是相同的。

希望这有帮助。