微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用外部 CSS iTextPdf 7 生成 PDF 文件

如何解决使用外部 CSS iTextPdf 7 生成 PDF 文件

我是 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);

}

使用外部 CSS 样式正确生成了 PDF 文件,但我也遇到了一些不会停止应用程序的异常。

例外是: java.lang.IllegalArgumentException:不支持 伪 css 选择器::-moz-placeholder java.lang.IllegalArgumentException:不支持的伪 css 选择器: :-ms-input-placeholder

先谢谢你!

解决方法

这些异常是由 iText 的 CSS 解析器在遇到它(尚)不支持的伪类或伪元素时生成的。它们只是被记录下来(如果您配置了记录器),而选择器及其声明将被忽略。

如果您的输出正确,您可以忽略这些日志消息(或从 CSS 输入中删除选择器)。

关于您提到的选择器:

那些是供应商特定的选择器,由 -prefix- 表示:-moz- 是 Mozilla (Firefox) 的前缀,-ms- 是 Microsoft(IE 和 Edge)的前缀。供应商将这些用于实验性或非标准 CSS 功能。 iText 不太可能永远支持它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。