Скрыть верхний и нижний колонтитулы при печати веб-элемента управления с помощью ASP.NET

Как я могу скрыть заголовок, например «Страница 1 из 1», и нижний колонтитул (url) при печати веб-консоли в ASP.NET?

В настоящее время я делаю это, открывая новую страницу при нажатии кнопки «Печать» и в ней

protected void Page_Load(object sender, EventArgs e)
{
    if( null != Session["Control"] )
    {
        Control ctrl = ( Control )Session["Control"];
        PrintManager.PrintWebControl( ctrl );
        Session["Control"] = null;
    }
}

Это напечатает верхний и нижний колонтитулы. Как этого избежать?


person Sauron    schedule 17.06.2009    source источник


Ответы (4)


Этот параметр настраивается пользователем в своем браузере. Их невозможно отключить из кода. Лучше всего включить инструкции о том, как настроить/отключить параметры.

См. пример здесь: http://www.xheo.com/products/sps/default.aspx?print=true

person Paul Alexander    schedule 17.06.2009

Вы должны использовать стили CSS и указать, что они применяются к типу носителя для печати. См. эту статью для помощи; http://www.cantoni.org/articles/printstyle

В основном создайте отдельную таблицу стилей только для стилей печати. Если вы хотите скрыть что-то на странице, используйте { display:none } в качестве одного из атрибутов стиля этого элемента. Затем свяжите свою таблицу стилей в элементе HEAD;

<link href="print.css" media="print" type="text/css" rel="stylesheet" />
person Dave Anderson    schedule 17.06.2009
comment
Это определенно помогает при печати, но все же не устраняет настройки, которые пользователь выбрал в своем браузере... по крайней мере, не для IE. - person Paul Alexander; 17.06.2009
comment
Верно, я немного неправильно понял вопрос, я вижу, они имеют в виду, что фактические браузеры печатают верхний и нижний колонтитулы. Я предполагаю, что Firefox может где-то иметь эту возможность, но IE слишком закрыт. - person Dave Anderson; 17.06.2009

Для этого мы используем класс печати, подобный этому

public static void PrintWebControl(Control ctrl)
{
    PrintWebControl(ctrl, string.Empty);
}

public static void PrintWebControl(Control ctrl, string Script)
{
    StringWriter stringWrite = new StringWriter();
    System.Web.UI.HtmlTextWriter htmlWrite = new System.Web.UI.HtmlTextWriter(stringWrite);
    if (ctrl is WebControl)
    {
        Unit w = new Unit(100, UnitType.Percentage); ((WebControl)ctrl).Width = w;
    }
    Page pg = new Page();
    pg.EnableEventValidation = false;
    if (Script != string.Empty)
    {
        pg.ClientScript.RegisterStartupScript(pg.GetType(), "PrintJavaScript", Script);
    }
    HtmlForm frm = new HtmlForm();

    pg.Controls.Add(frm);
    // done changes on below 1 line for unassigned header URL //
    frm.ResolveUrl("");
    frm.Attributes.Add("runat", "server");
    frm.Controls.Add(ctrl);

    pg.DesignerInitialize();

    pg.RenderControl(htmlWrite);
    string strHTML = stringWrite.ToString();
    HttpContext.Current.Response.Clear();        
    HttpContext.Current.Response.Write(strHTML);
    HttpContext.Current.Response.Write("<script>window.print();</script>");
    HttpContext.Current.Response.End();
}

здесь просто измените строку в свойстве формы и установите

frm.ResolveUrl("");

поэтому URl не виден, когда страница печатается. Я использую ее успешно.

person Ram    schedule 30.07.2011