Аннотации безопасности на Java

В этом разделе рассматриваются подготовка и применение аннотаций для удаления конфиденциального содержимого PDF.

Пометка текста аннотациями удаления

Используйте этот пример, чтобы пометить найденный текст аннотациями удаления перед его безвозвратным удалением.

  1. Откройте исходный PDF-документ с помощью Document.
  2. Найдите целевой текст и создайте RedactionAnnotation для каждого совпадения.
  3. Настройте внешний вид аннотаций удаления и сохраните документ.
public static void markTextRedaction(Path inputFile, Path outputFile, String searchTerm) {
    try (Document document = new Document(inputFile.toString())) {
        TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(searchTerm);
        TextSearchOptions textSearchOptions = new TextSearchOptions(true);
        textFragmentAbsorber.setTextSearchOptions(textSearchOptions);
        document.getPages().accept(textFragmentAbsorber);

        for (var textFragment : textFragmentAbsorber.getTextFragments()) {
            Page page = textFragment.getPage();
            RedactionAnnotation redactionAnnotation = new RedactionAnnotation(page, textFragment.getRectangle());
            redactionAnnotation.setFillColor(Color.getGray());
            redactionAnnotation.setBorderColor(Color.getRed());
            redactionAnnotation.setColor(Color.getWhite());
            redactionAnnotation.setOverlayText("REDACTED");
            redactionAnnotation.setTextAlignment(HorizontalAlignment.Center);
            redactionAnnotation.setRepeat(true);
            page.getAnnotations().add(redactionAnnotation, true);
        }
        document.save(outputFile.toString());
    }
}

Применение существующих аннотаций удаления

В этом примере существующие на странице аннотации удаления применяются для безвозвратного удаления содержимого.

  1. Откройте исходный PDF-документ с помощью Document.
  2. Соберите аннотации типа AnnotationType.Redaction.
  3. Вызовите redact() для каждой собранной аннотации и сохраните обновлённый файл.
public static void applyRedaction(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        List<RedactionAnnotation> redactionAnnotations = new ArrayList<>();
        for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
            if (annotation.getAnnotationType() == AnnotationType.Redaction) {
                redactionAnnotations.add((RedactionAnnotation) annotation);
            }
        }
        for (RedactionAnnotation redactionAnnotation : redactionAnnotations) {
            redactionAnnotation.redact();
        }
        document.save(outputFile.toString());
    }
}

Пометка выбранной области страницы для удаления

Используйте этот подход, когда целевой контент определяется по позиции, а не по совпадению текста.

  1. Откройте исходный PDF-документ с помощью Document.
  2. Определите целевой прямоугольник на странице, например по расположению изображения.
  3. Создайте RedactionAnnotation для этой области и сохраните документ.
public static void redactArea(Path inputFile, Path outputFile) {
    try (Document document = new Document(inputFile.toString())) {
        ImagePlacementAbsorber imagePlacementAbsorber = new ImagePlacementAbsorber();
        Page page = document.getPages().get_Item(1);
        page.accept(imagePlacementAbsorber);

        com.aspose.pdf.Rectangle targetRect = imagePlacementAbsorber.getImagePlacements().get_Item(2).getRectangle();
        RedactionAnnotation redactionAnnotation = new RedactionAnnotation(page, targetRect);
        redactionAnnotation.setFillColor(Color.getGray());
        redactionAnnotation.setBorderColor(Color.getRed());
        redactionAnnotation.setColor(Color.getWhite());
        redactionAnnotation.setOverlayText("REDACTED");
        redactionAnnotation.setTextAlignment(HorizontalAlignment.Center);
        redactionAnnotation.setRepeat(true);

        page.getAnnotations().add(redactionAnnotation, true);
        document.save(outputFile.toString());
    }
}

Связанные темы об аннотациях