Java 如何在iText中修改PdfAnnotations的大小并禁用某些选项

Java 如何在iText中修改PdfAnnotations的大小并禁用某些选项,java,itext,Java,Itext,我需要使注释的内容不可编辑并禁用选项。所以 1.是否可以在iText中禁用PDFanRotation对象(文本、戳记等)的选项下拉列表。如果可以,如何禁用?? 2.还可以更改批注框(用于弹出窗口、文本等)的大小吗? 注释中的文本已通过使用此PdFanRotation.FLAGS\u READONLY变得不可编辑 如何禁用此处的下拉选项您不能阻止人们使用下拉列表,但您可以通过使用所有者密码加密文档,确保列表中不会显示“回复”和“删除”等功能,确保您没有设置允许用户添加批注的选项。加密PDF后,您会

我需要使注释的内容不可编辑并禁用选项。所以

1.是否可以在iText中禁用PDFanRotation对象(文本、戳记等)的选项下拉列表。如果可以,如何禁用??
2.还可以更改批注框(用于弹出窗口、文本等)的大小吗? 注释中的文本已通过使用此PdFanRotation.FLAGS\u READONLY变得不可编辑


如何禁用此处的下拉选项

您不能阻止人们使用下拉列表,但您可以通过使用所有者密码加密文档,确保列表中不会显示“回复”和“删除”等功能,确保您没有设置允许用户添加批注的选项。加密PDF后,您会注意到下拉列表中的条目是有限的。(请参阅以了解如何加密文档。)

更改批注的大小就是替换为该批注定义的PDF矩形。请看一看这个例子

我们有以下注释和弹出窗口:

顺便说一句,我知道文本注释是
/Annots
数组中的第一个注释,而弹出窗口是第二个注释。这意味着我可以在我的代码中节省一些时间:

public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
    PdfReader reader = new PdfReader(src);
    PdfDictionary page = reader.getPageN(1);
    PdfArray annots = page.getAsArray(PdfName.ANNOTS);
    PdfDictionary sticky = annots.getAsDict(0);
    PdfArray stickyRect = sticky.getAsArray(PdfName.RECT);
    PdfRectangle stickyRectangle = new PdfRectangle(
        stickyRect.getAsNumber(0).floatValue() - 120, stickyRect.getAsNumber(1).floatValue() -70,
        stickyRect.getAsNumber(2).floatValue(), stickyRect.getAsNumber(3).floatValue() - 30
    );
    sticky.put(PdfName.RECT, stickyRectangle);
    PdfDictionary popup = annots.getAsDict(1);
    PdfArray popupRect = popup.getAsArray(PdfName.RECT);
    PdfRectangle popupRectangle = new PdfRectangle(
        popupRect.getAsNumber(0).floatValue() - 250, popupRect.getAsNumber(1).floatValue(),
        popupRect.getAsNumber(2).floatValue(), popupRect.getAsNumber(3).floatValue() - 250
    );
    popup.put(PdfName.RECT, popupRectangle);
    PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
    stamper.close();
}
通过减去120,70,250,…,我把两个矩形都变大了,。。。注释的
/Rect
值中的
x
y
值中的用户单位

结果如下所示:

文本注释图标和带有文本的实际弹出窗口现在都变大了

由您自行调整代码,以便:

  • 找到要放大的实际弹出注释
  • 可以使用所选的用户单位数量更改该注释的矩形

  • 您不能阻止人们使用下拉列表,但您可以通过使用所有者密码加密文档,确保“回复”和“删除”等功能不会显示在该列表中,确保您没有设置允许人们添加批注的选项。加密PDF后,您会注意到下拉列表中的条目是有限的。(请参阅以了解如何加密文档。)

    更改批注的大小就是替换为该批注定义的PDF矩形。请看一看这个例子

    我们有以下注释和弹出窗口:

    顺便说一句,我知道文本注释是
    /Annots
    数组中的第一个注释,而弹出窗口是第二个注释。这意味着我可以在我的代码中节省一些时间:

    public void manipulatePdf(String src, String dest) throws IOException, DocumentException {
        PdfReader reader = new PdfReader(src);
        PdfDictionary page = reader.getPageN(1);
        PdfArray annots = page.getAsArray(PdfName.ANNOTS);
        PdfDictionary sticky = annots.getAsDict(0);
        PdfArray stickyRect = sticky.getAsArray(PdfName.RECT);
        PdfRectangle stickyRectangle = new PdfRectangle(
            stickyRect.getAsNumber(0).floatValue() - 120, stickyRect.getAsNumber(1).floatValue() -70,
            stickyRect.getAsNumber(2).floatValue(), stickyRect.getAsNumber(3).floatValue() - 30
        );
        sticky.put(PdfName.RECT, stickyRectangle);
        PdfDictionary popup = annots.getAsDict(1);
        PdfArray popupRect = popup.getAsArray(PdfName.RECT);
        PdfRectangle popupRectangle = new PdfRectangle(
            popupRect.getAsNumber(0).floatValue() - 250, popupRect.getAsNumber(1).floatValue(),
            popupRect.getAsNumber(2).floatValue(), popupRect.getAsNumber(3).floatValue() - 250
        );
        popup.put(PdfName.RECT, popupRectangle);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest));
        stamper.close();
    }
    
    通过减去120,70,250,…,我把两个矩形都变大了,。。。注释的
    /Rect
    值中的
    x
    y
    值中的用户单位

    结果如下所示:

    文本注释图标和带有文本的实际弹出窗口现在都变大了

    由您自行调整代码,以便:

  • 找到要放大的实际弹出注释
  • 可以使用所选的用户单位数量更改该注释的矩形

  • 我的回答解决了问题吗?我没有看到任何活动:没有评论,没有赞成票,没有反对票,还没有被接受……我的回答解决了问题吗?我没有在上面看到任何活动:没有评论,没有赞成票,没有反对票,还没有被接受……使用manufactePDF()抛出空指针异常。annots被初始化为null,page.getAsArray(PdfName.annots);抛出异常。这是为什么?如果
    getAsArray(PdfName.ANNOTS)
    返回'null',则页面上没有批注。就这么简单。使用manufactePDF()抛出空指针异常。annots被初始化为null,page.getAsArray(PdfName.annots);抛出异常。这是为什么?如果
    getAsArray(PdfName.ANNOTS)
    返回'null',则页面上没有批注。就这么简单。