jim*_*ang 4 java pdf-generation spring-mvc itext graphics2d
我试图完成一个绘制图形并将其写入PDF的示例,但我不断收到PDF没有页面的错误.如果我在打开后用document.add()添加一些简单的东西就可以正常工作,我只是看不到图形.这是我的代码:
Document document = new Document();
PdfWriter writer = new PdfWriter();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition",
" attachment; filename=\"Design.pdf\"");
writer = PdfWriter.getInstance(document, response.getOutputStream());
document.open();
PdfContentByte cb = writer.getDirectContent();
Graphics2D graphics2D = cb.createGraphics(36, 54);
graphics2D.drawString("Hello World", 36, 54);
graphics2D.dispose();
document.close();
Run Code Online (Sandbox Code Playgroud)
我是否必须执行其他操作才能将图形添加到文档中,或者我的语法不正确?
我不是IText的专家,但上周我试图用它绘制一些圆圈.所以这是我在测试中注意到的:
如果你绘制图形,你必须(或者说我必须在尝试它时)将图形命令"包装"在一个开始saveState()和结束的部分restoreState(),以及我需要调用的部分fillStroke()- 如果我不调用fillStroke()则没有什么是画.
例
private void circle(float x, float y, PdfWriter writer) {
PdfContentByte canvas = writer.getDirectContent();
canvas.saveState();
canvas.setColorStroke(GrayColor.BLACK);
canvas.setColorFill(GrayColor.BLACK);
canvas.circle(x, y, 2);
canvas.fillStroke();
canvas.restoreState();
}
@Test
public void testPossition() throws DocumentException, IOException {
OutputStream outputStream = FileUtil.openOutputStream("testPosition.pdf");
//this is my personal file util, but it does not anything more
//then creating a file and opening the file stream.
Document document = new Document(PageSize.A4, 50, 50, 50, 50);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
document.open();
markPosition(100, 100, writer);
document.add(new Paragraph("Total: 595 x 842 -- 72pt (1 inch)"));
document.close();
outputStream.flush();
outputStream.close();
}
private void markPosition(float x, float y, PdfWriter writer)
throws DocumentException, IOException {
placeChunck("x: " + x + " y: " + y, x, y, writer);
circle(x, y, writer);
}
private void placeChunck(String text, float x, float y, PdfWriter writer)
throws DocumentException, IOException {
PdfContentByte canvas = writer.getDirectContent();
BaseFont font = BaseFont.createFont(BaseFont.HELVETICA,
BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
canvas.saveState();
canvas.beginText();
canvas.moveText(x, y);
canvas.setFontAndSize(font, 9);
canvas.showText(text);
canvas.endText();
canvas.restoreState();
}
Run Code Online (Sandbox Code Playgroud)
但是PdfContentByte(画布)有更多的功能,例如rectangle.
| 归档时间: |
|
| 查看次数: |
12839 次 |
| 最近记录: |