Java:无法使用 OpenHtmlToPdf 将包含不同样式的更多跨度转换为 PDF 格式

问题描述

我发现 OpenHtmlToPdf 可以将 html 转换为 pdf。好吧,它可以使用我的自定义字体,但是当我为样式设置多个跨度标签时,它会失败。在这种情况下,它没有加载正确的字体....

<p>invalid format</p>
 
 <span style="font-family:'Courier Prime'">
      <span style="color:yellow">
             <span style="font-size:36pt">
                 Hello World!
            </span>
     </span> </span>
 
 <p>working format</p>
 
 <span style="font-family:'Courier
 Prime';color:yellow;font-size:36pt">Hello World!</span>

enter image description here

代码:这是spring-boot服务的相关部分...

@Service
public class HtmltoPdfServiceImpl implements HtmlToPdfService {
    @Autowired
    private PdfRendererBuilder pdfRendererBuilder;
    
    @Override
    public byte[] topdf(HtmlToPdfModel htmlmap) throws HtmlToPdfException {
        byte[] pdf;
        String html = htmlmap.getHtmlbody();
        try (ByteArrayOutputStream os = new ByteArrayOutputStream()){
            pdfRendererBuilder.withHtmlContent(html,"");
            pdfRendererBuilder.toStream(os);
            pdfRendererBuilder.run();
            pdf = os.toByteArray();
        } catch (IOException e) {
            throw new HtmlToPdfException("...");
        }
        return pdf;
    }}
    
@Configuration
@Slf4j
public class PdfRendererBuilderConfig {
    
    @Bean
    public PdfRendererBuilder pdfRendereBuilderBean() throws IOException {
        
        Integer x = 210;
        Integer y = 297;
        
        Path fontDirectory = Paths.get("/fonts");
        
        PdfRendererBuilder pdfRendererBuilder = new PdfRendererBuilder();
        
        pdfRendererBuilder.useDefaultPageSize(x,y,BaseRendererBuilder.PageSizeUnits.MM);
        pdfRendererBuilder.useFastMode();
        
        List<CSSFont> fonts = AutoFont.findFontsInDirectory(fontDirectory);
        fonts.forEach(s->log.info(s.familyCssEscaped()+" loaded ..."));
        AutoFont.toCSSEscapedFontFamily(fonts);
        AutoFont.toBuilder(pdfRendererBuilder,fonts);
        return pdfRendererBuilder;
    }}
    

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...