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" 开始。

结果是: