java - 如何在PDFBox中绘制三角形

标签 java pdf graphics pdfbox shapes

我试图通过在顶点 (100,100)、(110,100) 和 (110,110) 之间绘制 3 条线来绘制三角形,并使用 PDFBox 填充和描边路径。

使用的方法如下:

public void drawTriangle(PDPageContentStream pDPageContentStream) throws IOException {
    pDPageContentStream.appendRawCommands("q\n");
    pDPageContentStream.addLine(100, 100, 110, 100);
    pDPageContentStream.addLine(110, 100, 110, 110);
    pDPageContentStream.addLine(110, 110, 100, 100);
    pDPageContentStream.appendRawCommands("\nB*\n");
    pDPageContentStream.appendRawCommands("\nQ\n");
}

但是显示了九边形!

请帮我画三角形!

最佳答案

以下程序在 pdf 文档上绘制三角形:

package pdf;

import java.awt.Color;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;


public class GeneratePdfDocument {

    public void GeneratePdfDocument() throws IOException, COSVisitorException {
        String shapePdfFilePath = "resources/triangle.pdf";

        PDDocument pDDocument = new PDDocument();
        PDPage page1 = new PDPage(PDPage.PAGE_SIZE_A4);
        pDDocument.addPage(page1);
        PDPageContentStream pDPageContentStream = new PDPageContentStream(pDDocument, page1);
        drawTriangle(pDPageContentStream, 300, 600, 250, 250);
        pDPageContentStream.close();
        pDDocument.save(shapePdfFilePath);
        pDDocument.close();
    }

    public void drawTriangle(PDPageContentStream pDPageContentStream, float x, float y, float width, float height) throws IOException {
        pDPageContentStream.appendRawCommands("q\n");
//        pDPageContentStream.setLineCapStyle(0);
        pDPageContentStream.setLineCapStyle(1);
        pDPageContentStream.setStrokingColor(Color.BLACK);
        pDPageContentStream.moveTo(x, y);
        pDPageContentStream.addLine(x, y, x + width, y);
        pDPageContentStream.addLine(x + width, y, x + width, y + width);
        pDPageContentStream.addLine(x + width, y + width, x, y);
        pDPageContentStream.appendRawCommands("B*\n");
        pDPageContentStream.appendRawCommands("Q\n");
    }

    public static void main(String[] agrgs) throws IOException, COSVisitorException {
        GeneratePdfDocument generatePdfDocument = new GeneratePdfDocument();
        generatePdfDocument.drawTriangle();
    }
}

(ps:由于三角形尺寸太小,并且线端样式设置为默认(0),因此无法正确识别三角形!)

关于java - 如何在PDFBox中绘制三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32649822/

相关文章:

java Spark框架无法设置或读取cookie

java - iText 中的图像定位 - Java

java - 为什么我的图像无法保存

java - JComponent 不会重绘

java - Spring MVC Hibernate session 错误

java - 使用 Eclipse 解决冲突后的 RTC 合并问题

具有通用版本 8 和 17 的 Java 实例类型

java - 如何使用 iText 复制 AcroForm?

ios - Xcode 6 : pdf vector images with transparency

opengl - 计算与图形的依赖关系