2014-10-29 3 views
0

Я использую PDFBox для создания PDF-файлов и задавался вопросом, можно ли добавить границу вокруг изображений. Если нет, существует ли какой-то алгоритм, позволяющий эффективно рисовать линии точно вокруг изображения? У меня есть следующий код, который позволяет себе добавить изображение в PDF-страницы:Граница вокруг изображений при создании PDF в PDFBox

//image for page 2 
public File processPDF() 
{ 
    //creating pdf 
    PDDocument document = new PDDocument(); 
    File file = new File("NWProofReference.pdf"); 

    //adding first page to pdf, blank 
    PDPage page = new PDPage(); 
    PDPageContentStream contentStream; 

    try { 
      BufferedImage awtImage = ImageIO.read(new File(PDFProcessing.image)); 
      PDXObjectImage ximage = new PDPixelMap(document, awtImage); 
      float scale = 1.0f; // alter this value to set the image size 
      contentStream.drawXObject(ximage,100,400, 
      (ximage.getWidth()*scale,ximage.getHeight()*scale); 
      contentStream.close(); 

      document.save(file); 
      document.close(); 
     } catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    return file; 
} 

Использование этого или любого кода, есть ли способ действительно добавить рамку вокруг самого изображения, которая доступна через PDFBox API?

ответ

1

Вот код, который добавляет красную рамку:

 BufferedImage awtImage = ImageIO.read(new File(PDFProcessing.image)); 
     PDXObjectImage ximage = new PDPixelMap(document, awtImage); 
     float scale = 1.0f; // alter this value to set the image size 
     contentStream.drawXObject(ximage,100,400,(ximage.getWidth()*scale,ximage.getHeight()*scale); 
     // these three lines are new 
     contentStream.setStrokingColor(Color.red); 
     contentStream.addRect(100-3, 400-3, ximage.getWidth()*scale+6, ximage.getHeight()*scale+6); 
     contentStream.closeAndStroke(); 

     contentStream.close(); 

удачи! Вы можете, конечно, изменить «3» на меньшее число.

+0

Ничего себе, меньше кода и даже имеет более острые углы, чем у меня. Удивительный ответ. Спасибо. – antihero989

+0

Спасибо ... в качестве бонуса вы также можете взглянуть на setLineCapStyle и setLineJoinStyle, чтобы увидеть разные стили в контурах/концах. –

+0

Я обязательно посмотрю. – antihero989

0

Я не мог найти ничего Parto е в API, который позволяет создавать границы, но я придумал какой-то код, который позволил бы нам создать тонкую и чистую рамку вокруг изображений с помощью:

PDPageContentStream.drawLine(xStart, yStart, xEnd, yEnd) 

Добавление на код, который я отвечал в мой вопрос, вот мой ответ:

public File processPDF() 
{ 
    //creating pdf 
    PDDocument document = new PDDocument(); 
    File file = new File("NWProofReference.pdf"); 

    //adding first page to pdf, blank 
    PDPage page = new PDPage(); 
    PDPageContentStream contentStream; 
    float titleWidth, titleHeight, width, height; 

    try { 
     BufferedImage awtImage = ImageIO.read(new File(PDFProcessing.image)); 
     PDXObjectImage ximage = new PDPixelMap(document, awtImage); 
     float scale = 1.0f; // alter this value to set the image size 
     xStart = 100; //left most x position of image 
     yStart = 400; //bottom most y position of image 
     width = ximage.getWidth()*scale; //width of image 
     height = ximage.getHeight()*scale; //height of image 
     contentStream.drawXObject(ximage,xStart,yStart,width, height); //draw image 

     //start to draw border 
     contentStream.drawLine(xStart, yStart, xStart + width, yStart); //bottom 
     contentStream.drawLine(xStart, yStart + height , xStart + width, yStart + height); //top 
     contentStream.drawLine(xStart, yStart, xStart, yStart + height); //left 
     contentStream.drawLine(xStart + width, yStart, xStart + width, yStart + height); //right 

     document.save(file); 
     document.close(); 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    contentStream.close(); 
    return file; 
} 

Надежда это помогает и будущим пользователям PDFBox для Java!

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