iText7 - 如何获取图像对象数据
问题描述:
我需要将BarcodeQRCode
图像添加到PdfCanvas
,但我还没有找到如何去做。iText7 - 如何获取图像对象数据
我有以下代码
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 []?
我也试图这样做是为了获得图象 -
PdfImageXObject xoi;
xoi = new PdfImageXObject(xObject.GetPdfObject());
iText.IO.Image.ImageData id = iText.IO.Image.ImageDataFactory.Create(xoi.GetImageBytes());
而是我拿一个错误,因为xoi.GetImageBytes()
抛出一个空引用异常。就像PdfImageXObject没有正确创建。
我有点疯狂,我需要帮助。
谢谢。
答
您不必通过iText7中的ImageData
对象才能借鉴PdfCanvas
。 ImageData
适用于常见图像(PNG,JPG),但对于条形码您不想丢失质量,还有其他方式可以将条形码添加到画布上。
在你的情况,你已经创建了一个PdfFormXObject
实例,你可以用PdfCanvas#addXObject
如下它添加到画布:
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);
UPD:为了条形码是固定大小无关它的内容,你可以使用下面的代码:
// 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
你测量两个相对的黑色方块之间的距离,但它将与fixedWidthAndHeight
成正比,所以你可以根据需要调整这个变量。
你是什么意思的同一个问题?之前的问题是,您不知道如何正确地将条形码添加到画布上,现在您知道如何做到这一点,那么问题又如何呢?请通过编辑问题来正确描述您的问题。 –
感谢您的回答, 这是我尝试过的选项之一,但我遇到了与调用barcode.createFormXObject(Color.BLACK,modulesize,document)时使用modulesize相同的问题;而且我无法控制一个固定的升级,我的意思是能够确定生成的图像具有固定的维度。 – mduran16
问题是BarcodeQRCode生成的图像的大小因其内容而异,内容越大,生成的图像就越大,因此无法固定比例,因为它必须根据从图像的大小。 总之,我在寻找的是能够将图像缩放到固定维度,以将其添加到画布,而不管其内容,因为它是可变的。 可能我的问题与此同时也不知道如何计算该固定比例。 – mduran16