От этого сайта http://www.ussbd.com/printhtm.html
using HtmlPrinter;
hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintUrlFromMemory(txtUrl.Text);
Теперь Вы добавляете код в своем проекте распечатать страницу HTML из ее исходного текста:
HtmlPrinter.HtmlPrinter hpObj=new HtmlPrinter.HtmlPrinter();
hpObj.PrintHtml(txtString.Text, true);
, Если Вы хотите распечатать без диалогового окна печати затем, используют следующую строку:
hpObj.PrintHtml(txtString.Text, false);
OLECMDEXECOPT_PROMPTUSER
, кажется, вынуждает подсказку пользователю выбрать принтер и весь связанный материал, который я вполне уверен, не позволяется от сервиса. Кто-то может проверить это?
Вот еще один способ печати без диалогового окна печати. Вы создаете объект PrintDialog, инициализируете его, а затем вызываете метод Print ().
Функция ниже используется для печати небольшой этикетки со штрих-кодом 2 "x0,75". Вам нужно будет найти способ получить объект Document
из файла html.
public void PrintToPrinter(string printerName)
{
PrintDialog pd = new PrintDialog();
pd.Document = userControl11.PrintDoc; // <--- Update this line with your doc
pd.PrinterSettings.PrinterName = printerName;
try
{
pd.Document.DocumentName = "My Label";
pd.Document.DefaultPageSettings.PaperSize = new System.Drawing.Printing.PaperSize("2-.75", 200, 75);
pd.Document.DefaultPageSettings.Margins = new System.Drawing.Printing.Margins(0, 0, 0, 0);
//pd.PrinterSettings.Copies = (short)mNumCopies;
pd.Document.PrinterSettings.Copies = (short) mNumCopies;
pd.Document.Print();
}
catch
{
MessageBox.Show("INVALID PRINTER SPECIFIED");
}
}
Вы можете использовать класс PrintDocument в пространстве имен System.Drawing.Printing, чтобы дать вам больше контроля над печатью, см. здесь для получения дополнительной информации.
Например, вы можете сделать следующее:
using (PrintDocument doc = new PrintDocument())
{
doc.PrintPage += this.Doc_PrintPage;
doc.DefaultPageSettings.Landscape = true;
doc.DocumentName = fileNameOfYourDocument;
doc.Print();
}
Затем вызывается функция для каждой страницы, которая будет напечатана, и вам будет предоставлена графическая область для рисования в
private void Doc_PrintPage(object sender, PrintPageEventArgs ev)
{
....
ev.Graphics.DrawImage(image, x, y, newWidth, newHeight);
}
. Это требует от вас обработки фактического рисования текста / изображения на странице, см. здесь для получения дополнительной информации.
Во-первых, вот код:
using System.Reflection;
using System.Threading;
using SHDocVw;
namespace HTMLPrinting
{
public class HTMLPrinter
{
private bool documentLoaded;
private bool documentPrinted;
private void ie_DocumentComplete(object pDisp, ref object URL)
{
documentLoaded = true;
}
private void ie_PrintTemplateTeardown(object pDisp)
{
documentPrinted = true;
}
public void Print(string htmlFilename)
{
documentLoaded = false;
documentPrinted = false;
InternetExplorer ie = new InternetExplorerClass();
ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
ie.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown);
object missing = Missing.Value;
ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID_PRINT) != OLECMDF.OLECMDF_ENABLED)
Thread.Sleep(100);
ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
while (!documentPrinted)
Thread.Sleep(100);
ie.DocumentComplete -= ie_DocumentComplete;
ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown;
ie.Quit();
}
}
}
OLECMDID_PRINT
вместе с опцией OLECMDEXECOPT_DONTPROMPTUSER
для автоматической печати без вмешательства пользователя. Важное примечание: это будет печататься на принтере по умолчанию. Чтобы указать принтер, вам нужно будет установить принтер по умолчанию (в коде вы можете вызвать SetDefaultPrinter () ). Два последних параметра допускают необязательные параметры ввода и вывода.