2016-02-17 29 views
1

目前我添加條形碼用下面的代碼一個PDF創建條形碼疊加:上與instransparent背景(iText的)

PdfContentByte overContent = pdfStamper.getOverContent(page); 
Rectangle pageSize = pdfReader.getPageSize(page); 

Barcode128 code128 = new Barcode128(); 
code128.setCode(barcodeText); 
code128.setCodeType(Barcode128.CODE128); 
PdfTemplate template = code128.createTemplateWithBarcode(overContent, BaseColor.BLACK, BaseColor.BLACK); 

Rectangle barcodeSize = code128.getBarcodeSize(); 

float x = pageSize.getRight() - barcodeSize.getWidth() - 10; 
float y = pageSize.getTop() - barcodeSize.getHeight() - 10; 

overContent.addTemplate(template, x, y); 

不幸的是,所得到的衝壓圖像具有透明背景。條碼後面的內容干擾掃描儀,軟件:

http://imgur.com/Ga6sVuv

替代我可以

Image image = code128.createImageWithBarcode(over, BaseColor.BLACK, BaseColor.BLACK); 
image.setAbsolutePosition(x, y); 
over.addImage(image); 

但有添加條形碼,該setTransparency方法似乎也無能爲力。

任何人都有我的提示如何在普通的白色背景上創建條形碼?

編輯 - 解決方案:

PdfContentByte overContent = pdfStamper.getOverContent(page); 
Rectangle pageSize = pdfReader.getPageSize(page); 

Barcode128 code128 = new Barcode128(); 
code128.setCode(barcodeText); 
code128.setCodeType(Barcode128.CODE128); 

PdfTemplate template = code128.createTemplateWithBarcode(overContent, BaseColor.BLACK, BaseColor.BLACK); 

float x = pageSize.getRight() - template.getWidth() - 10; 
float y = pageSize.getTop() - template.getHeight() - 10; 
float w = pageSize.getRight() - 10; 
float h = pageSize.getTop() - 10; 

overContent.saveState(); 
overContent.setColorFill(BaseColor.WHITE); 
overContent.rectangle(x-2, y-2, w+4, h+4); 
overContent.fill(); 
overContent.restoreState(); 

overContent.addTemplate(template, x, y); 

回答

0

請大家看看BarcodeBackground。它增加了條形碼,以從頭開始創建,以及淺灰色的背景文件:

enter image description here

你得這個適應添加條形碼到已存在的文件。而不是淺灰色背景,您可以輕鬆使用不透明的白色背景。這不應該是一個問題,因爲其原理是一樣的:

我複製你用來創建一個條碼代碼:

PdfContentByte canvas = writer.getDirectContent(); 
Barcode128 code128 = new Barcode128(); 
code128.setCode("12345XX789XXX"); 
code128.setCodeType(Barcode128.CODE128); 
PdfTemplate template = code128.createTemplateWithBarcode(
     canvas, BaseColor.BLACK, BaseColor.BLACK); 

我使用硬編碼的座標和計算的寬度和高度條形碼:

float x = 36; 
float y = 750; 
float w = template.getWidth(); 
float h = template.getHeight(); 

之前添加條形碼,我在一個特定的顏色添加一個矩形。請注意,我用的是saveState()/restoreState()序列,以確保填充顏色恢復到原來的顏色,一旦矩形填充:

canvas.saveState(); 
canvas.setColorFill(BaseColor.LIGHT_GRAY); 
canvas.rectangle(x, y, w, h); 
canvas.fill(); 
canvas.restoreState(); 

一旦繪製矩形,您可以添加條形碼:

canvas.addTemplate(template, 36, 750); 
+0

非常感謝! 我已經在上面添加了我的解決方案。 –

+0

不錯!現在閱讀這篇文章的人有一個關於如何在新創建的文檔以及現有文檔中實現這個功能的例子。謝謝@DocH –