pdfbox无法绘制贝塞尔曲线
pdfbox unable to draw bezier curve
我使用的是 1.8 版的 pdfbox。我正在尝试在页面上绘制曲线,我对如何使用控制点绘制它有一些基本知识。所以我只是尝试绘制一条基本曲线,但什么也没有出现。
我从以下代码行开始:
stream.setNonStrokingColor(155);
stream.stroke();
stream.addBezier321(...);
stream.closeAndStroke();
我缺少什么吗?我似乎无法弄清楚。
我没有尝试测试您的示例到底出了什么问题(请参阅我在您的问题下方的评论,但也可能有其他原因),但这里有一些代码可以满足您的需求:
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,然后从 "operator summary" 开始。
结果是:
我使用的是 1.8 版的 pdfbox。我正在尝试在页面上绘制曲线,我对如何使用控制点绘制它有一些基本知识。所以我只是尝试绘制一条基本曲线,但什么也没有出现。
我从以下代码行开始:
stream.setNonStrokingColor(155);
stream.stroke();
stream.addBezier321(...);
stream.closeAndStroke();
我缺少什么吗?我似乎无法弄清楚。
我没有尝试测试您的示例到底出了什么问题(请参阅我在您的问题下方的评论,但也可能有其他原因),但这里有一些代码可以满足您的需求:
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,然后从 "operator summary" 开始。
结果是: