удалить текст из верхнего и нижнего колонтитула с помощью iText c# - PullRequest
1 голос
/ 14 июля 2020

есть ли способ удалить текст из верхнего и нижнего колонтитула в PDF с помощью iText 7 в c#?

Я нашел этот фрагмент кода с сайта iText, но, очевидно, необходима лицензия:

public void manipulatePdf(String dest) throws IOException {
    //Load the license file to use cleanup features
    LicenseKey.loadLicenseFile(System.getenv("ITEXT7_LICENSEKEY") + "/itextkey-multiple-products.xml");
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
    List cleanUpLocations = new ArrayList();
    cleanUpLocations.add(new PdfCleanUpLocation(1, new Rectangle(97, 405, 383, 40), Color.GRAY));
    PdfCleanUpTool cleaner = new PdfCleanUpTool(pdfDoc, cleanUpLocations);
    cleaner.cleanUp();
    pdfDoc.close();
}

Ссылка: https://kb.itextpdf.com/home/it7kb/faq/how-to-remove-text-from-a-pdf

У кого-нибудь есть образец кода для удаления текста из верхнего и нижнего колонтитула?

PS: если кто-то знает, как редактировать и сохранить тот же файл с помощью iText будет большим подспорьем

EDIT 1 Я сам добавляю текст в PDF. Я использую пример, найденный здесь, на этой странице: https://kb.itextpdf.com/home/it7kb/faq/how-to-add-text-as-a-header-or-footer.

Теперь вопрос в том, как удалить текст, который я ввел в PDF, после того, как он был сохранен в файл? Я хочу снова открыть PDF-файл и удалить этот текст.

Edit2: Это сообщение не отвечает на мой вопрос. Код внутри метода manipulatePdf точно такой же, как тот, который я вставил ранее. Такие классы, как PdfCleanUpTool, не встречаются в версии сообщества.

Ответы [ 3 ]

0 голосов
/ 17 июля 2020

В общем, есть два способа «удалить текст» из PDF.

Прежде всего, не все читаемые человеком символы в PDF-файле создаются командами рисования текста с использованием определенного шрифта. Некоторые из них представляют собой пиксельные изображения, которые имеют пиксели, очень похожие на слова. Другие - это штриховые рисунки (особенно, когда текст претерпел искажение в какой-либо художественной программе. Это может быть даже контур обрезки, примененный к чему-то.

  1. Закройте это. Отбросьте прямоугольник который соответствует цвету фона. У этого способа есть fl aws, но это легко. Вы по-прежнему можете выбрать / скопировать / вставить текст. Вы все еще можете искать его. Он все еще там, только что покрыт. Это работает с любым типом " text ".

  2. Удалите текст. Если вы знаете, где он будет на странице, вы можете удалить все, что существует только в этой области (возможно, прямоугольник). IIR C iText имеет способ перечислить все команды рисования в существующем PdfContentByte, хотя я не могу сказать вам название типа моей головы. Вы просто удаляете все в этом прямоугольнике. В зависимости от того, как iText настроен в наши дни, вам, возможно, придется вместо этого скопировать все, что не находится в этом прямоугольнике. Неудобно, но эффективно.

0 голосов
/ 17 июля 2020

В моем случае я использовал это:

PdfDocument pdf = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
        ICleanupStrategy cleanupStrategy = new RegexBasedCleanupStrategy(new Regex(textToRemove)).SetRedactionColor(ColorConstants.PINK);
        PdfAutoSweep autoSweep = new PdfAutoSweep(cleanupStrategy);
        autoSweep.CleanUp(pdf);
        pdf.Close();

Конечным результатом является удаление текста и отображение прямоугольного angular цвета фона. Вы можете выбрать цвет фона. Не уверен, можно ли сделать его прозрачным.

Вам необходимо установить: https://www.nuget.org/packages/itext7.pdfsweep/. Приведенный выше код удалит текст из всего документа, но в вашем случае вы можете быть более конкретными c, чтобы удалить только из верхнего и нижнего колонтитула.

PS: взято отсюда: https://itextpdf.com/en/products/itext-7/pdf-redaction-pdfsweep

0 голосов
/ 17 июля 2020

В вашем примере кода используется надстройка pdfSweep, которая доступна как в рамках предложения лицензии AGPL, так и предложения коммерческой лицензии. Чтобы использовать надстройку в режиме AGPL, если это применимо к вашему проекту, просто установите pdfSweep из NuGet (https://www.nuget.org/packages/itext7.pdfsweep/) и используйте код без загрузки лицензии:

PdfDocument pdfDoc = new PdfDocument(new PdfReader(SRC), new PdfWriter(dest));
List cleanUpLocations = new ArrayList();
cleanUpLocations.add(new PdfCleanUpLocation(1, new Rectangle(97, 405, 383, 40), Color.GRAY));
PdfCleanUpTool cleaner = new PdfCleanUpTool(pdfDoc, cleanUpLocations);
cleaner.cleanUp();
pdfDoc.close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...