我正在使用pdfbox的1.8版本。我试图在页面上绘制一条曲线,我对如何使用控制点绘制它有一些基本知识。所以我只是尝试绘制一条基本曲线,但没有任何东西出现。
我从以下代码行开始:
stream.setNonStrokingColor(155);
stream.stroke();
stream.addBezier321(...);
stream.closeAndStroke();
我还缺少什么吗?我似乎无法弄明白。
答案 0 :(得分:2)
我没有尝试测试您的示例究竟出现了什么问题(请参阅我的问题下面的评论,但也可能有其他原因),但这里有一些代码可以满足您的需求:
PDDocument doc = new PDDocument();
PDPage pdpage = new PDPage();
doc.addPage(pdpage);
PDPageContentStream stream = new PDPageContentStream(doc, pdpage, false, false);
// move stuff a bit up and right
stream.concatenate2CTM(AffineTransform.getTranslateInstance(100, 400));
stream.setStrokingColorSpace(PDDeviceRGB.INSTANCE);
stream.setStrokingColor(Color.red);
stream.setLineWidth(10f);
stream.moveTo(1, 1);
stream.addBezier32(111, 075, 200, 200);
stream.addBezier32(352, 124, 80, 80);
stream.addBezier32(432, 333, 300, 333);
stream.stroke();
stream.close();
doc.save(filename);
doc.close();
更高级的东西:要填写你得到的东西,请使用以下代码:
// move stuff a bit up
stream.concatenate2CTM(AffineTransform.getTranslateInstance(100, 400));
stream.setStrokingColorSpace(PDDeviceRGB.INSTANCE);
stream.setStrokingColor(Color.red);
stream.setNonStrokingColorSpace(PDDeviceRGB.INSTANCE);
stream.setNonStrokingColor(Color.blue);
stream.setLineWidth(10f);
stream.moveTo(1, 1);
stream.addBezier32(111, 075, 200, 200);
stream.addBezier32(352, 124, 80, 80);
stream.addBezier32(432, 333, 300, 333);
stream.addBezier32(234, 129, 200, 300);
stream.closeSubPath();
stream.appendRawCommands("\nB*\n"); // Fill and then stroke the path, using the even-odd rule
// to use the nonzero winding number rule, use "B" instead of "B*"
要了解有关运营商B和B *的更多信息,请阅读PDF specification,然后从“运营商摘要”开始。