Image iText PdfContentByte addTemplate位置不起作用
我试图将位置设置为我添加到PDF中的图像,但它始终将位置设置为0,0。 我找了很多,但找不到解决办法。我想我不能很好地理解定位 这里的代码总是发布到0,0,但它应该是200300 非常感谢你的帮助Image iText PdfContentByte addTemplate位置不起作用,image,pdf,positioning,itext,Image,Pdf,Positioning,Itext,我试图将位置设置为我添加到PDF中的图像,但它始终将位置设置为0,0。 我找了很多,但找不到解决办法。我想我不能很好地理解定位 这里的代码总是发布到0,0,但它应该是200300 非常感谢你的帮助 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue(String.format("%s, %s", "pie1", "pie1"),20); dataset.setValue(String.format("%s,
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue(String.format("%s, %s", "pie1", "pie1"),20);
dataset.setValue(String.format("%s, %s", "pie2", "pie2"),80);
JFreeChart chart = ChartFactory.createPieChart("testPie", dataset, true, true, false);
Document document = new Document();
document.addCreationDate();
document.setPageSize(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
PdfTemplate tp = cb.createTemplate(300, 300);
Graphics2D g2 = cb.createGraphics(300, 300, new DefaultFontMapper());
Rectangle2D r2D = new Rectangle2D.Double(0, 0, 300, 300);
chart.draw(g2, r2D, null);
g2.dispose();
cb.addTemplate(tp, 200, 300);
document.close();
你的模板是空的。。。您直接从作者的直接内容(CB.createGraphics,而不是您可能想要的TP.createGraphics)获取PdfGraphics2D 有几种解决方案: 选项1:从模板中获取图形2D
Graphics2D g2 = tp.createGraphics(...)
选项2:放弃模板,直接在contentByte中移动图表。graphics2D接口有点笨重,因此只要可能,您通常应该更喜欢直接在contentByte中执行操作。它工作得很好,但是它构建的内容流没有它可能的那么高效。在这种情况下,我认为这无关紧要,但这是一个很好的经验法则
cb.saveState();
cb.concatMatrix(1, 0, 0, 1, 200, 300);
Graphics2D g2 = cb.createGraphics(...);
...
g2.dispose();
cb.restoreState();
document.close();
选项三:放弃模板并从Graphics2D实例中移动图表:
g2.transform(AffineTransform.getTranslateInstance(200, 300));
chart.draw(...);
非常感谢,非常感谢。我应该越来越多地研究itext。