Я создал 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");
...
И вот я здесь.





PDF-файл встроен в страницу с помощью embedd-tag или просто открыт во фрейме, или как вы его показываете?
Если он встроен, просто убедитесь, что объект выбран, а затем выполните print ().
Получите ссылку на встроенный документ.
var x = document.getElementById("mypdfembeddobject");
x.click();
x.setActive();
x.focus();
x.print();
Также попробуйте этот драгоценный камень:
<link ref = "mypdf" media = "print" href = "mypdf.pdf">
Я не тестировал его, но то, что я читал об этом, можно использовать таким образом, чтобы позволить напечатать mypdf.pdf вместо содержимого страницы, независимо от того, какой метод вы используете для печати страницы.
Найдите media = "print", чтобы узнать больше.
Хорошая идея, но я не мог заставить ее работать. Chrome и FF просто игнорируют это, а IE9 дает пустую страницу.
Вы можете встроить 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
Наконец, я сделал это, но мне пришлось использовать 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";
И это сделало трюк, однако, я думаю, что я должен реализовать ваше решение, Стефан, проблема в том, что я новичок в asp.net и javascript, и если у меня нет полного исходного кода, я не смог бы закодировать ваше предложение, но по крайней мере, это первый шаг, я был очень удивлен, сколько кода в html и javascript мне нужно выучить. Спасибо.
Это немного сложнее, если вы используете 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";
Я считаю, что этот подход печатает пустую страницу в IE8.