提问人:Majd Odeh 提问时间:11/4/2022 更新时间:11/5/2022 访问量:1422
C# - 使用 CefSharp Chromium Web 浏览器打印到 PDF 并适合页面
C# - Using CefSharp Chromium Web Browser to Print To PDF and Fit to Page
问:
我用于将可能包含图像的本地 html 页面转换为 PDF,以便在自助服务终端打印机上打印。PDF 的尺寸应为 80 毫米 x 200 毫米。以下是到目前为止的代码:ChromiumWebBrowser
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 时,显示的弹出窗口有一个“适合可打印区域”的复选框,可缩小整个页面以适合整个图像。我想通过代码来模拟它。
在类中,有一个名为 的属性。当我将其从 100% 更改为 50% 时,图像非常适合创建的 PDF 页面。但是,这个 50% 的值是任意的,我想根据图像对其进行缩放。PdfPrintSettings
ScaleFactor
我尝试更改视口宽度和高度或浏览器缩放级别,但这不会影响打印的 PDF。
我也不想截取 PDF 的屏幕截图,因为这会影响打印质量;打印文本要清晰得多。
如何使用 CefSharp 的 ChromiumWebBrowser 缩放页面以适应 PDF 页面?或者我怎样才能弄清楚应该是什么?ScaleFactor
以下是生成的 PDF 的第一页和第二页的屏幕截图:
答:
PrintToPdfAsync 使用与 https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-printToPDF 相同的代码路径
没有对适合页面的特定支持。在 chromium 添加支持之前,不会有内置选项。
可能要考虑的选项:
- 添加一些 css 媒体打印规则
- 根据内容大小计算比例。
评论