首页 > 解决方案 > 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);
    }
}

有没有其他方法可以实现这一点。谢谢。

罗恩

标签: barcodeitext7

解决方案


由于您正在为特定事件类型注册事件处理程序,因此您可以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);

推荐阅读