2008-11-06 7 views
14

Ich habe ein PDF mit iTextSharp generiert und ich kann es sehr gut in ASP.Net Vorschau, aber ich muss es direkt an den Drucker ohne Vorschau senden. Ich möchte, dass der Benutzer auf die Druckschaltfläche klickt und das Dokument automatisch druckt.PDF von ASP.Net ohne Vorschau drucken

Ich weiß, dass eine Seite direkt an den Drucker gesendet werden kann mit dem Javascript window.print(), aber ich weiß nicht, wie man es für ein PDF macht.

Edit: es ist nicht eingebettet, ich erzeuge es so;

   ... 
       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"); 
       ... 

Und hier bin ich.

Antwort

1

Ist das PDF in die Seite mit embedd-Tag eingebettet oder nur in einem Frame geöffnet oder wie zeigen Sie es?

Wenn es eingebettet ist, nur sicherstellen, dass das Objekt ausgewählt ist, und dann einen Druck().

Holen Sie sich die Referenz zum eingebetteten Dokument.

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

Versuchen Sie auch, dieses Juwel:

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

ich es haben getestet, aber was ich habe darüber gelesen, kann es auf diese Weise verwendet werden, um die mypdf.pdf zu lassen gedruckt werden statt Seiteninhalt, unabhängig davon, mit welcher Methode Sie die Seite drucken.

Suchen Sie nach media = "print", um mehr zu sehen.

+0

Ich finde diese Methode eine leere Seite auf IE8 druckt. –

+0

Gute Idee, aber ich konnte es nicht zur Arbeit bringen. Chrome und FF ignorieren es einfach, wo IE9 eine leere Seite gibt. –

0

Sie können JavaScript in die PDF-Datei einbetten, so dass der Benutzer einen Druckdialog erhält, sobald der Browser die PDF-Datei lädt.

ich iTextSharp bin nicht sicher, aber das Javascript, das ich benutze, ist

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

Für iTextSharp Besuche http://itextsharp.sourceforge.net/examples/Chap1106.cs

5

Schließlich ich es geschafft, aber ich hatte einen IFRAME zu verwenden, ich Ich habe einen IFrame im aspx definiert und die Eigenschaft src nicht gesetzt. In der cs-Datei habe ich die PDF-Datei erstellt und die src-Eigenschaft des iFrames als generierten PDF-Dateinamen festgelegt.

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"; 

Und das machte den Trick, aber ich denke, dass ich Ihre Lösung Stefan implementieren soll, das Problem ist, dass ich bin neu zu asp.net und Javascript und wenn ich keinen vollständigen Quellcode Ich konnte deinen Vorschlag nicht programmieren, aber zumindest ist der erste Schritt, ich war sehr überrascht, wie viel Code in HTML und Javascript ich lernen muss. Thnx.

1

Es ist ein wenig komplizierter, wenn Sie PDFsharp verwenden aber ganz machbar

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";