2013-08-06 2 views
1

У меня есть кнопка в ASP.NET, которая при нажатии на нее получает файл rdlc и создает файл PDF с диалоговым окном печати. Я хочу напечатать его напрямую без диалога печати, я знаю, что это можно сделать с помощью Javascript, но я не знаю, как это сделать в javascript.Печать PDF без диалогового окна печати в asp.net

<iframe id="frmPrint" name="IframeName" width="500" height="200" runat="server" style="display: none"></iframe> 

Код в aspx.cs

public void PrintTicket() 
    { 
     string[] streamids; 
     string reportType = "PDF"; 
     string mimeType; 
     string encoding; 
     //string fileNameExtension = "pdf"; 
     string extension; 

     LocalReport report = new LocalReport(); 
     //Displays ticket letter and number in ticket 
     report.ReportPath = "PrintTicket.rdlc"; 
     ReportParameter ticket_parameter = new ReportParameter(); 
     ticket_parameter.Name = "Ticket"; 
     ticket_parameter.Values.Add(TicketNo); 
     report.SetParameters(new ReportParameter[] { ticket_parameter }); 

     //Displays date and time in ticket 
     ReportParameter date = new ReportParameter(); 
     date.Name = "Date_Time"; 
     date.Values.Add(System.DateTime.Now.ToString()); 
     report.SetParameters(new ReportParameter[] { date }); 

     //Displays branch location in ticket 
     ReportParameter location_parameter = new ReportParameter(); 
     location_parameter.Name = "Location"; 
     location_parameter.Values.Add(location); 
     report.SetParameters(new ReportParameter[] { location_parameter }); 


     string deviceInfo = 
      "<DeviceInfo>" + 
      " <OutputFormat>EMF</OutputFormat>" + 
      " <PageWidth>8.5in</PageWidth>" + 
      " <PageHeight>11in</PageHeight>" + 
      " <MarginTop>0.10in</MarginTop>" + 
      " <MarginLeft>0.02in</MarginLeft>" + 
      " <MarginRight>0.25in</MarginRight>" + 
      " <MarginBottom>0.15in</MarginBottom>" + 
      "</DeviceInfo>"; 

     Warning[] warnings; 
     byte[] bytes = report.Render("PDF", deviceInfo, out mimeType, out encoding, out extension, out streamids, out warnings); 

     FileStream fs = new FileStream(HttpContext.Current.Server.MapPath("output2.pdf"), FileMode.Create); 
     fs.Write(bytes, 0, bytes.Length); 
     fs.Close(); 

     //Open existing PDF 
     Document document = new Document(PageSize.LETTER); 
     PdfReader reader = new PdfReader(HttpContext.Current.Server.MapPath("output2.pdf")); 
     //Getting a instance of new PDF writer 
     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(HttpContext.Current.Server.MapPath("Print.pdf"), FileMode.Create)); 
     document.Open(); 
     PdfContentByte cb = writer.DirectContent; 

     int i = 0; 
     int p = 0; 
     int n = reader.NumberOfPages; 
     iTextSharp.text.Rectangle psize = reader.GetPageSize(1); 

     float width = psize.Width; 
     float height = psize.Height; 

     //Add Page to new document 
     while (i < n) 
     { 
      document.NewPage(); 
      p++; 
      i++; 

      PdfImportedPage page1 = writer.GetImportedPage(reader, i); 
      cb.AddTemplate(page1, 0, 0); 
     } 

     //Attach javascript to the document 
     PdfAction jAction = PdfAction.JavaScript("this.print(true);\r", writer); 
     writer.AddJavaScript(jAction); 
     document.Close(); 

     //Attach pdf to the iframe 
     frmPrint.Attributes["src"] = "Print.pdf"; 
    } 
+1

Вы имеете в виду диалоговое окна системы печати? Это всегда будет использоваться с Javascript. Не могли бы вы представить, может ли кто-нибудь напечатать что-либо без подтверждения? –

+0

@StevenV Требование состоит в том, чтобы печатать без диалогового окна. – Apollo

+0

Я понимаю ваше требование. Это не произойдет с помощью Javascript. Вам потребуется прямой доступ к порту принтера на машине, с которой вы хотите печатать. Я вижу только, что это происходит из настольного приложения, которое вы написали и установили на машине, с которой вы хотите печатать. –

ответ

2

Как Стивен V сказал, JavaScript на `s собственный никогда не будет печатать без диалогового окна. Можете ли вы представить, что ваш жуткий принтер внезапно печатает странные страницы внезапно?

Предлагаю другую альтернативу. Поскольку вы используете ASP.NET, почему бы не использовать сторонний генератор PDF, сгенерируйте PDF-файл на сервере, а затем ajax верните ссылку на пользователя. Пользователь увидит кнопку «Получить PDF», он нажмет на нее и появится ссылка на настоящий PDF! Вуаля!

PS: Вы можете посмотреть на некоторых сторонних PDF-генераторы здесь: How to create PDF in ASP.NET

+0

У меня уже есть PDF, я хочу напечатать его wiotuh в диалоговом окне печати. ​​ – Apollo

+0

Как вы узнаете, на каком принтере печатать? Что делать, если у меня есть 4 принтера? Честно говоря, делать это в веб-приложении сложно, потому что браузеры отделяют веб от ОС очень хорошо. Вы уверены, что это требование для печати без диалога? – RealityDysfunction

+0

печатает по умолчанию. – Apollo

1

Я думаю, что общее решение работает для каждого браузера очень трудно реализовать, но есть некоторые браузера конкретных обходные пути, которые могут Работа.

Например, в Firefox можно активировать беззвучный печать следующие действия:

  1. В адресной строке введите о: конфигурации введите
  2. Щелкните правой кнопкой мыши на белом пространстве и выберите New> Boolean
  3. Создать новую строку с именем print.always_print_silent и установить его в Истинного

в Internet Explorer вы можете использовать этот VBScript суба:

<script language='VBScript'> 
Sub Print() 
     OLECMDID_PRINT = 6 
     OLECMDEXECOPT_DONTPROMPTUSER = 2 
     OLECMDEXECOPT_PROMPTUSER = 1 
     call WB.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,1) 
End Sub 
document.write "<object ID='WB' WIDTH=0 HEIGHT=0 CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>" 
</script> 

Затем вы можете напечатать с помощью Javascript с помощью:

window.print(); 
+0

Как это можно использовать? моя кнопка - кнопка asp – Apollo

+0

Вы можете использовать jQuery. Что-то вроде: $ ('# mybutton'). Click (function() {window.print();}); – RealityDysfunction

Смежные вопросы