使用iText更改PDF注释的颜色

时间:2016-01-18 22:25:06

标签: java pdf itext

我想更改PDF的所有突出显示注释的颜色。有函数com.itextpdf.text.pdf.PdfAnnotation.setColor(BaseColor color),我该如何调用这个函数?下面是迭代所有高亮注释的代码。

public static void main(String[] args) {

    try {

        // Reads and parses a PDF document
        PdfReader reader = new PdfReader("Test.pdf");

        // For each PDF page
        for (int i = 1; i <= reader.getNumberOfPages(); i++) {

            // Get a page a PDF page
            PdfDictionary page = reader.getPageN(i);
            // Get all the annotations of page i
            PdfArray annotsArray = page.getAsArray(PdfName.ANNOTS);

            // If page does not have annotations
            if (page.getAsArray(PdfName.ANNOTS) == null) {
                continue;
            }

            // For each annotation
            for (int j = 0; j < annotsArray.size(); ++j) {

                // For current annotation
                PdfDictionary curAnnot = annotsArray.getAsDict(j);

                if (PdfName.HIGHLIGHT.equals(curAnnot.get(PdfName.SUBTYPE))) {

                    //how to access com.itextpdf.text.pdf.PdfAnnotation.setColor(BaseColor color)

                }
            }
        }

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

}

2 个答案:

答案 0 :(得分:1)

不幸的是,iText PdfAnnotation类仅用于从头创建新注释不是预先存在的的包装器。

因此,您必须使用低级方法(如

)操纵PdfDictionary curAnnot
curAnnot.put(PdfName.C, new PdfArray(new float[]{1, 0, 0}));

名称 C 的此条目指定为

  

C 数组(可选; PDF 1.1)数字数组,范围为0.0到1.0,   表示用于以下目的的颜色:

     

关闭时注释图标的背景

     

注释弹出窗口的标题栏

     

链接注释的边框

     

数组元素的数量决定了其中的颜色空间   颜色应定义:

     

0没有颜色;透明

     

1 DeviceGray

     

3 DeviceRGB

     

4 DeviceCMYK

     

(表164 - 所有注释词典共有的条目 - ISO 32000-1

PS:不要忘记最终使用类似

的内容存储更改
new PdfStamper(reader, new FileOutputStream("changed.pdf")).close();

答案 1 :(得分:0)

PdfAnnotation annotation = new PdfAnnotation(your_pdf_writer, new Rectangle(your_rectangle_information_here));
annotation.setColor(your_color_here);

您还需要一个PdfWriter来写入您的PDF格式以及您在PDF上绘制的矩形的信息。

希望这有帮助!

参考:creating anootations itext