首页 > 解决方案 > Java:包含不同样式的更多 span 无法使用 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>

在此处输入图像描述

代码:这是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;
    }}
    

标签: javaopenhtmltopdf

解决方案


推荐阅读