2015-12-16 2 views
3

У меня есть дата для добавления аннотации, чтобы заголовок & содержание & pageNo & Значение координаты. Я хочу добавить аннотацию к существующему PDF, используя эти данные. Я попытался добавить аннотацию к существующему PDF, используя pdfbox (Java). Я мог бы добавить новую страницу аннотации, которая была вставлена ​​в последнюю часть существующей страницы, но я не могу добавить аннотацию к существующим страницам из-за того, что не могу понять, как получить доступ к существующим страницам и как добавить аннотацию к странице.Как добавить аннотацию к существующему PDF

Ниже приведен мой код. Pls разрешает его.

import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.List; 

import org.apache.pdfbox.exceptions.COSVisitorException; 
import org.apache.pdfbox.pdfparser.PDFParser; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage; 
import org.apache.pdfbox.pdmodel.common.PDRectangle; 
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationTextMarkup; 

public class Sample{ 
    private String forannot[][]; 
    Sample(String[][] forannot){ 
    this.forannot = forannot; 
    } 
    public void tryaddannot() throws FileNotFoundException, IOException{ 
    PDFParser pps = new PDFParser(new FileInputStream(Filepath); 
    pps.parse(); 
    PDDocument docs = pps.getPDDocument(); 

    try{ 
     //insert new page 
     PDPage pages = new PDPage(); 
     docs.addPage(pages); 
     List<PDAnnotationTextMarkup> annotations = pages.getAnnotations(); 

     //generate instanse for annotation 
     PDAnnotationTextMarkup txtMark = new PDAnnotationTextMarkup(PDAnnotationTextMarkup.SUB_TYPE_HIGHLIGHT); 

     //set the rectangle 
     PDRectangle position = new PDRectangle(); 
     position.setLowerLeftX(170); 
     position.setLowerLeftY(125); 
     position.setUpperRightX(195); 
     position.setUpperRightY(140); 
     txtMark.setRectangle(position); 

     //set the quadpoint 
     float[] quads = new float[8]; 
     //x1,y1 
     quads[0] = position.getLowerLeftX(); 
     quads[1] = position.getUpperRightY()-2; 
     //x2,y2 
     quads[2] = position.getUpperRightX(); 
     quads[3] = quads[1]; 
     //x3,y3 
     quads[4] = quads[0]; 
     quads[5] = position.getLowerLeftY()-2; 
     //x4,y4 
     quads[6] = quads[2]; 
     quads[7] = quads[5]; 
     txtMark.setQuadPoints(quads); 
     txtMark.setContents("Highlighted since it's important"); 
     annotations.add(txtMark); 
     docs.save(Filepath); 
    } catch (COSVisitorException e) { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     docs.close(); 
    } 
    } 
} 

ответ

2

Чтобы добавить аннотацию к существующим странице, сделайте следующее:

PDPage page = (PDPage) doc.getDocumentCatalog().getAllPages().get(0); 
    try 
    { 
     List<PDAnnotation> annotations = page.getAnnotations(); 

Вашего код в основном работает в версии 1.8, это аннотация, что трудно увидеть. Некоторые ошибки кода:

изменение

PDFParser pps = new PDFParser(new FileInputStream(Filepath); 

в

PDFParser pps = new PDFParser(new FileInputStream(Filepath)); 

и изменение

List<PDAnnotationTextMarkup> annotations = pages.getAnnotations(); 

в

List<PDAnnotation> annotations = pages.getAnnotations(); 

Кроме того, это лучше, чтобы получить документ, как это:

PDDocument doc = PDDocument.loadNonSeq(new File(...), null); 

Чтобы увидеть, где аннотации, либо щелкните в Adobe Reader на последней странице на «Комментарии», «список комментариев». Чтобы сделать аннотацию более заметной, добавьте это:

 PDGamma colourBlue = new PDGamma(); 
     colourBlue.setB(1); 
     txtMark.setColour(colourBlue); 
+0

спасибо !! Я мог прорваться таким путем! – Mycee

+0

Это не работа в PDFBox 2 :(-> setColor (PDColor c) и т. Д. – MGM

+1

@MGM. Пожалуйста, смотрите здесь для версии 2.0: https://svn.apache.org/viewvc/pdfbox/branches/ 2.0/examples/src/main/java/org/apache/pdfbox/examples/pdmodel/AddAnnotations.java? View = markup В этом примере показано, как добавлять аннотации и устанавливать цвет и т. Д. Если у вас есть дополнительные проблемы, создайте новый вопрос –

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