2014-01-11 6 views
0

Я искал пример того, как редактировать и удалять одну аннотацию формы PDF-файла с помощью iText; но я нашел кого-нибудь.Java iText Удалить и обновить

это можно сделать? если да, то могли бы вы объяснить мне, как?

Заранее спасибо.

+0

Удаление довольно просто, но не могли бы вы объяснить, какие аспекты аннотации вы хотите отредактировать? Вы хотите изменить свою позицию? Его внешний вид? Его содержание? Какие виды аннотаций у вас на уме? – mkl

+0

Общая аннотация, и я хочу изменить в основном их содержание и их положение – rjnaixz

ответ

1

Использование 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() 
} 
1

Согласно комментарию, ОП заинтересован в

Общие аннотации, и я хочу изменить в основном их содержание и должность.

Вы можете перемещать аннотации, как это:

 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 удалены. Любое серьезное приложение, конечно, будет более конкретным здесь ...)

Смежные вопросы