2008-11-06 36 views
14

Tôi đã tạo một pdf bằng cách sử dụng iTextSharp và tôi có thể xem trước nó rất tốt trong ASP.Net nhưng tôi cần gửi trực tiếp đến máy in mà không cần xem trước. Tôi muốn người dùng nhấp vào nút in và tự động in tài liệu.In PDF từ ASP.Net mà không cần xem trước

Tôi biết rằng một trang có thể được gửi trực tiếp tới máy in bằng cách sử dụng cửa sổ javascript.print() nhưng tôi không biết cách tạo nó cho một tệp PDF.

Chỉnh sửa: nó không được nhúng, tôi tạo ra nó như thế này;

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

Và tôi ở đây.

Trả lời

1

pdf có được nhúng trong trang bằng thẻ nhúng hoặc chỉ được mở trong một khung hoặc bạn đang hiển thị nó như thế nào?

Nếu được nhúng, chỉ cần đảm bảo rằng đối tượng được chọn và sau đó thực hiện in().

Lấy ref tới tài liệu được nhúng.

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

Ngoài ra, cố gắng đá quý này:

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

tôi havent thử nghiệm nó, nhưng những gì tôi đã đọc về nó, nó có thể được sử dụng theo cách này để cho các mypdf.pdf được in thay vì nội dung trang bất kỳ phương thức nào bạn đang sử dụng để in trang.

Tìm kiếm phương tiện = "in" để xem thêm.

+0

tôi tìm cách tiếp cận này in một trang trống trên IE8. –

+0

Ý tưởng hay, nhưng tôi không thể làm cho nó hoạt động. Chrome và FF chỉ bỏ qua nó, trong đó IE9 đưa ra một trang trống. –

0

Bạn có thể nhúng javascript vào pdf, để người dùng nhận được hộp thoại in ngay sau khi trình duyệt của họ tải bản pdf.

Tôi không chắc chắn về iTextSharp, nhưng javascript mà tôi sử dụng là

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

Đối với iTextSharp, hãy kiểm tra http://itextsharp.sourceforge.net/examples/Chap1106.cs

5

Cuối cùng tôi đã làm cho nó, nhưng tôi đã phải sử dụng một IFRAME, tôi xác định một IFrame trong aspx và không thiết lập thuộc tính src, trong tệp cs tôi đã tạo tệp pdf và đặt thuộc tính src của iFrame làm tên tệp pdf được tạo, như thế này;

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

Và điều đó thực hiện thủ thuật, tuy nhiên, tôi nghĩ rằng tôi nên triển khai giải pháp của bạn Stefan, vấn đề là tôi mới tham gia asp.net và javascript và nếu tôi không có mã nguồn hoàn chỉnh Tôi không thể mã gợi ý của bạn nhưng ít nhất là bước đầu tiên, tôi đã rất ngạc nhiên bao nhiêu mã trong html và javascript tôi cần phải tìm hiểu. Thnx.

1

Đó là một chút khó khăn hơn nếu bạn đang sử dụng PDFSharp nhưng khá doable

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"; 
Các vấn đề liên quan