首先,简要介绍一下最终目标:
我正在构建一个基于.NET Core的跨平台打印应用程序。该应用程序将能够使用自定义页面设置打印各种文件类型,例如页眉,页脚和页边距。一个主要功能是它支持多页向上打印(例如,一张横向并排呈现两张纵向页面的风景纸,称为“ 2up”)。
打印HTML很重要,不仅因为打印HTML,而且我想使用所有基于HTML的出色语法-在那里突出显示源代码。
我已经使用开放源.NET HTML渲染库进行了概念验证,但是它与现代HTML东西的HTML兼容性较差。
该库提供了一种度量将呈现的内容的方法,因此我计算了#页。
<header class="blueBg">
<div class="container">
<!-- navgation bar -->
<nav class="navigation">
<!-- Nav items -->
<a href="/" class="logo">
Logo
</a>
<ul class="nav-items">
<li>home</li>
<li>blog</li>
<li>products</li>
<li>clients</li>
<li>contact us</li>
</ul>
<a href="" class="get-started">get started</a>
</nav>
</div>
</header>
我的页面呈现代码如下:
SizeF size = HtmlRender.MeasureGdiPlus(g, html, containingSheet.GetPageWidth());
int numPages = (int)(size.Height / containingSheet.GetPageHeight());
我现在正在尝试使用CEF完成同一件事,因为我想要一个“真实的” HTML渲染器。
我发现大多数关于屏幕外的讨论都只是在谈论SizeF size = new SizeF(containingSheet.GetPageWidth(), containingSheet.GetPageHeight());
HtmlRender.RenderGdiPlus(g, html, PointF(0, 0), size );
等问题,而实际上并没有。
我找不到明显的方式来对CEF说“将页面1(定义为高度/宽度)渲染到此GDI +图形对象”,然后再“渲染页面2 ...”等...
我可能缺少明显的东西,但是我看不到CEF(或允许这样做的CEFsharp” API)。
请注意,我已经考虑过尝试使用PrintToPDF,然后解析生成的PDF,呈现每个页面。我认为这行得通,但似乎是一种疯狂的回旋方式。
人们可以请我指出正确的方向吗?