Java IllegalPdfSyntaxException:不平衡的保存/还原状态运算符
我正在进行Java IllegalPdfSyntaxException:不平衡的保存/还原状态运算符,java,html,css,itext,Java,Html,Css,Itext,我正在进行iText将带有CSS的HTML转换为PDF 在我的CSS中,我有: background: linear-gradient(to bottom, #fff 0%, #e6e6e6 100%); 在此情况下,它将抛出以下异常: IllegalPdfSyntaxException: Unbalanced save/restore state operators (exception at document.close();) 以下是我编写的代码: Document docum
iText
将带有CSS的HTML转换为PDF
在我的CSS中,我有:
background: linear-gradient(to bottom, #fff 0%, #e6e6e6 100%);
在此情况下,它将抛出以下异常:
IllegalPdfSyntaxException: Unbalanced save/restore state operators
(exception at document.close();)
以下是我编写的代码:
Document document = null;
try{
FileOutputStream fileOuputStream = new FileOutputStream("D:\\DEV\\testpdf.html");
fileOuputStream.write(str.getBytes());
String CSS = "D:\\DEV\\all.css";
CSSResolver cssResolver = new StyleAttrCSSResolver();
CssFile cssFile = XMLWorkerHelper.getCSS(new FileInputStream(CSS));
cssResolver.addCss(cssFile);
FileInputStream fileInputStream = new FileInputStream("D:\\DEV\\testpdf.html");
// step 1
document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("pdf.pdf"));
// step 3
document.open();
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
CssAppliers cssAppliers = new CssAppliersImpl(fontProvider);
HtmlPipelineContext htmlContext = new HtmlPipelineContext(cssAppliers);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(fileInputStream);
// step 4
// XMLWorkerHelper.getInstance().parseXHtml(writer, document, fileInputStream);
//step 5
fileInputStream.close();
fileOuputStream.close();
System.out.println( "PDF Created!" );
}catch(IOException e){
e.printStackTrace();
return false;
}
document.close();
如果我将其从CSS中删除:
background: linear-gradient(to bottom, #fff 0%, #e6e6e6 100%);
然后,我就可以生成PDF而不出现上述异常
iText版本:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.2</version>
</dependency>
<dependency>
<groupId>com.itextpdf.tool</groupId>
<artifactId>xmlworker</artifactId>
<version>5.4.1</version>
</dependency>
com.itextpdf
itextpdf
5.4.2
com.itextpdf.tool
xmlworker
5.4.1
您使用的是哪个版本的iText?itextpdf-5.4.2 xmlworker-5.4.1您可以尝试使用最新版本。还要确保XML Worker和iText的版本号始终对应。itextpdf-5.5.2 xmlworker-5.5.2在我更改jar版本和注释CSS线性渐变时,没有例外(底部,#fff 0%,#e6e6 100%);当我在上面的CSS代码中使用/取消注释时,仍然存在相同的问题:com.itextpdf.text.exceptions.IllegalPdfSyntaxException:disbalanced save/restore state operators.OK,听起来像个bug。不平衡的保存/还原状态运算符意味着有一个saveState()
调用而没有restoreState()
调用(反之亦然)。现在我们已经确定问题发生在最近的iText/XML Worker版本中,我将把它放在正式的待办事项列表中。如果您是客户,机票将得到优先处理。如果没有,您将不得不等到下一个版本。