当前位置: 首页 > 知识库问答 >
问题:

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

钦楚青
2023-03-14

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

共有2个答案

左丘嘉木
2023-03-14

所以,我遇到了这个问题,有一个方法,但它有点欺骗,取决于你想做什么,不是一个好的解决方案。您可以利用包含圆形类型的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);

然后打电话

<代码>圆圈。设置InteriorColor(someCOSColor)

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

编辑:添加了一个更完整的示例以响应注释

金正阳
2023-03-14

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

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();
}
 类似资料:
  • 我正在尝试做一些非常简单的事情(见上文)。我希望画布的所有像素都是纯色,除了填充中心圆圈的像素。我已经阅读了数百篇关于这个主题的stack overflow帖子,并尝试了数百种方法,包括设置porterduff.mode。下面是MyView extends视图的当前onDraw(): 我是不是误解了什么,为什么我不能用透明油漆在现有的像素上油漆。当我这样做时,像素保持不变。当我使用PorterDu

  • 使用iTextSharp,您可以通过将事件附加到PDF来向PDF添加页眉/页脚,如本SO答案中所述:https://stackoverflow.com/a/19004392 我怎样才能用 iText 7 做同样的事情? 这个链接有Java代码示例,但看起来不像它使用的页面事件。

  • 我正在用ApachePDFBox编写一个简单的Java应用程序。我有几个PDF,其中最后一页是前几页内容的索引。 我需要的索引(最后一页)成为PDF文件的第一页。 可能吗? 我还发现了http://itextpdf.com/这个库听起来比ApachePDFBox更好,但在这种情况下,我也不知道我是否能做我需要的事情 或者我可以用这个:http://saaspose.com/docs/display

  • 我正在使用iText生成Pdf。但当我试图在pdf中添加图像时, 我mage.get实例(新的URL(timetableResource.getImageUrl()));document.add(学校标志); 但我得到的错误是 HTTP状态500-服务器为URL返回了HTTP响应代码400:http://139.59.72.150:8080/sms/attachments/23/42/school

  • 我使用的代码是:https://www.tutorialspoint.com/pdfbox/pdfbox_inserting_image.htm 帮助我将图像添加到现有PDF。问题是它创建的文件是一个空白页,上面只有图像。 这是我的代码: 据我所知,我所做的应该是有效的,我没有任何错误,那么是什么造成的呢?

  • 问题内容: 我正在尝试使用itext java api将anchor(命名为destinations)添加到pdf。但是它不起作用。当我单击文本时,什么也没有发生。这就是我在做什么。 我究竟做错了什么?。任何帮助 问题答案: 试试这个。它为我工作。并会做魔术。