Reputation: 2070
I have a button in ASP.NET that when its clicked it gets a rdlc file and generates a PDF file with a print dialog screen. What I want is to print it directly without the print dialog, I know it can be done with Javascript but I dont have any idea how to do this in javascript.
<iframe id="frmPrint" name="IframeName" width="500" height="200" runat="server" style="display: none"></iframe>
Code in 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";
}
Upvotes: 2
Views: 5978
Reputation: 12355
I think that a generic solution working for every browser is very difficult to implement, but there are some browser-specific workarounds that may work.
For example in Firefox you can activate silent printing following these steps:
In Internet Explorer you can use this VBScript sub:
<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>
Then you can print via Javascript using:
window.print();
Upvotes: 1
Reputation: 2639
Like Steven V said, JavaScript on it`s own will never ever print without a dialog box. Can you imagine your creepy printer suddenly printing strange pages all of the sudden?
I can suggest an alternative however. Since you are using ASP.NET why not use a third party PDF generator, generate a PDF file on the serverside, then ajax back a link to the user. User will see a button: "Get PDF," he will click on it and a link to real PDF appears! Voila!
PS: You can look at some third party pdf-generators here: How to create PDF in ASP.NET
Upvotes: 2