Как печатать из ASP.NET CrystalReport на клиентском принтере

Как распечатать отчет из CrystalReport (ASP.NET) на клиентском принтере.


person Viral    schedule 23.09.2014    source источник
comment
Вы никогда не сможете печатать на клиентском принтере. Это не принадлежит вам. пользователь может печатать на своем собственном принтере.   -  person John Saunders    schedule 23.09.2014
comment
Не совсем так. Печатать на сервер легко, используя PrintToPrinter или подобное, но печатать на клиенте из собственного кода не так просто.   -  person reckface    schedule 23.09.2014


Ответы (1)


У вас есть два варианта:

  1. Установите для параметра PrintMode значение ActiveX или PDF и оставьте панель инструментов средства просмотра отчетов Crystal для управления этим параметром.
  2. Создайте PDF-файл в iFrame и запустите команду печати с помощью JavaScript.

Чтобы упростить то, что пользователи должны были установить на каждом клиенте, я выбрал скрытый вариант PDF и отдельную кнопку для печати на клиенте.

На странице aspx у меня есть литерал asp, который я заполняю встроенным объектом pdf размером 1px x 1px, поэтому он не виден пользователю. Затем при загрузке страницы вызовите метод printToPrinter.

// On server side
// Export to PDF
Guid imageGuid = Guid.NewGuid();
string _pdfName = String.Format(@"{0}{1}{2}.pdf", _pdfPath, _reportName, imageGuid);
// expport to unique filename
// ...
// Display the pdf object 
_sb.AppendFormat("<object ID=\"pdfObject\" type=\"application/pdf\" data=\"{0}\" src=\"{0}\" style=\"width: {1}; height: {2}; ", _pdf2Name, _width, _height);
_sb.AppendLine("z-index:1; display: block; border: 1px solid #cccccc; top: 0; left: 0; position: absolute;-+ \">");
_sb.Append("</object>");
pdfLiteral.Text = _sb.ToString();
pdfLiteral.Visible = true;

// javascript
// on document load call the printWithDialog function
 var code = function(){
 try
     {
        var pdf = $get('pdfObject');
        if (pdf == null)
            return;
        try {
            pdf.printWithDialog();
        }
        catch (err) {
            alert('Please Install Adobe Acrobat reader to use this feature');
        } 
     }
     catch(err)
     {
     }
  };
window.setTimeout(code, 1000);
person reckface    schedule 23.09.2014