我正在尝试使用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代码的设置或误解?
由于 汤姆
答案 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_CORRECTION
和CHARACTER_SET
的选项,在发票上有74px * 74px的图像正方形。
因此,所有qrcodes看起来都是一样的,无论字符串是60还是160个字符都是相同的。
希望这有帮助。