Java 将pdf文件复制到另一个pdf文件时添加批注

Java 将pdf文件复制到另一个pdf文件时添加批注,java,itext,Java,Itext,我正在尝试添加注释到每一个被复制到我的新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 m

我正在尝试添加注释到每一个被复制到我的新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();
        }
    }
}

导入com.lowagie.text.Document;
导入com.lowagie.text.Rectangle;
导入com.lowagie.text.pdf.*;
导入java.awt.*;
导入java.io.FileOutputStream;
公共类注释{
公共静态void main(字符串[]args){
试一试{
PdfReader reader=新的PdfReader(“字符串到pdf.pdf”);
Document Document=新文档(reader.getPageSizeWithRotation(1));
PdfCopy副本=新的PdfCopy(文档、,
新的FileOutputStream(“temp.pdf”);
复制.setPdfVersion(PdfWriter.VERSION_1_5);
document.open();

for(int i=1;i
PdfCopy
用于忠实的页面复制,而不是创建;因此,从
PdfWriter
继承的修改例程被禁用,例如

@Override
public void addAnnotation(PdfAnnotation annot) {  }
但是,可以通过页面标记进行专门的操作,参见
createPageStamp
。该方法的Javadoc包含一些示例使用代码,包括添加注释:

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
实例,假设其内容是原始内容,尤其是pagestamped复制的页面是脏的。

不不不不不,您已经回答了问题really非常错误…我想在一个页面上添加这么多注释“不,不,你的问题真的非常错误”-然后解释。代码示例清楚地显示了如何(除其他外)向页面添加注释以进行复制,而这正是你想要做的,不是吗?