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
, предполагая, что его содержимое является исходным содержимым, в частности скопированные страницы с метками страниц загрязнены.