2017-10-22 78 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