在我的应用程序中,我必须将条形码图像添加到现有的PDF文档中。我可以用零字节编写修改后的PDF。我是iText的新手。我无法在此代码中找到问题,我没有时间分析使其正常工作。
PdfReader reader = null ;
PdfStamper pdfStamper = null ;
PdfWriter writer = null ;
reader = new PdfReader("....\\barcode.pdf");
pdfStamper = new PdfStamper(reader, new FileOutputStream();
Barcode128 code128 = new Barcode128();
String barcodeValue = "" ;
code128.setCode(barcodeValue);
PdfContentByte contentByte = null ;
for(int i = 1 ; i <= reader.getNumberOfPages() ; i ++){
contentByte = pdfStamper.getUnderContent(i);
code128.setAltText("");
code128.setBarHeight((float) (10));
Image image = code128.createImageWithBarcode(contentByte, null, null);
image.setAbsolutePosition(23f, 20f);
image.setBackgroundColor(CMYKColor.WHITE);
image.setWidthPercentage(75);
contentByte.fill();
contentByte.addImage(image);
contentByte.fill();
}
PdfDocument pdfDocument = contentByte.getPdfDocument();
writer = PdfWriter.getInstance(pdfDocument, new FileOutputStream());
reader.close();
pdfStamper.close();
writer.close();
答案 0 :(得分:4)
确实很明显,您没有时间编写代码,因为它充满了错误。即使你的问题也是错的!您问“如何将图像添加到现有PDF?”但是,在阅读代码时,您实际上想要将条形码添加到现有PDF的每个页面。您创建条形码然后将其转换为图像。为什么不将条形码添加为Form XObject?此外,完全不清楚为什么使用contentByte.fill()
。此外,您将图像添加到硬编码位置。那是明智的吗?
我写了一个示例,它将条形码添加到包含16页的PDF的每个页面:StampBarcode
PdfReader reader = new PdfReader(src);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
int n = reader.getNumberOfPages();
Rectangle pagesize;
for (int i = 1; i <= n; i++) {
PdfContentByte over = stamper.getOverContent(i);
pagesize = reader.getPageSize(i);
float x = pagesize.getLeft() + 10;
float y = pagesize.getTop() - 50;
BarcodeEAN barcode = new BarcodeEAN();
barcode.setCodeType(Barcode.EAN8);
String s = String.valueOf(i);
s = "00000000".substring(s.length()) + s;
barcode.setCode(s);
PdfTemplate template =
barcode.createTemplateWithBarcode(over, BaseColor.BLACK, BaseColor.BLACK);
over.addTemplate(template, x, y);
}
stamper.close();
reader.close();
如您所见,我使用了一个显示页码的EAN8条形码(用零填充)。我根据我要添加条形码的页面的页面大小来计算x
和y
值。我没有创建Image
对象。相反,我使用PdfTemplate
对象。
这是生成的PDF:add_barcode.pdf
如您所见,每页的左上角都有条形码。
额外注意事项:
有人有勇气拒绝这个答案。我不明白为什么。我能想到的唯一原因是我的答案太棒了,因为我解释了如何添加条形码而不是图像。请允许我解释一下如何完成。用addTemplate()
方法替换addImage()
方法就足够了。
for (int i = 1; i <= n; i++) {
PdfContentByte over = stamper.getOverContent(i);
pagesize = reader.getPageSize(i);
float x = pagesize.getLeft() + 10;
float y = pagesize.getTop() - 50;
Image img = Image.getInstance("image" + i + ".jpg");
img.setAbsolutePosition(x, y);
over.addImage(img);
}