我需要将BarcodeQRCode
图片添加到PdfCanvas
,但我还没有找到该怎么做。
我有以下代码
BarcodeQRCode qr;
PdfFormXObject xObject;
Image im;
PdfCanvas canvas = new PdfCanvas(page);
qr = new BarcodeQRCode(msg);
xObject = qr.CreateFormXObject(Color.BLACK, _pdfDoc);
im = new Image(xObject);
im.SetFixedPosition(10f, 10f);
此时我需要将图像对象添加到画布,但是在iText7中我需要像iText.IO.Image.ImageData那样传递图像对象,这就是问题所在,因为要做到这一点我需要Byte图片的[]。
我的问题是,如何获取Image对象的Byte []?
我也尝试过这样做以获取ImageData
PdfImageXObject xoi;
xoi = new PdfImageXObject(xObject.GetPdfObject());
iText.IO.Image.ImageData id = iText.IO.Image.ImageDataFactory.Create(xoi.GetImageBytes());
但我收到错误,因为xoi.GetImageBytes()
会抛出一个空引用异常。就像没有正确创建PdfImageXObject一样。
我有点疯狂,我需要帮助。
感谢。
答案 0 :(得分:2)
您不必在iText7中传递ImageData
对象以便在PdfFormXObject
上绘图。 PdfCanvas#addXObject
用于常见图像(PNG,JPG),但对于条形码,您不希望丢失质量,还有其他方法可以向画布添加条形码。
在您的情况下,您已经创建了一个BarcodeQRCode barcode = new BarcodeQRCode(messageText);
PdfFormXObject barcodeFormXObject = barcode.createFormXObject(Color.BLACK, document);
float scale = 5;
float x = 10;
float y = 10;
canvas.addXObject(barcodeFormXObject, scale, 0, 0, scale, x, y);
实例,您可以使用// Tweak this value for fixed width and height
float fixedWidthAndHeight = 300;
float formXobjectWidthAndHeight = barcodeFormXObject.getHeight();
float scale = fixedWidthAndHeight / formXobjectWidthAndHeight;
float x = 10;
float y = 10;
canvas.addXObject(barcodeFormXObject, scale, 0, 0, scale, x, y);
将其添加到画布,如下所示:
fixedWidthAndHeight
UPD :为了使条形码的大小固定,无论其内容如何,您都可以使用以下代码:
fixedWidthAndHeight
请注意,条形码会添加一些填充,因此如果您测量两个相对的黑色方块之间的距离,其宽度/高度将不等于uifigure
,但它将与{{1}成比例},所以你可以根据需要调整这个变量。