2014-11-05 91 views
1

我的目標是在客戶端計算機上打印RDLC報告而無需預覽。我無法使用ReportViewer打印按鈕,因爲它需要安裝ActiveX對象,並且沒有相應的權限。因此,我使用ITextSharp從呈現的LocalReport返回的字節數組中創建一個PDF,並添加一個用於打印的JavaScript。打印PDF使用itextsharp創建

在調試期間,我可以看到PDF生成並有2頁,並且一切看起來都很好。我沒有收到任何錯誤,功能退出正常,但不打印。我做錯了什麼,或者我錯過了什麼?

這是我的代碼:

string jsPrint = "var pp = this.getPrintParams();pp.interactive= pp.constants.interactionLevel.silent;this.print(pp);"; 

byte[] bytes = report.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings); 

using (MemoryStream ms = new MemoryStream()) 
{ 
    Document doc = new Document(); 

    PdfWriter writer = PdfWriter.GetInstance(doc, ms); 

    doc.SetPageSize(PageSize.A4); 

    doc.Open(); 

    PdfContentByte cb = writer.DirectContent; 

    PdfImportedPage page; 

    PdfReader reader = new PdfReader(bytes); 

    int pages = reader.NumberOfPages; 

    for (int i = 1; i <= pages; i++) 
    { 
     doc.SetPageSize(PageSize.A4); 

     doc.NewPage(); 

     page = writer.GetImportedPage(reader, i); 

     cb.AddTemplate(page, 0, 0); 
    } 

    PdfAction jAction = PdfAction.JavaScript(jsPrint, writer); 

    writer.AddJavaScript(jAction); 

    doc.Close(); 
} 

感謝。

+1

由於您僅使用「PdfWriter」而不是「PdfStamper」來添加JavaScript,因此您*降級PDF。這並不能解釋爲什麼你的PDF不起作用,但是你的代碼不是很優雅(它拋棄了所有的交互性,它引入了不必要的XObject,...)。 – 2014-11-05 07:42:42

+0

@BrunoLowagie,我看到的所有例子都使用pdfwriter。我是itextsharp的新手,從來沒有聽說過關於PDFStamper。我會看看它。謝謝。 – Shpongle 2014-11-05 07:51:39

回答

0

關於你的問題PdfStamper(在評論中)。它應該是如此簡單:

string jsPrint = "var pp = this.getPrintParams();pp.interactive= pp.constants.interactionLevel.silent;this.print(pp);"; 
PdfReader reader = new PdfReader(bytes); 
MemoryStream stream = new MemoryStream(); 
PdfStamper stamper = new PdfStamper(pdfReader, stream); 
stamper.Writer.AddJavaScript(jsPrint); 
stamper.Close(); 
reader.Close(); 

關於你原來的問題:PDF文檔的自動打印被認爲是一個安全隱患:一是可能一個PDF發送給最終用戶和PDF會導致打印機噴出頁面。以前(真的)舊的PDF查看器可能會有這種情況,但現代觀衆可以防止這種情況發生。

換句話說:您可能正試圖滿足過去的要求。今天的PDF閱讀器總是要求最終用戶採取行動來打印PDF文檔。

+0

我想我必須找到另一種方式來打印RDLC而無需預覽。感謝您的幫助和時間。 – Shpongle 2014-11-05 08:34:06