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