2017-10-22 59 views
0

我需要将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没有正确创建。

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

谢谢。

回答

2

您不必通过iText7中的ImageData对象才能借鉴PdfCanvasImageData适用于常见图像(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成正比,所以你可以根据需要调整这个变量。

+0

你是什么意思的同一个问题?之前的问题是,您不知道如何正确地将条形码添加到画布上,现在您知道如何做到这一点,那么问题又如何呢?请通过编辑问题来正确描述您的问题。 –

+0

感谢您的回答, 这是我尝试过的选项之一,但我遇到了与调用barcode.createFormXObject(Color.BLACK,modulesize,document)时使用modulesize相同的问题;而且我无法控制一个固定的升级,我的意思是能够确定生成的图像具有固定的维度。 – mduran16

+0

问题是BarcodeQRCode生成的图像的大小因其内容而异,内容越大,生成的图像就越大,因此无法固定比例,因为它必须根据从图像的大小。 总之,我在寻找的是能够将图像缩放到固定维度,以将其添加到画布,而不管其内容,因为它是可变的。 可能我的问题与此同时也不知道如何计算该固定比例。 – mduran16