我使用ChromiumWebBrowser
将可能包含图像的本地html页面转换为PDF,以便在kiosk打印机上打印出来。PDF的尺寸应该是80毫米x 200毫米。以下是到目前为止的代码:
using (var browser = new ChromiumWebBrowser(url, browserSettings))
{
if (zoomLevel > 0)
{
browser.FrameLoadStart += (s, argsi) =>
{
var b = (ChromiumWebBrowser)s;
if (argsi.Frame.IsMain)
{
b.SetZoomLevel(zoomLevel);
}
};
}
await browser.WaitForInitialLoadAsync();
var contentSize = await browser.GetContentSizeAsync();
var viewport = new Viewport
{
Height = contentSize.Height,
Width = contentSize.Width,
Scale = 1.0
};
var printSettings = new PdfPrintSettings();
printSettings.PageWidth = 80000; // 80mm
printSettings.PageHeight = 200000; // 200mm
printSettings.BackgroundsEnabled = true;
await browser.PrintToPdfAsync("D:\\chromium_pdf.pdf", printSettings);
}
如果html页面只包含文本,它将被完美地转换。此外,如果它的图像适合于指定的打印宽度和高度,它可以很好地转换。当html中包含大型图像时,就会出现此问题。这会导致部分图像从右边突出出来。
当在普通浏览器中手动打印到PDF时,显示的弹出窗口有一个勾选框,表示“适合可打印区域”,该框缩小整个页面以适应整个图像。我想通过代码来模拟。
在PdfPrintSettings
类中,有一个名为ScaleFactor
的属性。当我将此从100%更改为50%时,图像在创建的PDF页面中非常适合。但是,这个50%的值是任意的,我想根据图像进行缩放。
我试图更改视口宽度和高度或浏览器缩放级别,但这不影响打印PDF。
我也不想截图PDF,因为这会影响打印质量;打印文本要清楚得多。
如何使用来自ChromiumWebBrowser的CefSharp来缩放页面以适应PDF页面?或者我怎样才能弄清楚ScaleFactor
应该是什么?
下面是生成的PDF的第一页和第二页的截图:
发布于 2022-11-05 01:44:23
PrintToPdfAsync使用与https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF相同的代码路径。
没有对适合页面的具体支持。在铬添加支持之前,不会有内置的选项。
可能需要考虑的备选方案:
rules
。
https://stackoverflow.com/questions/74315859
复制相似问题