我的目標是在客戶端計算機上打印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();
}
感謝。
由於您僅使用「PdfWriter」而不是「PdfStamper」來添加JavaScript,因此您*降級PDF。這並不能解釋爲什麼你的PDF不起作用,但是你的代碼不是很優雅(它拋棄了所有的交互性,它引入了不必要的XObject,...)。 – 2014-11-05 07:42:42
@BrunoLowagie,我看到的所有例子都使用pdfwriter。我是itextsharp的新手,從來沒有聽說過關於PDFStamper。我會看看它。謝謝。 – Shpongle 2014-11-05 07:51:39