wkhtmltopdf页眉顶部的标题高度和定位标题

问题描述:

在我的应用程序中,允许用户定义自己的页眉和页边空白进行打印。 对于报头,用户可以提供以下两个字段:wkhtmltopdf页眉顶部的标题高度和定位标题

  • (一)页上边距在毫米(从页面顶部)
  • (b)中页眉边距以毫米(从顶部页)

的字段的(a)和(b)作为显示在下面的图中: Margins depiction

例如,如果用户为10毫米提供了(a)和(b)为100mm时,那么“标题区域”的高度将是90mm。

现在标题内的内容需要在标题区域的顶部对齐。

有没有办法设置标题区域的高度,并在这个标题区域内的顶部对齐内容。

目前,我做为报头HTML选项如下:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 

    <style type="text/css"> 
     body 
     { 
      border:0; 
      margin: 0; 
      padding: 0; 
      height: 90mm; //in actual program, this is set dynamically in PHP 
     } 
    </style> 

    <script type="text/javascript"> 
    function subst() 
    { 
     //process the GET parameters and accordingly set the Header Region text info 
    } 
    </script> 
</head> 

<body onload="subst()"> 
    <div> 
     //text 
    </div> 
</body> 
</html> 

边距选项被设置为100毫米。

我已经尝试设置垂直对齐:顶部身体 CSS,但同样没有工作。

我实现的最终输出似乎没有标题区域内容在顶部或中部垂直对齐。它位于标题区域中间的某处。

+0

尝试使用用于'spacing'的wkhtmltopdf标志除了'余量-top' – Unixmonkey 2013-03-08 19:11:09

+0

@Unixmonkey:头标区的内容不具有固定的大小。用户可以*提供任何不。标题内容的行数。所以间距不能预先固定。另外,我之前没有提到,即使纸张大小是用户定义的。 – mohitp 2013-03-08 19:28:40

编辑:此修复程序似乎只有当wkhtmltopdf安装在基于Windows的系统是必要的。

大量的试验和错误之后,我观察到下面的逻辑似乎是工作:

  • HTML头的元素需要被设置为一个高度的1.33倍实际标题区域的高度。 (为什么?我不知道,这可能是由于某种QT或wkhtmltopdf渲染方式引起的,但它实际上适用于所有情况,无论标题区域内容中的行如何)。
  • 立即(以及只)身体的子元素被设置为100%的高度,并隐藏HTML头溢出内容

所以,改变后的代码(上面的例子)看起来像这样:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8" /> 

    <style type="text/css"> 
     body 
     { 
      border:0; 
      margin: 0; 
      padding: 0; 
      height: 120mm; 
      /* 
      In the actual program this height is calculated dynamically in PHP as 
      ($headerMargin - $topMargin) * 1.33 
      */ 
     } 

     #master-div 
     { 
      overflow: hidden; 
      height: 100%; 
     } 

    </style> 

    <script type="text/javascript"> 
    function subst() 
    { 
     //process the GET parameters and accordingly set the Header Region text info 
    } 
    </script> 
</head> 

<body onload="subst()"> 
    <div id="master-div"> 
     //The actual content goes here 
    </div> 
</body> 
</html> 

我已经检查此为atleast 7〜8不同的纸张大小(包括设置定制页面宽度页面高度。还用不同的标题区域内容大小(从1行到20行)进行检查。

唯一的问题是,只有页眉边距(b)/页边距小于或等于纸高度的三分之一时,标题区高度的1.33倍的逻辑似乎才起作用。如果边距高度超出了边界高度增加时内容被剪切的程度。但是,我想,通常不需要拥有如此大的标题高度。

+0

我能够对付使用你提供的知识的PDF,但我还是有点困惑的利润和定位。此外,我的PDF已经生成空白页面(只有标题),这导致我相信内容推动下一页的东西。 – marquito 2013-09-05 21:04:52

+0

你能详细说明你的问题吗?另请注意,只有在Windows计算机上运行wkhtmltopdf时,问题和解决方案才会生效。如果最后的主机将在Linux机器上完成,则不会发生上述问题。在这种情况下(在Windows上进行开发并在Linux上进行托管),您必须单独处理两种情况,即针对每种情况都有不同的PHP/CSS。至少这是我所做的。 – mohitp 2013-09-06 06:33:17

+0

我正在使用Windows,因为我们的解决方案是基于ASP.NET的。尽管我还没有弄清楚数字(我可以在经过一些试验和错误之后做到这一点),但我仍然能够管理正确的标题。使用以下命令http://bit.ly/1acl3DW这是从ASP.NET产生:你可以在这里看到一个PDF例如http://pastebin.com/KdMCv8VB – marquito 2013-09-06 13:26:19