java在iText元素上添加阴影效果 2 年,1 月 Questions & Answers 1593 我对Java中的iText有一些问题。我需要生成一个带有阴影的单元格或矩形,如本例所示: 4和60位于某种带阴影的单元格或矩形中。我不知道怎么做。有什么帮助吗
# 1 楼答案 最简单的方法可能是使用带有泛型标记的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(); (请注意,onGenericTag方法的text参数将包含设置为Chunk的String和setGenericTag。这是上面示例中的"shadow"。它允许区分不同的标记。因为我们在这里只使用了1个标记,所以我没有使用text参数。) 该示例的结果如下所示:
# 1 楼答案
最简单的方法可能是使用带有泛型标记的
Chunk
和PdfPageEvent
。这样,当Chunk
位于页面上时,您将得到一个事件回调。回调将为您提供Chunk
的坐标(矩形),允许您在正确的位置绘制边框和阴影绘制黑色边框和灰色阴影的事件处理程序示例:
这显示了如何使用通用标记:
(请注意,
onGenericTag
方法的text
参数将包含设置为Chunk
的String
和setGenericTag
。这是上面示例中的"shadow"
。它允许区分不同的标记。因为我们在这里只使用了1个标记,所以我没有使用text
参数。)该示例的结果如下所示: