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