Печать PDF из ASP.Net без предварительного просмотра

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

Я знаю, что страница может быть отправлена ​​непосредственно на принтер с помощью javascript window.print(), но я не знаю, как сделать это для PDF.

Изменить: он не встроен, я генерирую его следующим образом:

                ...
                FileStream stream = new FileStream(Request.PhysicalApplicationPath + "~1.pdf", FileMode.Create);
                Document pdf = new Document(PageSize.LETTER);
                PdfWriter writer = PdfWriter.GetInstance(pdf, stream);
                pdf.Open();
                pdf.Add(new Paragraph(member.ToString()));
                pdf.Close();

                Response.Redirect("~1.pdf");
                ...

И вот я.

Ответ 1

Наконец, я сделал это, но мне пришлось использовать IFRAME, я определил IFrame в aspx и не задал свойство src, в файле cs, который я создал, сгенерировал файл pdf и установил свойство src для iFrame как созданное имя файла PDF, например:

Document pdf = new Document(PageSize.LETTER);
PdfWriter writer = PdfWriter.GetInstance(pdf, 
new FileStream(Request.PhysicalApplicationPath + "~1.pdf", FileMode.Create));
pdf.Open();

//This action leads directly to printer dialogue
PdfAction jAction = PdfAction.JavaScript("this.print(true);\r", writer);
writer.AddJavaScript(jAction);

pdf.Add(new Paragraph("My first PDF on line"));
pdf.Close();

//Open the pdf in the frame
frame1.Attributes["src"] = "~1.pdf";

И это сделало трюк, однако, я думаю, что я должен реализовать свое решение Stefan, проблема в том, что я новичок в asp.net и javascript, и если у меня нет полного исходного кода, я бы не смог его кодировать ваше предложение, но, по крайней мере, это первый шаг, я был очень удивлен, сколько кода в html и javascript мне нужно изучить. Thnx.

Ответ 2

Встраивается ли pdf файл в страницу с вложенным тегом или просто открывается в кадре или как вы его показываете?

Если его встроено, просто убедитесь, что объект выбран, а затем выполните печать().

Получить ссылку на встроенный документ.

var x = document.getElementById("mypdfembeddobject");  
x.click();
x.setActive();
x.focus();
x.print();

Ответ 3

Это немного сложнее, если вы используете pdfsharp, но вполне выполнимы

PdfDocument document = new PdfDocument();
PdfPage page = document.AddPage(); 
XGraphics gfx = XGraphics.FromPdfPage(page); 
XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic); 
// Draw the text 
gfx.DrawString("Hello, World!", font, XBrushes.Black, 
    new XRect(0, 0, page.Width, page.Height), 
    XStringFormats.Center); 

// real stuff starts here

// current version of pdfsharp doesn't support actions 
// http://www.pdfsharp.net/wiki/WorkOnPdfObjects-sample.ashx
// so we got to get close to the metal see chapter 12.6.4 of 
// http://partners.adobe.com/public/developer/pdf/index_reference.html
PdfDictionary dict = new PdfDictionary(document); // 
dict.Elements["/S"] = new PdfName("/JavaScript"); // 
dict.Elements["/JS"] = new PdfString("this.print(true);\r");
document.Internals.AddObject(dict);
document.Internals.Catalog.Elements["/OpenAction"] = 
    PdfInternals.GetReference(dict);
document.Save(Server.MapPath("2.pdf"));
frame1.Attributes["src"] = "2.pdf"; 

Ответ 4

Кроме того, попробуйте этот камень:

<link ref="mypdf" media="print" href="mypdf.pdf">

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

Найдите media = "print", чтобы узнать больше.

Ответ 5

Вы можете встраивать javascript в pdf, так что пользователь получает диалог печати, как только браузер загружает PDF.

Я не уверен в iTextSharp, но javascript, который я использую,

var pp = this.getPrintParams();
pp.interactive = pp.constants.interactionLevel.automatic;
this.print(pp);

Для iTextSharp проверьте http://itextsharp.sourceforge.net/examples/Chap1106.cs