2015-10-22 4 views

ответ

2

Простейшим способом, вероятно, является использование Chunk с общим тегом и PdfPageEvent. Таким образом, вы получите обратный вызов события, когда Chunk будет размещен на странице. Обратный вызов даст вам координаты (прямоугольник) Chunk, что позволит вам нарисовать границу и тень в правильном месте.

Пример такого обработчика событий, чтобы нарисовать черную рамку и серая тень:

class ShadowEvent extends PdfPageEventHelper { 
    @Override 
    public void onGenericTag(PdfWriter writer, Document document, 
     Rectangle rect, String text) { 
     PdfContentByte canvas = writer.getDirectContent(); 
     // Paddings for the border 
     int paddingHorizontal = 20; 
     int paddingVertical = 5; 
     // Width of the shadow 
     int shadowwidth = 5; 
     // Calculate border location and size 
     float left = rect.getLeft() - paddingHorizontal; 
     float bottom = rect.getBottom() - paddingVertical; 
     float width = rect.getWidth() + 2*paddingHorizontal; 
     float height = rect.getHeight() + 2*paddingVertical; 
     canvas.saveState(); 
     canvas.setColorFill(BaseColor.GRAY); 
     // Draw the shadow at the bottom 
     canvas.rectangle(left + shadowwidth, bottom - shadowwidth, width, shadowwidth); 
     canvas.fill(); 
     // Draw the shadow at the right 
     canvas.rectangle(left + width, bottom - shadowwidth, shadowwidth, height); 
     canvas.fill(); 
     canvas.setColorStroke(BaseColor.BLACK); 
     // Draw the border 
     canvas.rectangle(left, bottom, width, height); 
     canvas.stroke(); 
     canvas.restoreState(); 
    } 
} 

Это показывает, как использовать общий тег:

Document doc = new Document(); 
PdfWriter pdfWriter = PdfWriter.getInstance(doc, outfile); 
pdfWriter.setPageEvent(new ShadowEvent()); 
doc.open(); 
Chunk c = new Chunk("60"); 
c.setGenericTag("shadow"); 
doc.add(c); 
doc.close(); 

(Обратите внимание, что параметр text метода onGenericTag будет содержать String, который был установлен на Chunk с setGenericTag. Это пример "shadow" в приведенном выше примере. Он позволяет различать различные теги. . Так как мы просто используем 1 тег здесь, я не использую параметр text)

Результат примера выглядит следующим образом:

Border with shadow

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

  • Нет связанных вопросов^_^