打印一页WebBrowser

时间:2013-01-23 17:12:43

标签: vb.net winforms automation webbrowser-control printdocument

我正在尝试自动打印Intranet网站。由于这是一个应用程序,将放在特定用户的计算机上,它将根据需要运行,我希望它尽可能无中断(换句话说,不为每个页面启动IE) )。问题是,我需要打印网站的第一页,然后再次打印整个网站,这将产生第一页两次。这样做的最佳方式是什么?

我没有问题让它遍历需要打印的页面,也没有问题用webbrowser打开页面。但是,我确定了指定打印范围的问题。

我也试过PrintDocument,但无法弄清楚如何在表单中打开它。

感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

要下载pdf文件,请使用iTextSharp尝试此解决方案: ITextSharp HTML to PDF?

如果要直接保存到文件

,则进行一次替换
private MemoryStream createPDF(string html)
{
    MemoryStream msOutput = new MemoryStream();
    TextReader reader = new StringReader(html);

    // step 1: creation of a document-object
    Document document = new Document(PageSize.A4, 30, 30, 30, 30);            

    // step 2:
    // we create a writer that listens to the document
    // and directs a XML-stream to a file
    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream("c:\\my.pdf", FileMode.Create));

    // step 3: we create a worker parse the document
    HTMLWorker worker = new HTMLWorker(document);

    // step 4: we open document and start the worker on the document
    document.Open();
    worker.StartDocument();

    // step 5: parse the html into the document
    worker.Parse(reader);

    // step 6: close the document and the worker
    worker.EndDocument();
    worker.Close();
    document.Close();

    return msOutput;
}

设置完PDF后,尝试使用ghostscript打印一页: Print existing PDF (or other files) in C#

如果启动shell执行该进程,则可以使用命令行参数:

gsprint "filename.pdf" -from 1 - to 1

或者,WebBrowser可以打印整页:http://msdn.microsoft.com/en-us/library/b0wes9a3.aspx

我找不到任何引用WebBrowser本身可以在没有打印对话框的情况下打印“从页面X到Y”的内容。

由于我遇到了类似的问题,这是另一种解决方案:

这个开源项目将HTML文档转换为类似于iTextSharp(http://code.google.com/p/wkhtmltopdf/)的PDF文档。我们最终没有使用iTextSharp,因为我们想要打印的网站布局方式存在一些格式问题。我们发送命令行参数以将使用webclient下载的html转换为pdf文件。

WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultNetworkCredentials;
string htmlText = wc.DownloadString("http://websitehere.com);

然后,在转到pdf后,您只需打印文件:

Process p = new Process();
p.StartInfo.FileName = string.Format("{0}.pdf", fileLocation);
p.StartInfo.Verb = "Print";
p.Start();
p.WaitForExit();

(为C#道歉,我比VB.NET更熟悉它,虽然它应该是一个简单的转换)