【C#功能实现】C# 输出pdf文件流在页面上显示

1 不调用itextsharp.dll的操作

 

      /// <summary>
        /// 生成pdf流
        /// </summary>
        /// <param name="fpath"></param>
        private void EditPDF(string fpath)
        {
            string path = fpath.Replace("\\", "/");
            FileStream MyFileStream = new FileStream(path, FileMode.Open);
            ViewPdf(MyFileStream);
        }
        /// <summary>
        /// 显示pdf
        /// </summary>
        /// <param name="fs"></param>
        private void ViewPdf(Stream fs)
        {
            byte[] buffer = new byte[fs.Length];
            fs.Position = 0;
            fs.Read(buffer, 0, (int)fs.Length);
            Response.Clear();
            Response.AddHeader("Content-Length", fs.Length.ToString());
            Response.ContentType = "application/pdf";
            Response.AddHeader("Content-Disposition", "inline;FileName=out.pdf");
            fs.Close();
            Response.BinaryWrite(buffer);
            Response.OutputStream.Flush();
            Response.OutputStream.Close();
        }

2 引用itextsharp.dll操作的,此操作可以对显示PDF进行打开即弹出打印操作及设置是否显示工具栏,打印按钮等.

  

     private void EditPDF(string fpath)
        {
            
            string path = fpath.Replace("\\","/");
            PdfReader reader = new PdfReader(path); 
            MemoryStream ms = new MemoryStream();
            PdfStamper stamper = new PdfStamper(reader, ms);
            stamper.Writer.ViewerPreferences = PdfWriter.HideWindowUI;
            stamper.Writer.SetEncryption(PdfWriter.STRENGTH128BITS, null, null, PdfWriter.AllowPrinting | PdfWriter.AllowFillIn);
            stamper.Writer.CloseStream = false;
            //直接弹出打印不用点击打印按钮
            //PdfAction.JavaScript("myOnMessage();", stamper.Writer);
            //stamper.Writer.AddJavaScript("this.print(true);function myOnMessage(aMessage) {app.alert('Test',2);} var msgHandlerObject = new Object();doc.onWillPrint = myOnMessage;this.hostContainer.messageHandler = msgHandlerObject;");
            
            //StringBuilder script = new StringBuilder();
            //script.Append("this.print({bUI: false,bSilent: true,bShrinkToFit: true});").Append("\r\nthis.closeDoc();");
            //script.Append("var pp = this.getPrintParams();pp.printerName = '\\\\fpserver\\hp LaserJet 1010'; this.print(pp);");
            //script.Append("this.print(flase);");
            //stamper.Writer.AddJavaScript(script.ToString(),false);

            //PdfContentByte cb = stamper.GetOverContent(1);
            //cb.Circle(250, 250, 50);
            //cb.SetColorFill(iTextSharp.text.Color.RED);
            //cb.SetColorStroke(iTextSharp.text.Color.WHITE);
            //cb.FillStroke();
            stamper.Close();        

            ViewPdf(ms);

            
        }
        private void ViewPdf(Stream fs)
        {
            byte[] buffer = new byte[fs.Length];            
            fs.Position = 0;
            fs.Read(buffer, 0, (int)fs.Length);
            Response.Clear();
            //Response.AddHeader("Content-Disposition", "attachment;FileName=out.pdf");
            Response.AddHeader("Content-Length", fs.Length.ToString());
            //Response.AddHeader("Content-Disposition", "inline;FileName=out.pdf");
            Response.ContentType = "application/pdf";
            fs.Close();

            Response.BinaryWrite(buffer);
            Response.OutputStream.Flush();
            Response.OutputStream.Close();
        }

3 web页面显示方式

    可以直接输出显示在当前页也可以在另外一个页面中引用下面显示

    test.aspx表示直接输出显示的页面,

    如果直接输出显示的话不好控制页面布局,在另外一个新页中显示的话容易控制页面布局.

    <object classid="clsid:CA8A9780-280D-11CF-A24D-444553540000" width="100%" height="100%" border="0"
            id="Object1" name="pdf" VIEWASTEXT>
            <param name="toolbar" value="false">
            <param name="_Version" value="65539">
            <param name="_ExtentX" value="20108">
            <param name="_ExtentY" value="10866">
            <param name="_StockProps" value="0">
            <param name="SRC" value="test.aspx?reportfile=<%=filepath %>">
           </object>

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/crazykiller/archive/2009/09/17/4557462.aspx

