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();
(iText的5 MarkAnnotationReadOnly.java)
在iText的的7.0.x它可以像進行這
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);
}
}
}
(iText 7 MarkAnnotationReadOnly.java)
只需要內核iText 7工件。
來源
2016-05-20 12:28:34
mkl
你的用戶用戶使用哪些程序?我問,因爲給定適當的程序,只讀標註可以編輯。 – mkl
我正在使用JSP(Java服務器頁面),用戶將用他的評論上傳PDF,系統會將該文件轉發給被騙人(比如說B人)。人B不能編輯以前用戶的所有預先評論。他只能將他的評論添加到文件並再次將其上傳到系統。我想知道如何讓其他人打開PDF文件時才能閱讀評論。他們可以閱讀內容並只添加註釋。 –
* B人不能編輯以前用戶的所有prevoius評論。他只能將他的評論添加到文件中並重新上傳到系統中。* - 使用哪個程序,人員B不能編輯以前的評論,但能夠添加新的評論? – mkl