首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PdfPCellEvent在iText7中的等价性是什么?

PdfPCellEvent在iText7中的等价性是什么?
EN

Stack Overflow用户
提问于 2018-07-02 14:25:53
回答 1查看 523关注 0票数 0

我试图运行一些样本从白皮书"digitalsignatures20130304 A白皮书由布鲁诺洛瓦吉“第54页。我找不到iText7对应的PdfPCellEvent,PdfContentByte。请引导我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-12 10:40:55

iText 7不是带有重构包或类名的iText 5的克隆,它有一个新的体系结构。因此,并不总是有1:1对应的类,但是有其他方法来达到相同的效果。

它有助于查看iText人员的示例端口;在github上,您可以在I7js-签名项目中从移植到iText 7的白皮书中找到许多示例。

例如,您提到了PDF文件的数字签名白皮书的第54页。考虑到您给出的关键字,以及页面上只有一个示例,我假设您希望翻译这个方法和助手类:

代码语言:javascript
复制
protected PdfPCell createSignatureFieldCell(PdfWriter writer, String name) {
    PdfPCell cell = new PdfPCell();
    cell.setMinimumHeight(50);
    PdfFormField field = PdfFormField.createSignature(writer);
    field.setFieldName(name);
    field.setFlags(PdfAnnotation.FLAGS_PRINT);
    cell.setCellEvent(new MySignatureFieldEvent(field));
    return cell;
}

public class MySignatureFieldEvent implements PdfPCellEvent {
    public PdfFormField field;

    public MySignatureFieldEvent(PdfFormField field) {
        this.field = field;
    }

    public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases) {
        PdfWriter writer = canvases[0].getPdfWriter();
        field.setPage();
        field.setWidget(position, PdfAnnotation.HIGHLIGHT_INVERT);
        writer.addAnnotation(field);
    }
}

您可以在SignatureWorkflow类中找到此处的端口

代码语言:javascript
复制
protected Cell createSignatureFieldCell(String name) {
    Cell cell = new Cell();
    cell.setHeight(50);
    cell.setNextRenderer(new SignatureFieldCellRenderer(cell, name));
    return cell;
}

class SignatureFieldCellRenderer extends CellRenderer {
    public String name;

    public SignatureFieldCellRenderer(Cell modelElement, String name) {
        super(modelElement);
        this.name = name;
    }

    @Override
    public void draw(DrawContext drawContext) {
        super.draw(drawContext);
        PdfFormField field = PdfFormField.createSignature(drawContext.getDocument(), getOccupiedAreaBBox());
        field.setFieldName(name);
        field.getWidgets().get(0).setHighlightMode(PdfAnnotation.HIGHLIGHT_INVERT);
        field.getWidgets().get(0).setFlags(PdfAnnotation.PRINT);
        PdfAcroForm.getAcroForm(drawContext.getDocument(), true).addField(field);
    }
}

正如您所看到的,它们之间存在一定的差异,特别是使用的不是事件,而是使用Renderer,而且字段构造和定位不再分开,它们在代码中的相同位置发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51138429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档