有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在iText元素上添加阴影效果

我对Java中的iText有一些问题。我需要生成一个带有阴影的单元格或矩形,如本例所示:

enter image description here

460位于某种带阴影的单元格或矩形中。我不知道怎么做。有什么帮助吗


共 (1) 个答案

  1. # 1 楼答案

    最简单的方法可能是使用带有泛型标记的ChunkPdfPageEvent。这样,当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参数将包含设置为ChunkStringsetGenericTag。这是上面示例中的"shadow"。它允许区分不同的标记。因为我们在这里只使用了1个标记,所以我没有使用text参数。)

    该示例的结果如下所示:

    Border with shadow