iText 7将条形码添加到带有事件的每个页面



我需要在iText Pdf的每一页上添加一个条形码,所以我认为事件可能是我需要的,但下面的代码只将条形码放在最后一页。

BarcodeEventHandler barCodeHandler = new  BarcodeEventHandler(pdfDoc, doc);
pdfDoc.addEventHandler(PdfDocumentEvent.END_PAGE, barCodeHandler);
protected class BarcodeEventHandler implements IEventHandler {
protected PdfDocument Pdfdoc;
protected Document doc;
public BarcodeEventHandler(PdfDocument Pdfdoc, Document doc) {
this.Pdfdoc = Pdfdoc;
this.doc = doc;
}
@Override
public void handleEvent(Event event) {
Barcode128 barcode = new Barcode128(Pdfdoc);
barcode.setCodeType(Barcode128.CODE128);
barcode.setCode("12345678");
barcode.setSize(12);
Rectangle rect = barcode.getBarcodeSize();
PdfFormXObject formXObject = new PdfFormXObject(new Rectangle(rect.getWidth(), rect.getHeight() + 10));
PdfCanvas pdfCanvas = new PdfCanvas(formXObject, Pdfdoc);
barcode.placeBarcode(pdfCanvas, ColorConstants.BLACK, ColorConstants.BLACK);
Image bCodeImage = new Image(formXObject);
bCodeImage.setRotationAngle(Math.toRadians(90));        
bCodeImage.setFixedPosition(100,200);       
doc.add(bCodeImage);
}
}

我还有别的办法可以做到这一点吗。谢谢

Ron

您可以通过将当前页面强制转换为PdfDocumentEvent来获取有关从event刷新的当前页面的信息,因为您正在为特定事件类型注册事件处理程序。此外,您根本不需要将Document传递给您的处理程序。从事件中获得PdfPage后,您可以使用Canvas助手类轻松地将条形码图像添加到该页面。处理程序代码:

protected class BarcodeEventHandler implements IEventHandler {
protected PdfDocument Pdfdoc;
public BarcodeEventHandler(PdfDocument Pdfdoc) {
this.Pdfdoc = Pdfdoc;
}
@Override
public void handleEvent(Event event) {
Barcode128 barcode = new Barcode128(Pdfdoc);
barcode.setCodeType(Barcode128.CODE128);
barcode.setCode("12345678");
barcode.setSize(12);
Rectangle rect = barcode.getBarcodeSize();
PdfFormXObject formXObject = new PdfFormXObject(new Rectangle(rect.getWidth(), rect.getHeight() + 10));
PdfCanvas pdfCanvas = new PdfCanvas(formXObject, Pdfdoc);
barcode.placeBarcode(pdfCanvas, ColorConstants.BLACK, ColorConstants.BLACK);
Image bCodeImage = new Image(formXObject);
bCodeImage.setRotationAngle(Math.toRadians(90));
bCodeImage.setFixedPosition(100,200);
PdfPage page = ((PdfDocumentEvent)event).getPage();
new Canvas(page, PageSize.A4.clone()).add(bCodeImage);
}
}

注册事件处理程序(在向文档添加内容之前一定要这样做(:

BarcodeEventHandler barCodeHandler = new  BarcodeEventHandler(pdfDocument);
pdfDocument.addEventHandler(PdfDocumentEvent.END_PAGE, barCodeHandler);

最新更新