Java 如何使用itext将pdf批注设置为只读?

Java 如何使用itext将pdf批注设置为只读?,java,pdf,pdf-generation,itext,itextpdf,Java,Pdf,Pdf Generation,Itext,Itextpdf,我正在尝试制作一个程序,让多个用户可以共享一个PDF文档,每个人都可以使用“添加便笺”将自己的评论放在PDF上,而无需更改/修改其他注释。 例如 该程序将该PDF文件传输给另一个人进行审查和检查,审查者将在PDF上发表评论并将其发送给批准者。审批人根本无法编辑和更改审阅者的评论,他可以为其评论添加新的便笺 如果我在PDF(~PdfWriter.AllowModifyAnnotations)上使用安全性,我将禁用输入新便笺 有什么解决办法吗 请帮助我并提前感谢PDF注释对象可以有标志;这些标志之一

我正在尝试制作一个程序,让多个用户可以共享一个PDF文档,每个人都可以使用“添加便笺”将自己的评论放在PDF上,而无需更改/修改其他注释。 例如 该程序将该PDF文件传输给另一个人进行审查和检查,审查者将在PDF上发表评论并将其发送给批准者。审批人根本无法编辑和更改审阅者的评论,他可以为其评论添加新的便笺

如果我在PDF(~PdfWriter.AllowModifyAnnotations)上使用安全性,我将禁用输入新便笺

有什么解决办法吗


请帮助我并提前感谢

PDF注释对象可以有标志;这些标志之一是只读标志。因此,您只需迭代所有页面上的所有注释并设置它们各自的只读标志


在iText 5.5.x中,可以这样做:

PdfReader reader = new PdfReader(resourceStream);
PdfStamper stamper = new PdfStamper(reader, outputStream);

for (int page = 1; page <= reader.getNumberOfPages(); page++)
{
    PdfDictionary pageDictionary = reader.getPageN(page);
    PdfArray annotationArray = pageDictionary.getAsArray(PdfName.ANNOTS);
    if (annotationArray == null)
        continue;
    for (PdfObject object : annotationArray)
    {
        PdfObject directObject = PdfReader.getPdfObject(object);
        if (directObject instanceof PdfDictionary)
        {
            PdfDictionary annotationDictionary = (PdfDictionary) directObject;
            PdfNumber flagsNumber = annotationDictionary.getAsNumber(PdfName.F);
            int flags = flagsNumber != null ? flagsNumber.intValue() : 0;
            flags |= PdfAnnotation.FLAGS_READONLY;
            annotationDictionary.put(PdfName.F, new PdfNumber(flags));
        }
    }
}

stamper.close();
PdfReader reader=新的PdfReader(resourceStream);
PdfStamper压模=新的PdfStamper(读卡器,输出流);

对于(int page=1;page您的用户使用哪些程序?我会问,因为给定适当的程序,只读注释仍然可以编辑。我使用的是JSP(java服务器页面),用户将上传带有注释的PDF,系统将把文件转发给相关人员(比如人员B).person B无法编辑以前用户的所有prevoius评论。他只能将自己的评论添加到文件中,然后再次上载到系统。我想知道,如果其他人打开PDF文件,如何使评论仅为只读。他们只能阅读内容和添加注释。person B无法编辑以前用户的所有prevoius评论。他只能添加h是对文件的评论,并再次上传到系统。-使用哪个程序,人员B不能编辑以前的评论,但可以添加新评论?“使用哪个程序,人员B不能编辑以前的评论,但可以添加新评论?”,这是正常的PDF程序。人员B将收到电子邮件中的PDF,他将阅读、检查并在收到的PDF上发表评论。他将使用acrobat reader或PDF professional或任何打开PDF文件的工具正常打开PDF文件。当他使用acrobat reader打开PDF时,他将无法调整其他人otes。使用acrobat reader或PDF professional或任何打开PDF文件的工具-一些这样的程序允许忽略注释的只读/只读属性。这就是我问的原因。当他使用acrobat reader打开PDF时,他将无法调整其他人的注释-啊,好的,如果这些注释不能在Adobe A中更改就足够了crobat阅读器(非专业版)。如果这对您有效,您可能希望接受答案(单击左上角的勾号)。
try (   PdfReader pdfReader = new PdfReader(resourceStream);
        PdfWriter pdfWriter = new PdfWriter(outputStream);
        PdfDocument pdfDocument = new PdfDocument(pdfReader, pdfWriter) )
{
    for (int page = 1; page <= pdfDocument.getNumberOfPages(); page++)
    {
        PdfPage pdfPage = pdfDocument.getPage(page);
        for (PdfAnnotation pdfAnnotation : pdfPage.getAnnotations())
        {
            pdfAnnotation.setFlag(PdfAnnotation.READ_ONLY);
        }
    }
}