2008-11-06 2 views
14

Я создал PDF-файл с помощью iTextSharp, и я могу его очень хорошо просмотреть в ASP.Net, но мне нужно отправить его прямо на принтер без предварительного просмотра. Я хочу, чтобы пользователь нажимал кнопку печати и автоматически печатал документ.Печать PDF из 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

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

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

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

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

Кроме того, попробуйте этот перл:

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

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

Поиск СМИ = "распечатать", чтобы узнать больше.

+0

Я считаю этот подход печатает пустую страницу на IE8. – 2010-08-03 10:51:36

0

Вы можете вставить 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

5

Наконец я сделал это, но я должен был использовать 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 мне нужно изучить. Thnx.

1

Это немного сложнее, если вы используете 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"; 
Смежные вопросы