无法在 iText7 (C#) 中设置密文颜色

Not able to set Redaction Color in iText7 (C#)

我无法使用下面的 C# 代码在 iText7 + PDFSweep 中更改 PDF 密文的颜色。红色密文框仅在 PDF 文件的第一页生效,然后在后续页面上密文框的颜色恢复为黑色

String input = SRC_FOLDER + "/report.pdf";
String output = SRC_FOLDER + "/report_redacted.pdf";

CompositeCleanupStrategy strategy = new CompositeCleanupStrategy();
strategy.Add(new RegexBasedCleanupStrategy(@"(\d\d\d\d)").SetRedactionColor(ColorConstants.RED));

PdfDocument pdf = new PdfDocument(new PdfReader(input), new PdfWriter(output));
PdfAutoSweep autoSweep = new PdfAutoSweep(strategy);
autoSweep.CleanUp(pdf);
pdf.Close();

这是 pdfSweep 中的错误。

ìText 逐页处理文档。 为了能够在不同的页面上重复使用相同的策略,每个 ICleanupStrategy 需要提供一个 reset 方法。

RegexBasedCleanupStragegyreset 方法的当前实现是

public ICleanupStrategy reset() {
    return new RegexBasedCleanupStrategy(this.pattern);
}

复制策略的模式,但不复制其颜色。因此,在除第一页以外的每一页上,颜色将默认恢复为黑色。

要解决此问题,只需创建您自己的实现来覆盖此行为以同时复制颜色。

我会将此报告为错误(此处为 iText 开发人员)

为了完成,这将是固定的方法: public class RegexBasedCleanupStrategy 扩展

RegexBasedLocationExtractionStrategy implements ICleanupStrategy {

private Pattern pattern;
private Color redactionColor = ColorConstants.BLACK;

public RegexBasedCleanupStrategy(String regex) {
    super(regex);
    this.pattern = Pattern.compile(regex);
}

public RegexBasedCleanupStrategy(Pattern pattern) {
    super(pattern);
    this.pattern = pattern;
}

@Override
public Color getRedactionColor(IPdfTextLocation location) {
    return redactionColor;
}

public RegexBasedCleanupStrategy setRedactionColor(Color color) {
    this.redactionColor = color;
    return this;
}

public ICleanupStrategy reset() {
    RegexBasedCleanupStrategy copy = new RegexBasedCleanupStrategy(pattern);
    copy.redactionColor = redactionColor;
    return copy;
}
}