如何在现有的pdf上绘制几何图形?

时间:2016-08-05 17:10:42

标签: java pdfbox

我需要在现有的pdf上绘制一个矩形。这是我做的事情

public class Main {


    public static void main(String[] args) throws IOException {

        String originalFile = "C:\\Users\\original.pdf"; 
        String modifiedFile = "C:\\Users\\modified.pdf"; 

        PDDocument doc = PDDocument.load(new File(originalFile)); 
        PDPage page = (PDPage) doc.getDocumentCatalog().getPages().get(0);

        PDPageContentStream contentStream = new PDPageContentStream(doc, page  ); 
        drawRect(contentStream, Color.green, new java.awt.Rectangle(500, 500, 20, 200), true); 
        contentStream.close(); 
        doc.save(new File(modifiedFile) ) ; 

    }



    private static void drawRect(PDPageContentStream content, Color color, Rectangle rect, boolean fill) throws IOException {
        content.addRect(rect.x, rect.y, rect.width, rect.height);
        if (fill) {
            content.setNonStrokingColor(color);
            content.fill();
        } else {
            content.setStrokingColor(color);
            content.stroke();
        }
    }


}

然而,这会在空白页面上创建一个绿色矩形。我需要在现有数据之上的那个矩形。我能正确保存吗?

1 个答案:

答案 0 :(得分:2)

请更改此行

PDPageContentStream contentStream = new PDPageContentStream(doc, page  ); 

到此:

PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true, true);

这不仅会创建额外的内容流,还会重置图形上下文。