Reputation: 2558
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
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