iTextSharp PDF打印

我正在尝试创建一个方法,将PDF文件直接发送到我的打印机(导致打印对话框出现)。

下面是我一直在研究的代码 – 大部分都在这里的论坛中找到 。 如果我使用iTextSharp创建一个新的PDF文档,它工作正常,但是当我尝试将一些JavaScript注入现有文件时,我在调用print()方法时遇到exception

对象不支持属性或方法’print’

  function load() { try { var x = document.getElementById("frame1"); x.print(); } catch (err) { } }   

.CS文件

 using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; public partial class Print : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { SetPDF(File.ReadAllBytes("C:\\1686850.pdf"), "C:\\1686850_1.pdf"); //test files } private void SetPDF(byte[] file, string outputPath) { PdfReader reader = new PdfReader(file); int pageCount = reader.NumberOfPages; Rectangle pageSize = reader.GetPageSize(1); Document pdf = new Document(pageSize); PdfWriter writer = PdfWriter.GetInstance(pdf, new FileStream(outputPath, FileMode.Create)); pdf.Open(); //This action leads directly to printer dialogue PdfAction jAction = PdfAction.JavaScript("this.print(true);\r", writer); writer.AddJavaScript(jAction); //Omitting this loop and simply adding some text to the file produces the behavior I want. for (int i = 0; i < pageCount; i++) { pdf.NewPage(); PdfImportedPage page = writer.GetImportedPage(reader, i + 1); writer.DirectContent.AddTemplate(page, 0, 0); } pdf.Close(); //Open the pdf in the frame frame1.Attributes["src"] = outputPath; } } 

我在这里找到了一种方法: http : //wskidmore.com/2011/03/pdf-initial-view-settings-itextsharp/

基于此,我写了这段代码:

 private void PrintMenu() { ... var notUriPath = Server.MapPath("~/" + filePathName); var doc = new Document(); var reader = new PdfReader(notUriPath); using (var memoryStream = new MemoryStream()) { var writer = PdfWriter.GetInstance(doc, memoryStream); doc.Open(); // this action leads directly to printer dialogue var jAction = PdfAction.JavaScript("this.print(true);\r", writer); writer.AddJavaScript(jAction); var cb = writer.DirectContent; doc.AddDocListener(writer); for (var p = 1; p <= reader.NumberOfPages; p++) { doc.SetPageSize(reader.GetPageSize(p)); doc.NewPage(); var page = writer.GetImportedPage(reader, p); var rot = reader.GetPageRotation(p); if (rot == 90 || rot == 270) cb.AddTemplate(page, 0, -1.0F, 1.0F, 0, 0, reader.GetPageSizeWithRotation(p).Height); else cb.AddTemplate(page, 1.0F, 0, 0, 1.0F, 0, 0); } reader.Close(); doc.Close(); File.WriteAllBytes(notUriPath, memoryStream.ToArray()); } theIframeForPrint.Attributes.Add("src", fullFilePath); } 

我希望它有所帮助!

您想要将Javascript添加到PDF以打开打印对话框,而不是网页(除非您确实需要网页打印对话框,而不是PDF打印对话框)。 我以前做过这个,但没有使用iTextSharp; 但是快速谷歌搜索应该告诉你如何使用iTextSharp添加Javascript来打开打印对话框。