有一个笔画参数可以定义在PDFBOX上绘制笔画的位置吗?

问题描述 投票:0回答:1

我现在使用 PDFBox,我尝试使用 PDPageContentStream 中的 fillAndStroke() 方法绘制一个具有大边框描边的多边形。 实际上,它适用于中心模式下的笔划(一半在多边形内部,一半在多边形外部)。

如何指定多边形的笔画类型insideoutside,就像我在JavaFX中使用此类代码所做的那样。

谢谢您的帮助。

// Create a polygon
Polygon polygon = new Polygon();
polygon.getPoints().addAll(
       50.0, 150.0,  // Point 1 (x, y)
       150.0, 50.0,  // Point 2 (x, y)
       250.0, 150.0, // Point 3 (x, y)
       150.0, 250.0  // Point 4 (x, y)
);
polygon.setFill(Color.LIGHTBLUE);
polygon.setStroke(Color.BLACK);
polygon.setStrokeWidth(3);
// Here we specify the stroke type to inside
polygon.setStrokeType(StrokeType.INSIDE);

我在文档中搜索帮助没有成功,目前我使用的PDFBox版本:2.0.25。

java pdfbox
1个回答
0
投票

PDFBox 类

PDPageContentStream
提供的方法对应于 PDF 标准为内容流定义的操作。因此,您正在寻找的文档是 ISO 32000 零件。

不幸的是,您会发现 PDF 没有类似 JavaFX 的

StrokeType
选项。尽管如此,您可以使用剪辑路径来模拟效果,例如如下:

笔划类型“中心”

这是 PDF 始终使用的模式。因此,不需要剪辑路径:

canvas.moveTo(50, 150);
canvas.lineTo(150, 50);
canvas.lineTo(250, 150);
canvas.lineTo(150, 250);
canvas.closeAndFillAndStroke();

DrawPolygons方法

drawPolygonCenterStroke

笔画类型“内部”

为了模拟这一点,我们沿着多边形边界设置一个剪辑路径。

canvas.saveGraphicsState();

canvas.moveTo(50, 150);
canvas.lineTo(150, 50);
canvas.lineTo(250, 150);
canvas.lineTo(150, 250);
canvas.closePath();
canvas.clip();

canvas.moveTo(50, 150);
canvas.lineTo(150, 50);
canvas.lineTo(250, 150);
canvas.lineTo(150, 250);
canvas.closeAndFillAndStroke();

canvas.restoreGraphicsState();

DrawPolygons方法

drawPolygonInsideStroke

行程类型“外侧”

为了模拟这一点,我们首先填充整个多边形的内部,然后设置剪辑路径以包括除多边形之外的页面其余部分,最后描边多边形边框。

canvas.moveTo(50, 150);
canvas.lineTo(150, 50);
canvas.lineTo(250, 150);
canvas.lineTo(150, 250);
canvas.fill();

canvas.saveGraphicsState();

canvas.addRect(0, 0, 300, 300);
canvas.moveTo(50, 150);
canvas.lineTo(150, 50);
canvas.lineTo(250, 150);
canvas.lineTo(150, 250);
canvas.closePath();
canvas.clipEvenOdd();

canvas.moveTo(50, 150);
canvas.lineTo(150, 50);
canvas.lineTo(250, 150);
canvas.lineTo(150, 250);
canvas.closeAndStroke();

canvas.restoreGraphicsState();

DrawPolygons方法

drawPolygonOutsideStroke

结果

screenshot

很明显,在内部和外部情况下,一半的描边线被切断。因此,要实现一定的笔画宽度,您必须将线宽设置为该值的两倍。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.