使用Apache PDFBox将填充的圆圈添加到PDF页面

时间:2017-03-15 13:34:28

标签: java pdf drawing pdfbox

我尝试使用Apache PDFBox库以编程方式创建PDF文档。类PDPageContentStream包含写入文本,绘制线条,贝塞尔曲线,矩形的方法。但我找不到画一个简单实心圆的方法。有没有办法用这个库绘制它?如果没有,您能否建议一个免费的Java库,它提供灵活的API来以编程方式创建PDF文档?提前谢谢。

2 个答案:

答案 0 :(得分:6)

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

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();
}

答案 1 :(得分:1)

所以,我遇到了这个问题,并且有一种方法,但它的那种欺骗性,取决于你想做什么,不是一个好的解决方案。您可以利用包含圆形类型的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上的人试图打印它们,他们将看不到注释。使用风险自负,但它会给你填充彩色圆圈

编辑:在回复评论时添加了更完整的示例