Java 使用ApachePDFBox将填充圆添加到PDF页面

Java 使用ApachePDFBox将填充圆添加到PDF页面,java,pdf,drawing,pdfbox,Java,Pdf,Drawing,Pdfbox,我正在尝试使用该库以编程方式创建PDF文档。该类包含编写文本、绘制直线、贝塞尔曲线和矩形的方法。但是我找不到一种方法来画一个简单的填充圆。有没有办法用这个图库画出来?如果没有,您能推荐一个免费的Java库,它提供灵活的API以编程方式创建PDF文档吗?提前谢谢。所以,我遇到了这个问题,有一种方法,但它有点骗人,取决于你想做什么,不是一个好的解决方案。您可以利用包含圆形类型的PDF“注释”,例如: PDAnnotationSquareCircle circle = new PDAnnotation

我正在尝试使用该库以编程方式创建PDF文档。该类包含编写文本、绘制直线、贝塞尔曲线和矩形的方法。但是我找不到一种方法来画一个简单的填充圆。有没有办法用这个图库画出来?如果没有,您能推荐一个免费的Java库,它提供灵活的API以编程方式创建PDF文档吗?提前谢谢。

所以,我遇到了这个问题,有一种方法,但它有点骗人,取决于你想做什么,不是一个好的解决方案。您可以利用包含圆形类型的PDF“注释”,例如:

PDAnnotationSquareCircle circle = new PDAnnotationSquareCircle(PDAnnotationSquareCircle.SUB_TYPE_CIRCLE);
PDRectangle position = new PDRectangle();
position.setLowerLeftX(0);
position.setLowerLeftY(0;
position.setUpperRightX(100);
position.setUpperRightY(100);
circle.setRectangle(position);
然后打电话

circle.SetInteriorColor(someCOSColor)

用颜色作为参数来填充它。这样做的问题是,它是一个“注释”,除非您锁定要编辑的文档,否则人们可以拖动它们。此外,如果Windows上的用户尝试打印它们,他们将看不到注释。使用风险自负,但它会给你填充彩色圆圈


编辑:为回复评论添加了一个更完整的示例

好的,谢谢大家的回复。我喜欢贝塞尔曲线的解决方案。这种方法对我有效:

private void drawCircle(PDPageContentStream contentStream, int cx, int cy, int r, int red, int green, int blue) throws IOException {
    final float k = 0.552284749831f;
    contentStream.setNonStrokingColor(red, green, blue);
    contentStream.moveTo(cx - r, cy);
    contentStream.curveTo(cx - r, cy + k * r, cx - k * r, cy + r, cx, cy + r);
    contentStream.curveTo(cx + k * r, cy + r, cx + r, cy + k * r, cx + r, cy);
    contentStream.curveTo(cx + r, cy - k * r, cx + k * r, cy - r, cx, cy - r);
    contentStream.curveTo(cx - k * r, cy - r, cx - r, cy - k * r, cx - r, cy);
    contentStream.fill();
}

这是一个注释。这不是OP所要求的。“但我找不到一种方法来画一个简单的填充圆。”这是问题的引语。这将在他的文档上创建一个填充圆。我想我已经充分解释了缺点。事实上,如果有其他方法,我很想听听,因为我在一个应用程序中使用了它,它导致了我所描述的问题。大部分PDF副本没有用于圆的运算符,你必须用贝塞尔曲线来近似它。@TilmanHausherr如何填充由4条贝塞尔曲线限定的区域?我遇到了这个问题,不得不使用注释来解决it@mstorkson使用适当的贝塞尔曲线绘制形状后,您可以调用fill()。@mstorkson,当然您必须设置非笔划颜色。@tilmanhausher好的,应用程序已经在人们手中,但很高兴知道将来会如何。