Java 在具有透明背景(iText)的PDF上创建条形码覆盖
目前,我正在添加带有以下代码的条形码:Java 在具有透明背景(iText)的PDF上创建条形码覆盖,java,itext,barcode,Java,Itext,Barcode,目前,我正在添加带有以下代码的条形码: PdfContentByte overContent = pdfStamper.getOverContent(page); Rectangle pageSize = pdfReader.getPageSize(page); Barcode128 code128 = new Barcode128(); code128.setCode(barcodeText); code128.setCodeType(Barcode128.CODE128); PdfTemp
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);
不幸的是,生成的戳记图像具有透明背景。条形码后面的内容会干扰扫描仪软件:
或者,我可以添加带有
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);
请看一下这本书。它向从头创建的文档添加条形码以及浅灰色背景:
您必须对此进行调整,以将条形码添加到现有文档中。您可以轻松使用不透明的白色背景,而不是浅灰色背景。这不应该是个问题,因为原则是一样的:
我复制了用于创建条形码的代码:
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();
canvas.addTemplate(template, 36, 750);
我使用硬编码坐标并计算条形码的宽度和高度:
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();
canvas.addTemplate(template, 36, 750);
在添加条形码之前,我添加了一个特定颜色的矩形。请注意,我使用saveState()
/restoreState()
序列来确保填充矩形后填充颜色恢复为原始颜色:
canvas.saveState();
canvas.setColorFill(BaseColor.LIGHT_GRAY);
canvas.rectangle(x, y, w, h);
canvas.fill();
canvas.restoreState();
绘制矩形后,可以添加条形码:
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();
canvas.addTemplate(template, 36, 750);
谢谢!我已经在上面添加了我的解决方案。很好!无论谁读过这篇文章,现在都有一个例子,说明如何在新创建的文档以及现有文档中实现这一点。谢谢@DocH