Печатает PDF при загрузке страницы - PullRequest
0 голосов
/ 14 ноября 2008

У меня есть этот код на моей странице aspx;

<a href="javascript:void(0);" onclick=<% Print(); %> title="Print listings">Print</a>

, которая представляет ссылку для распечатки списков в PDF, когда пользователь нажимает на нее; как вы можете заметить, скрипт вызывает функцию из-за кода.

Проблема в том, что когда я кодировал это, случается, что когда я перехожу на эту страницу, она печатает в pdf при загрузке, я думал, что он будет ждать щелчка, но вместо этого он выполняет печать.

В чем проблема? заранее спасибо.

PD. Я работаю с VS2005 и для создания PDF я использую iTextSharp.

Ответы [ 5 ]

1 голос
/ 14 ноября 2008

Вы хотите использовать HyperlinkControl и подключить обработчик события OnClick к своему коду за методом Print. Когда пользователь нажимает на ссылку, страница отправляется обратно, и возникает событие OnClick. Оттуда вы можете распечатать свой PDF.

В вашем примере функция Print () оценивается при загрузке страницы. Все, что находится в скобках <%%> и <% =%>, оценивается во время рендеринга.

Лучший способ сделать то, что вы хотите, это иметь на своей странице ссылку, которая перенаправляет на страницу ASHX, которая затем выводит PDF непосредственно в поток ответов. Там должно быть много примеров того, как это делается повсюду (Google Ashx). Ссылка будет выглядеть так:

<a href="PrintMyPdf.ashx?PageID=<%= CurrentPageId %>">Print</a>

Это передаст параметр "PageID" в ashx, из которого вы можете определить, какую страницу вы хотите распечатать. Синтаксис <% =%> оценивает выражение (в данном случае это свойство в вашем коде, но это может быть метод или форум) и вставляет результат в эту часть страницы.

Так что, если ваша собственность была:

protected int CurrentPageId { get { return 4; } }

На вашей странице будет написано следующее:

<a href="PrintMyPdf.ashx?PageID=4">Print</a>

Rob

1 голос
/ 14 ноября 2008
<a href="javascript:void(0);" onclick=<% Print(); %> title="Print listings">Print</a>

Вы не можете этого сделать. Я знаю, о чем ты думаешь, но это невозможно и довольно (извините) наивно.

nmiranda писал:

Проблема в том, что когда я закодировал это бывает, что когда я захожу на эту страницу печатает в pdf при загрузке, я думал, что будет ждать щелчка, но вместо этого он выполняет печать.

Это имеет абсолютный смысл. Что вам нужно сделать, так это поместить вызов функции Print () в другую веб-страницу и затем вызвать эту веб-страницу с помощью AJAX в вашем событии onclick .

0 голосов
/ 15 ноября 2008

Наконец я сделал это, я должен пояснить, что прежде всего я делал все свои отчеты, используя другую веб-страницу, в соответствии с полученными ответами, я понял, что мой подход к вызову отчета на той же странице, используя ссылку правильный.

Итак, я проанализировал предложение Роберта Вагнера и попробовал этот подход;

protected void btnPrint_Click(object sender, EventArgs e)
{
    ...
    string url = GetUrlWithParameters();

    string reportscript = "<script language='JavaScript'>" +
        "window.open('" + url + "', 'CustomPopUp', " +
        "'width=400, height=400, resizable=yes, scrollbars=yes')" +
        "</script>";

    Page.RegisterStartupScript("reportscript", reportscript);
    ...

В GetUrlWithParameters () я создаю и url вызываю ashx, где я создаю свой отчет, ashx получает различные параметры в зависимости от некоторых проблем, и это работало очень хорошо.

Он выполняет скрипт и показывает pdf в других окнах точно так, как мне нужно.

Thanx.

0 голосов
/ 14 ноября 2008

Вам просто нужна другая страница, которая выполняет печать документа PDF. Допустим, эта страница - printPDF.aspx

Вам просто нужно изменить ссылку на

<a href="printPDF.aspx" title="Print listings">Print</a>

Если вам нужно передать ему параметры, я бы изменил ссылку на

<a href="javascript:void(0);" onlick="javascript:GoToPrint();" title="Print listings">Print</a>

Сценарий:

<script>
    function GoToPrint()
    {
        window.location = 'printPDF.aspx?var1=x&var2=y';
    }
</script>
0 голосов
/ 14 ноября 2008

Трудно точно сказать, что происходит с вашим фрагментом кода, но я бы предположил, что вы выводите файл pdf в поток ответов как часть функции print (). Это отобразит pdf при загрузке, потому что код, стоящий позади, оценивается во время рендеринга (непосредственно перед отправкой кода в браузер), а не оценивается на клиенте.

Чтобы получить нужное поведение, лучше всего создать файл обработчика http (ashx), который будет принимать любые необходимые аргументы в качестве переменных запроса в URL-адресе, а затем выводит pdf в поток.

Затем вы можете просто создать ссылку на файл ashx с правильными аргументами для отображения документа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...