如何避免不必要的空白添加到使用pdfHtml生成的PDF中?

时间:2019-01-09 07:16:23

标签: java itext pdfhtml

我正在使用iText的pdfHtml从HTML生成PDF,但是我可以看到在生成的PDF的两个元素之间添加了很多空格。

请在下面查看HTML和PDF

下图中突出显示的部分在两行之间显示了多余的空白。

space between two below lines

下面是源HTML内容。

 <html>
 <head></head>
 <body>  
  <meta name="generator" content="HTML Tidy for Java (vers. 2009-12-01), see jtidy.sourceforge.net"> 
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
  <style type="text/css">
 * { font-family: 'Arial Unicode MS'; } 
    </style> 
  <title></title>   
  <img border="0" style="margin-left: 370px;" width="340.6" src="file:Docs_a0s29000000qTxeAAE/01529000000ITQ8.PNG">  
  <div style="font-size: 25px; font-family: Roboto, arial, sans-serif;">
   สวัสดีชาวโลก!
  </div> 
  <div style="font-size: 25px; font-family: Roboto, arial, sans-serif;">
   นี่คือเทมเพลตการปฏิเสธความรับผิด!
  </div> 
  <ul> 
   <li>BioConnect Version 1 - Capture</li> 
  </ul>  
  <p> <span style="font-size: 25px; font-family: Roboto, arial, sans-serif;">嘿!这是结算模板</span> </p> 
  <div style="margin-right: 500px;">
   中文1 
   <img border="0" src="null" style="margin-right: 500px;" width="112.5"> 
   <br>中文2 
   <br>中文3 
   <br>中文4 
   <br>中文5 
   <br>中文6
  </div>   
 </body>
</html>

这是浏览器中的HTML外观。

HTML looks perfect in browser

任何评论/解决方案将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您会抱怨iText用于html的前导(行之间的默认空格)。

与浏览器相比,默认情况下,iText会考虑存储在字体文件中的升序和降序来计算行之间的行距。看来它们对于iText用于处理html的字体来说相当大,这导致了问题。

要克服它,可以使用 line-height 属性。我相信将其值设置为1em会有所帮助。

我已将下一个CSS样式规则添加到您的html文件中:

div {
    line-height: 1em;
}

然后,我使用了最新的iText7(适用于itextcore和html2pdf的7.1.5-SNAPSHOT),并在更改前后都处理了您的html。现在请看结果

新的html:https://pastebin.com/tFzdViyx

之前:enter image description here

之后:enter image description here

比较:enter image description here