我试图运行一些样本从白皮书"digitalsignatures20130304 A白皮书由布鲁诺洛瓦吉“第54页。我找不到iText7对应的PdfPCellEvent,PdfContentByte。请引导我。
发布于 2018-07-12 10:40:55
iText 7不是带有重构包或类名的iText 5的克隆,它有一个新的体系结构。因此,并不总是有1:1对应的类,但是有其他方法来达到相同的效果。
它有助于查看iText人员的示例端口;在github上,您可以在I7js-签名项目中从移植到iText 7的白皮书中找到许多示例。
例如,您提到了PDF文件的数字签名白皮书的第54页。考虑到您给出的关键字,以及页面上只有一个示例,我假设您希望翻译这个方法和助手类:
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类中找到此处的端口
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,而且字段构造和定位不再分开,它们在代码中的相同位置发生。
https://stackoverflow.com/questions/51138429
复制相似问题