Я искал пример того, как редактировать и удалять одну аннотацию формы PDF-файла с помощью iText; но я нашел кого-нибудь.Java iText Удалить и обновить
это можно сделать? если да, то могли бы вы объяснить мне, как?
Заранее спасибо.
Я искал пример того, как редактировать и удалять одну аннотацию формы PDF-файла с помощью iText; но я нашел кого-нибудь.Java iText Удалить и обновить
это можно сделать? если да, то могли бы вы объяснить мне, как?
Заранее спасибо.
Использование PdfStamper (ниже приведен пример заводной код)
PdfReader reader = new PdfReader(baos.toByteArray())
PdfStamper stamp = new PdfStamper(reader, out, reader.pdfVersion)
stamp.setEncryption null, null, PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_SCREENREADERS, PdfWriter.STANDARD_ENCRYPTION_40
stamp.acroFields.removeField('field to remove')
try{
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED)
(1..reader.numberOfPages).each{
PdfContentByte over = stamp.getOverContent(it)
over.beginText()
over.setFontAndSize bf, 5
over.showTextAligned PdfContentByte.ALIGN_RIGHT, "your annotation", 0, 0, 0f
over.endText()
}
}finally{
stamp.close()
baos.close()
}
Согласно комментарию, ОП заинтересован в
Общие аннотации, и я хочу изменить в основном их содержание и должность.
Вы можете перемещать аннотации, как это:
PdfReader reader = new PdfReader(resourceStream);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("target/test-outputs/test-annotated-moved.pdf"));
PdfDictionary page1 = reader.getPageNRelease(1);
PdfArray annots = page1.getAsArray(PdfName.ANNOTS);
for (int i = 0; i < annots.size(); i++)
{
PdfDictionary annot = annots.getAsDict(i);
PdfArray rect = annot.getAsArray(PdfName.RECT);
PdfArray movedRect = new PdfArray(new float[] {
rect.getAsNumber(0).floatValue() + 100f,
rect.getAsNumber(1).floatValue() + 100f,
rect.getAsNumber(2).floatValue() + 100f,
rect.getAsNumber(3).floatValue() + 100f
}
);
annot.put(PdfName.RECT, movedRect);
stamper.markUsed(annot);
}
stamper.close();
(Этот пример перемещает все аннотации на первой странице справа и вверх по 100 умолчанию пространства пользовательских единицам.)
Вы можете редактировать аннотации на основе на Содержание значение, как это:
PdfReader reader = new PdfReader(resourceStream);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("target/test-outputs/test-annotated-edited.pdf"));
PdfDictionary page1 = reader.getPageNRelease(1);
PdfArray annots = page1.getAsArray(PdfName.ANNOTS);
for (int i = 0; i < annots.size(); i++)
{
PdfDictionary annot = annots.getAsDict(i);
PdfString contents = annot.getAsString(PdfName.CONTENTS);
if (contents != null)
{
String value = contents.toString();
StringBuilder builder = new StringBuilder(value);
value = builder.reverse().toString();
annot.put(PdfName.CONTENTS, new PdfString(value));
annot.remove(PdfName.AP);
}
stamper.markUsed(annot);
}
stamper.close();
(Это пример инвертирует последовательность символов всех аннотаций с Содержание; чтобы убедиться, что использовано Содержание, существующие изображения AP удалены. Любое серьезное приложение, конечно, будет более конкретным здесь ...)
Удаление довольно просто, но не могли бы вы объяснить, какие аспекты аннотации вы хотите отредактировать? Вы хотите изменить свою позицию? Его внешний вид? Его содержание? Какие виды аннотаций у вас на уме? – mkl
Общая аннотация, и я хочу изменить в основном их содержание и их положение – rjnaixz