barcode - 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);
推荐阅读
- javascript - 组合两个点击函数的方法,当一个点击函数有一个窗口大小的if语句时
- applescript - Applescript 等到模态消失
- sql - 根据 SQL Server 中的条件返回前 1 条记录
- html - 当某些行有表情符号而某些行没有时,如何使表格中的行垂直对齐?
- excel - 通过 VBA 将 Crystal Report 导出为 pdf
- android - 如何使用用户触摸事件绘制可调整大小的五边形?
- excel - 有没有可以修复我当前代码的代码?
- javascript - 图像,当调整大小时变得模糊而不是像素化
- git - 在我拥有多个远程 git 之后,我不小心做了“git remote rm heroku”……现在所有遥控器都消失了
- oauth-2.0 - 仅通过简单的 oauth 模块从无头/解耦的 drupal 8 json-api 获取用户的 OWN 内容