问题描述
我发现 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;
}}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)