//自己实现的、、

 protected void Page_Load(object sender, EventArgs e)
        {
            //获取PDF模板文件
            string templateFile = Path.Combine(Server.MapPath(@"~\pdftemplate\"), "2.pdf");
            //输出生成的PDF文件
            string tempPDF = Path.Combine(Server.MapPath(@"~\output\"), Guid.NewGuid().ToString() + ".pdf");




            //创建 PdfReader
            PdfReader reader = new PdfReader(@"C:\\Users\xuqiang\\Documents\\Visual Studio 2010\\Projects\\WebApplication3\\WebApplication3\\pdftemplate\\4.pdf");
            //FileStream fFileStream = new FileStream(tempPDF, FileMode.Truncate);


            //进行PDF字段操作
            MemoryStream ms = new MemoryStream();


            PdfStamper stamper = new PdfStamper(reader,ms);




            // new PdfStamper(reader, fFileStream);
            AcroFields coderBlogForm = stamper.AcroFields;


           // PdfAcroForm str1 = coderBlogForm.GetField(@"xx1");
            //填充PDF里的字段内容
            coderBlogForm.SetField("xx1", "http://www.coderblog.in");
            coderBlogForm.SetField("xx2", "代码部落");
            
            //------------------------------------
            stamper.Writer.ViewerPreferences = PdfWriter.HideWindowUI;
            stamper.Writer.SetEncryption(PdfWriter.STRENGTH128BITS, null, null, PdfWriter.AllowPrinting | PdfWriter.AllowFillIn);
            stamper.Writer.CloseStream = false;


            stamper.Close();
            reader.Close();
           // coderBlogForm.SetField("Option", "Yes");


           // AcroPDF adopdf = new AcroPDF();
           // adopdf.LoadFile(@"C:\\Users\xuqiang\\Documents\\Visual Studio 2010\\Projects\\WebApplication3\\WebApplication3\\pdftemplate\\4.pdf");
            ViewPdf(ms);
        }


        private void ViewPdf(Stream fs)
        {
            byte[] buffer = new byte[fs.Length];
            fs.Position = 0;
            fs.Read(buffer, 0, (int)fs.Length);
            Response.Clear();
            //Response.AddHeader("Content-Disposition", "attachment;FileName=out.pdf");
            Response.AddHeader("Content-Length", fs.Length.ToString());
            //Response.AddHeader("Content-Disposition", "inline;FileName=out.pdf");
            Response.ContentType = "application/pdf";
            fs.Close();


            Response.BinaryWrite(buffer);
            Response.OutputStream.Flush();
            Response.OutputStream.Close();
        }


      
    }

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,你可以使用 `Process` 类来实现指定打印机打印 PDF 文件的最优实现,并且将 PDF 文件文件的形式传递给 `Process`。以下是一个示例代码: ```csharp using System.Diagnostics; using System.IO; // ... byte[] pdfData; // 用于存储 PDF 文件的字节数组 // 将 PDF 文件加载到字节数组中,这里假设你已经将 PDF 文件的内容存储在 pdfData 中 using (MemoryStream pdfStream = new MemoryStream(pdfData)) { string printerName = "your_printer_name"; // 替换为你的打印机名称 ProcessStartInfo processStartInfo = new ProcessStartInfo(); processStartInfo.FileName = "your_pdf_viewer_executable_path"; // 替换为你的 PDF 阅读器可执行文件路径 processStartInfo.Arguments = string.Format("/p /h /n \"{0}\"", printerName); processStartInfo.CreateNoWindow = true; processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; processStartInfo.UseShellExecute = false; processStartInfo.RedirectStandardInput = true; Process printProcess = new Process(); printProcess.StartInfo = processStartInfo; printProcess.Start(); using (Stream inputStream = printProcess.StandardInput.BaseStream) { pdfStream.CopyTo(inputStream); inputStream.Flush(); } printProcess.WaitForExit(); } ``` 在上面的代码中,你需要将 `pdfData` 替换为包含 PDF 文件内容的字节数组,将 `your_printer_name` 替换为你实际的打印机名称,将 `your_pdf_viewer_executable_path` 替换为你实际的 PDF 阅读器可执行文件路径。 代码中使用 `ProcessStartInfo` 类来设置打印进程的参数,其中 `/p` 表示打印,`/h` 表示隐藏打印机选择对话框,`/n` 后面跟着打印机名称。 然后,通过 `Process` 类启动打印进程,并使用 `RedirectStandardInput` 属性将文件传递给进程的标准输入。将 PDF 文件的内容复制到进程的标准输入中,以实现打印。 这种方式不依赖于第三方库,并且可以指定打印机,并且将 PDF 文件的形式传递给打印进程。 希望对你有所帮助!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值