簡體   English   中英

打印使用itextsharp創建的PDF

[英]Print PDF Created using itextsharp

我的目標是在沒有預覽的情況下在客戶端計算機上打印RDLC報告。 我不能使用ReportViewer打印按鈕,因為它需要安裝ActiveX對象,並且對此沒有權限。 因此,我正在使用ITextSharp從呈現的LocalReport返回的字節數組中創建PDF,並添加JavaScript進行打印。

在調試期間,我可以看到生成了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();
}

謝謝。

關於您有關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文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM