【发布时间】:2020-03-21 19:52:01
【问题描述】:
我想在我的 html 文档中添加透明水印背景图像并打印出来。为此,我使用 svc data uri 创建了以下背景图片:
body {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg%20xmlns%20%3D%20%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20version%20%3D%20%271.1%27%20height%20%3D%20%27100px%27%20width%20%3D%20%27100px%27%3E%3Ctext%20transform%20%3D%20%27translate(20%2C%20100)%20rotate(-45)%27%20fill%20%3D%20%27rgb(245%2C45%2C45)%27%20font-size%20%3D%20%2720%27%3E%20watermark%20%3C%2Ftext%3E%3C%2Fsvg%3E");
}
要使用 WebBrowser 控件打印背景图像,我尝试了这篇文章:How to print background image and styles in WebBrowser control。但由于 IE 的限制,它似乎没有打印我的 data-uri svc 图像。
如何在 WebBrowser 控件中打印水印背景图片?
这是我尝试过的替代解决方案。
我尝试在网络浏览器中静默打印转换为图像的 HTML,但它打印的是空白页面。为此,我使用了 HTMLRenderer 是一个 nuget 包。参考这个answer。
public MemoryStream ConvertHtmlToImage(string html)
{
Bitmap m_Bitmap = new Bitmap("image");
HtmlRender.RenderGdiPlus(Graphics.FromImage(m_Bitmap),
html);
MemoryStream memoryStream = new MemoryStream();
m_Bitmap.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png);
return memoryStream;
}
MemoryStream HtmlImage = ConvertHtmlToImage(processedDocTest);
webBrowserTest = new System.Windows.Forms.WebBrowser();
webBrowserTest.DocumentStream = HtmlImage; //Assign the image as a stream
private void btn_print_test_Click(object sender, EventArgs e)
{
if (Common.TestPrinter != null && !string.IsNullOrEmpty(Common.TestPrinter))
{
SetupPage();
SetDefaultPrinter(Common.TestPrinter);
}
PrinterSettings settings = new PrinterSettings();
defaultPrinter = settings.PrinterName;
if (Common.TestPrinter == defaultPrinter)
{
PrintTest();
}
else
{
ResetSetupPage();
Environment.Exit(1);
}
}
【问题讨论】:
-
您用来打印图像的代码在哪里?我只看到 PrintTest(),我假设这是打印测试页(可能是空的)?
-
链接的帖子显示了如何使用 WebBropwser 控件成功地进行静默打印。如果您加载 bing.com(包含背景图像),链接帖子的 cmets 中已经讨论过它,您将看到它按预期工作。它是链接问题的后续行动吗?
-
@RezaAghaei 这是一个后续问题,在我意识到 IE 仅限打印
SVG作为背景图像后,我决定将整个 html 文档转换为图像以静默打印,以便我可以克服这个限制。因此,对于图书馆,我编辑了问题以引用它,并且 U 在以前与此上下文相关的问题中帮助了我很多(我非常感激),所以 html 是一个简单的 html 文档,包含svg作为背景对于相关问题中的正文(水印),我将整个文档转换为图像,以便我可以打印它。
标签: c# html .net winforms webbrowser-control