iText7 - 如何获取图像对象数据

时间:2017-10-22 00:55:27

标签: c# itext7

我需要将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一样。

我有点疯狂,我需要帮助。

感谢。

1 个答案:

答案 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}成比例},所以你可以根据需要调整这个变量。