AVA
AVA

Reputation: 2558

How to draw triangle in PDFBox

I am trying to draw a triangle by drawing 3 lines amongst vertices (100,100), (110,100) and (110,110), filling and stroking the path using PDFBox.

The method used is as follows:

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");
}

But a nonagon is shown!

Please help me drawing the triangle!

Upvotes: 1

Views: 1297

Answers (1)

AVA
AVA

Reputation: 2558

The following program draws triangle on a pdf document:

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: As the size of the triangle was so small and the line end cap style was set to default(0), the triangle was not recognised properly!)

Upvotes: 1

Related Questions