Новый заголовок контуров не сохраняется - PullRequest
0 голосов
/ 06 ноября 2019

Я бы хотел изменить заголовок контуров с помощью iText 7. Я написал следующий код, но в полученном PDF-файле никаких изменений нет. Почему?

PdfDocument pdfDocument = new PdfDocument(
    new PdfReader(INPUT),
    new PdfWriter(OUTPUT),
    new StampingProperties().useAppendMode());

try (pdfDocument) {
   List<PdfOutline> outlines = pdfDocument.getOutlines(false).getAllChildren();
   outlines.forEach(o -> o.setTitle("Title"));
}

Ответы [ 2 ]

2 голосов
/ 07 ноября 2019

Используя этот код, я смог обновить все контуры на «Заголовок»:

try (PdfDocument pdfDocument = new PdfDocument(new PdfReader(INPUT_FILE), 
        new PdfWriter(OUTPUT_FILE))) {
    List<PdfOutline> outlines = pdfDocument.getOutlines(false).getAllChildren();
    outlines.forEach(o -> o.setTitle("Title"));
}

Как вы инициализируете pdfDocument ? Может быть, вы можете загрузить файл PDF?

1 голос
/ 08 ноября 2019

Как правильно указал @mkl в своем комментарии, работа в режиме добавления накладывает дополнительные требования на измененные объекты, которые должны быть помечены как таковые. iText должен делать это негласно для большинства операций, но в этом случае этого не происходит, что является ошибкой. Простое решение доступно, хотя. Вы можете получить необходимый PDF-объект и пометить его как измененный самостоятельно. Вот полное решение:

PdfDocument pdfDocument = new PdfDocument(
    new PdfReader(INPUT),
    new PdfWriter(OUTPUT),
    new StampingProperties().useAppendMode());

try (pdfDocument) {
    List<PdfOutline> outlines = pdfDocument.getOutlines(false).getAllChildren();
    for (PdfOutline outline : outlines) {
        outline.setTitle("Title");
        outline.getContent().setModified();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...