добавление аннотаций при копировании файла PDF в другой - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь добавить аннотации к каждой странице, которая копируется в мой новый pdf, но я не могу это сделать ...

Вот мой код.

import com.lowagie.text.Document;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.*;

import java.awt.*;
import java.io.FileOutputStream;


public class Annotations {

    public static void main(String[] args) {

        try {

            PdfReader reader = new PdfReader("string-to-pdf.pdf");
            Document document = new Document(reader.getPageSizeWithRotation(1));
            PdfCopy copy = new PdfCopy(document,
                    new FileOutputStream("temp.pdf"));
            copy.setPdfVersion(PdfWriter.VERSION_1_5);
            document.open();
            for(int i = 1; i <=reader.getNumberOfPages();i++){
                copy.addPage(copy.getImportedPage(reader,i));
                copy.addAnnotation(PdfAnnotation.createLink(copy, new Rectangle(200f, 700f, 30455454f, 800f), PdfAnnotation.HIGHLIGHT_TOGGLE, PdfAction.javaScript("app.alert('Hello');\r", copy)));
            }

            document.newPage();
            // page 3
            PdfContentByte pcb = new PdfContentByte(copy);
            pcb.setColorFill(new Color(0xFF, 0x00, 0x00));

            document.close();

        } catch (Exception de) {
            de.printStackTrace();
        }
    }
}

файлы копируются, но не видят аннотации в новом файле.

1 Ответ

0 голосов
/ 20 февраля 2020

PdfCopy для точного копирования страниц, а не для создания; таким образом, процедуры модификации, унаследованные от PdfWriter, отключены, например,

@Override
public void addAnnotation(PdfAnnotation annot) {  }

Выделенные манипуляции возможны, хотя с помощью штампов страниц, ср. createPageStamp. JavaDocs этого метода содержат пример кода использования, включая добавление аннотации:

PdfImportedPage page = copy.getImportedPage(reader, 1);
PdfCopy.PageStamp ps = copy.createPageStamp(page);
ps.addAnnotation(PdfAnnotation.createText(copy, new Rectangle(50, 180, 70, 200), "Hello", "No Thanks", true, "Comment"));
PdfContentByte under = ps.getUnderContent();
under.addImage(img);
PdfContentByte over = ps.getOverContent();
over.beginText();
over.setFontAndSize(bf, 18);
over.setTextMatrix(30, 30);
over.showText("total page " + totalPage);
over.endText();
ps.alterContents();
copy.addPage(page);

Осторожно, однако применение PageStamp, подобного этому, фактически манипулирует исходным PdfReader. Поэтому после этого не продолжайте использовать экземпляр PdfReader, предполагая, что его содержимое является исходным содержимым, в частности скопированные страницы с метками страниц загрязнены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...