如何解决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);
}
}
还有其他方法可以实现这一目标吗?谢谢。
罗恩
解决方法
由于您正在为特定事件类型注册事件处理程序,因此可以将当前页面从event
强制转换为PdfDocumentEvent
来获取信息。另外,您根本不需要将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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。