我有一个用HTML创建报告的程序。该HTML文件显示在TWebBrowser组件(Delphi)中,基本上使用以下代码打印页面:
WebBrowserComponent.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vIn, vOut) ;
报告需要与预先打印的表格相匹配。为了将值准确地放在正确的位置,我使用这样的CSS代码:
#date_of_invoice {
position: absolute;
left: 3mm;
top: 90mm;
width: 29mm;
height: 5mm;
text-align: center;
font-weight: bold;
}
这是一个有效的解决方案。任何希望使用此程序的新客户都可以聘请网页设计师并根据自己的需求自定义HTML模板。今天我收到了一条新请求,说一次应该打印多页。我可以通过添加:
来强制新页面<div style="page-break-after: always;">
content on page...
</div>
但是,当使用绝对位置时,page-break-after对绝对定位的元素没有影响。所以这里有一个问题:是否有可能以某种方式相对于当前页面的左上角定位元素?我知道HTML没有“当前页面”的概念。但由于我们有“page-break-after”CSS属性,我希望相对于当前页面可能存在类似于定位元素的东西。也许有一个技巧是在左上角放置一个小的不可见元素,并相对于那个不可见的参考点定位其他元素?
另一种选择是从头开始重新实现所有报告,并使用PDF而不是HTML。这将是一个非常糟糕的主意,因为已经有几个用HTML做的报告,我不想手工重新设计它们,然后我不想告诉我的客户他们将无法自定义将来的报告。