我是iText 7的新手,正在尝试用外部CSS文件转换HTML页面。代码:
@RequestMapping(path = "/pdf/{id}")
public ResponseEntity<?> getPDF(@PathVariable Long id,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
Visit visit = visitService.getById(id);
List<Service> services = serviceService.getServicesByVisit(visit);
WebContext context = new WebContext(request, response, servletContext);
context.setVariable("visitEntity", visit);
context.setVariable("services", services);
String orderHtml = templateEngine.process("invoice", context);
ByteArrayOutputStream target = new ByteArrayOutputStream();
ConverterProperties converterProperties = new ConverterProperties();
converterProperties.setBaseUri("http://localhost:8080");
HtmlConverter.convertToPdf(orderHtml, target, converterProperties);
byte[] bytes = target.toByteArray();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=invoice.pdf")
.contentType(MediaType.APPLICATION_PDF)
.body(bytes);
}
PDF文件是用外部CSS样式正确生成的,但我也遇到了一些不会停止应用程序的异常。
异常为:java.lang.IollegalArgumentException:不支持pseudo-css选择器::-moz占位符和java.lang.IllegalArgumentException:不支持的pseudo-css选择器::-ms输入占位符
提前感谢!
iText的CSS解析器在遇到它(还(不支持的伪类或伪元素时会生成这些异常。它们被简单地记录(如果您配置了记录器(,并且选择器及其声明被忽略。
如果您的输出是正确的,您可以忽略这些日志消息(或者从CSS输入中删除选择器(。
关于您提到的选择器:
这些是特定于供应商的选择器,由-prefix-
表示:-moz-
是Mozilla(Firefox(的前缀,-ms-
是Microsoft(IE和Edge(的前缀。供应商将其用于实验性或非标准CSS功能。iText不太可能支持他们。