我正在尝试将JFreeChart添加到我的PDF文件中,并在itextpdf的内容中得到一个异常。我不知道我做错了什么,或者异常是什么告诉我的。这是我的代码段:
try {
PdfWriter writer=PdfWriter.getInstance(document,new FileOutputStream(filePath.getText()));
document.open();
document.add(setParagraph("Stoker Monitor Report",titleFont));
document.add(setParagraph(name.getText(),subTitleFont));
document.add(setParagraph(date.getText(),dateFont));
PdfContentByte cb=writer.getDirectContent();
Float height=7.f;
Float width=11.69f;
PdfTemplate tp=cb.createTemplate(width,height);
Graphics2D g2D=new PdfGraphics2D(cb,width,height);
Rectangle2D r2D=new Rectangle2D.Double(0,0,width,height);
Chart.getInstance().getChart().draw(g2D,r2D);
tp.addTemplate(tp, 0, 0);
} catch (FileNotFoundException | DocumentException e1) {
System.err.println("Unable to open "+filePath.getText()+" for writing");
e1.printStackTrace();
}
document.close();
例外情况即将结束。这是堆栈跟踪:
Exception in thread "AWT-EventQueue-0" com.itextpdf.text.exceptions.IllegalPdfSyntaxException: Unbalanced save/restore state operators.
at com.itextpdf.text.pdf.PdfContentByte.sanityCheck(PdfContentByte.java:4193)
at com.itextpdf.text.pdf.PdfContentByte.reset(PdfContentByte.java:1813)
at com.itextpdf.text.pdf.PdfContentByte.reset(PdfContentByte.java:1801)
at com.itextpdf.text.pdf.PdfWriter.resetContent(PdfWriter.java:746)
at com.itextpdf.text.pdf.PdfDocument.endPage(PdfDocument.java:1061)
at com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:882)
at com.itextpdf.text.Document.close(Document.java:415)
at stokerMonitor.CreateReport$CreateButtonListener.actionPerformed(CreateReport.java:152)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
我不知道这意味着什么,因为它不涉及我的代码。我假设我传递的参数中有一些东西引起了这个但我不知道该怎么看。有人可以为我解释这个例外,并指出我正确的方向吗? TIA。
答案 0 :(得分:1)
当您从谁知道位置复制代码时,您忘记了一行:
PdfTemplate tp=cb.createTemplate(width,height);
Graphics2D g2D=new PdfGraphics2D(cb,width,height);
Rectangle2D r2D=new Rectangle2D.Double(0,0,width,height);
Chart.getInstance().getChart().draw(g2D,r2D);
g2D.dispose();
cb.addTemplate(tp, 0, 0);
如果没有dispose()
,您可能会遇到各种奇怪的错误。
同样tp.addTemplate(tp, 0, 0);
应为cb.addTemplate(tp, 0, 0);