如何在 iText 中修改 PdfAnnotations 的大小并禁用某些选项
How to modify size for PdfAnnotations in iText and disable some options
我有一个要求使注释的内容不可编辑并禁用选项。所以,
1. 是否可以禁用 PdfAnnotation 对象(文本、图章等)的选项下拉列表 iText.If 是的,那么如何??
2. 注释框(用于弹出窗口、文本等)的大小也可以更改吗?
使用此 PdfAnnotation.FLAGS_READONLY
使注释中的文本不可编辑
如何在此处禁用下拉选项 http://imgur.com/lA5k1hk
您无法阻止人们使用下拉列表,但您可以确保 "Reply" 和 "Delete" 等功能不会显示在该列表中 加密 使用所有者密码的文档,确保您没有设置允许人们添加注释的选项。 PDF 加密后,您会注意到下拉列表中的条目是有限的。 (请参阅 How to protect an already existing PDF with a password? 了解如何加密文档。)
更改注释的大小就是替换为该注释定义的 PDF 矩形。请查看 MovePopup 示例。
我们有以下注释和弹出窗口:
顺便说一句,我知道文本注释是 /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();
}
我通过从此处注释的 /Rect
值中的 x
和 y
值中减去 120、70、250... 用户单位,使两个矩形都变大了还有。
结果如下所示:
文本注释图标和带有文本的实际弹出窗口现在都变大了。
由您调整代码,以便:
- 您找到要放大的实际弹出式注释,
- 您可以使用您选择的用户单位数量更改该注释的矩形。
我有一个要求使注释的内容不可编辑并禁用选项。所以,
1. 是否可以禁用 PdfAnnotation 对象(文本、图章等)的选项下拉列表 iText.If 是的,那么如何??
2. 注释框(用于弹出窗口、文本等)的大小也可以更改吗?
使用此 PdfAnnotation.FLAGS_READONLY
如何在此处禁用下拉选项 http://imgur.com/lA5k1hk
您无法阻止人们使用下拉列表,但您可以确保 "Reply" 和 "Delete" 等功能不会显示在该列表中 加密 使用所有者密码的文档,确保您没有设置允许人们添加注释的选项。 PDF 加密后,您会注意到下拉列表中的条目是有限的。 (请参阅 How to protect an already existing PDF with a password? 了解如何加密文档。)
更改注释的大小就是替换为该注释定义的 PDF 矩形。请查看 MovePopup 示例。
我们有以下注释和弹出窗口:
顺便说一句,我知道文本注释是 /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();
}
我通过从此处注释的 /Rect
值中的 x
和 y
值中减去 120、70、250... 用户单位,使两个矩形都变大了还有。
结果如下所示:
文本注释图标和带有文本的实际弹出窗口现在都变大了。
由您调整代码,以便:
- 您找到要放大的实际弹出式注释,
- 您可以使用您选择的用户单位数量更改该注释的矩形。