.net生成PDF文件的几种方式


以下为在.net mvc中,生成pdf的几种方式,资料都是在做项目时网上找的

1、使用Microsoft.Office.Interop.Word.dll将word转换为PDF

dll可以单独下载,一般在电脑中有,位置:C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\vs\199bd4f2\edef3bc1\assembly\dl3\60e90863\53bea978_07e9d401\Microsoft.Office.Interop.Word.DLL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public  bool  WordToPdf( object  sourcePath,  string  targetPath)
         {
             bool  result =  false ;
             WdExportFormat wdExportFormatPDF = WdExportFormat.wdExportFormatPDF;
             object  missing = Type.Missing;
             Microsoft.Office.Interop.Word.ApplicationClass applicationClass =  null ;
             Microsoft.Office.Interop.Word.Document document =  null ;
             try
             {
                 applicationClass =  new  Microsoft.Office.Interop.Word.ApplicationClass();
                 document = applicationClass.Documents.Open( ref  sourcePath,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing,  ref  missing);
                 if  (document !=  null )
                 {
                     document.ExportAsFixedFormat(targetPath, wdExportFormatPDF,  false , WdExportOptimizeFor.wdExportOptimizeForPrint, WdExportRange.wdExportAllDocument, 0, 0, WdExportItem.wdExportDocumentContent,  true true , WdExportCreateBookmarks.wdExportCreateWordBookmarks,  true true false ref  missing);
                 }
                 result =  true ;
             }
             catch
             {
                 result =  false ;
             }
             finally
             {
                 if  (document !=  null )
                 {
                     document.Close( ref  missing,  ref  missing,  ref  missing);
                     document =  null ;
                 }
                 if  (applicationClass !=  null )
                 {
                     applicationClass.Quit( ref  missing,  ref  missing,  ref  missing);
                     applicationClass =  null ;
                 }
             }
             return  result;
         }

  使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  FileResult Demo()
         {
             string  wordPath = Server.MapPath( @"\TempFile\Word\Test.docx" );
             string  pdfPath = Server.MapPath( @"\TempFile\PDF\Test.pdf" );
 
             WordToPdf(wordPath, pdfPath);
 
             FileStream fs =  new  FileStream(pdfPath, FileMode.Open, FileAccess.Read);
             byte [] fileContents =  new  byte [( int )fs.Length];
             fs.Read(fileContents, 0, fileContents.Length);
             fs.Close();
 
             return  File(fileContents,  "application/pdf" "test.pdf" );
         }

  2、itextsharp生成PDF

nuget中查找itextsharp,并加入项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public  FileResult ItextSharpDemo()
         {
             string  filename = Server.MapPath( @"\TempFile\PDF\ItextSharpTest.pdf" );
 
             iTextSharp.text.Rectangle pageSize =  new  iTextSharp.text.Rectangle(1000, 500);
             iTextSharp.text.Document document =  new  iTextSharp.text.Document(pageSize, 10, 10, 10, 10);
             PdfWriter writer = PdfWriter.GetInstance(document,  new  FileStream(filename, FileMode.Create));
             document.Open();
 
             //设置文档相关信息
             document.AddTitle( "这里是标题" );
             document.AddSubject( "主题" );
             document.AddKeywords( "关键字" );
             document.AddCreator( "创建者" );
             document.AddAuthor( "作者" );
 
             //添加内容
             document.Add( new  iTextSharp.text.Paragraph( "Hello World! Hello People! "  "这是中文" ));
             
             //添加图片
             iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(Server.MapPath( @"\images\1.png" ));
             img.SetAbsolutePosition(100, 50);
             writer.DirectContent.AddImage(img);
 
             img = iTextSharp.text.Image.GetInstance(Server.MapPath( @"\images\2.png" ));
             img.SetAbsolutePosition(200, 50);
             writer.DirectContent.AddImage(img);
 
             img = iTextSharp.text.Image.GetInstance(Server.MapPath( @"\images\3.png" ));
             img.SetAbsolutePosition(300, 50);
             writer.DirectContent.AddImage(img);
 
             document.Close();
             writer.Close();
 
             FileStream fs =  new  FileStream(filename, FileMode.Open, FileAccess.Read);
             byte [] fileContents =  new  byte [( int )fs.Length];
             fs.Read(fileContents, 0, fileContents.Length);
             fs.Close();
 
             return  File(fileContents,  "application/pdf" "test.pdf" );
         }

  源点为左下角,不方便计算位置

3、Rotativa将html生成pdf并下载

nuget中查找Rotativa,并加入项目

1
2
3
4
5
6
public  ActionResult DemoViewAsPdf()
         {
             return  new  ViewAsPdf( "DemoViewAsPdf" );
             //return new ActionAsPdf("DemoViewAsPdf")
             //{ FileName = "demo.pdf" };
         }

  4、PDFSharp生成pdf

nuget中查找PDFSharp,并加入项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/// <summary>
         /// 1、使用windows里面的字体时,报错
         /// 2、默认不支持中文
         /// </summary>
         public  void  CreatePDF()
         {
             // 创建新的PDF文档
             PdfDocument document =  new  PdfDocument();
 
             // 创建空页
             PdfPage page = document.AddPage();
 
             // 设置一个画布
             XGraphics gfx = XGraphics.FromPdfPage(page);
 
             // 设置字体 单位:px
             //System.Drawing.Text.PrivateFontCollection pfcFonts = new System.Drawing.Text.PrivateFontCollection();
             //string strFontPath = @"C:/Windows/Fonts/msyh.ttc";//字体设置为微软雅黑
             //pfcFonts.AddFontFile(strFontPath);
 
             //XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
             //XFont font = new XFont(pfcFonts.Families[0], 15, XFontStyle.Regular, options);
 
             System.Drawing.Text.PrivateFontCollection pfcFonts =  new  System.Drawing.Text.PrivateFontCollection();
             string  strFontPath =  @"C:/Windows/Fonts/msyh.ttc" ; //字体设置为微软雅黑
             pfcFonts.AddFontFile(strFontPath);
 
             XPdfFontOptions options =  new  XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
             XFont font =  new  XFont(pfcFonts.Families[0], 20, XFontStyle.Bold, options);
 
             // 设置(添加)文本
             gfx.DrawString( "Hello, World!" , font, XBrushes.Black,
               new  XRect(0, 0, page.Width, page.Height),
               XStringFormat.TopLeft);
 
             // 图片
             string  imgPath = Server.MapPath( @"\images\1.png" );
 
             XImage image = XImage.FromFile(imgPath);
             //double x = (gfx.PageSize.Width - image.PixelWidth * 72 / image.HorizontalResolution) / 2;
             //double y = (gfx.PageSize.Height - image.PixelHeight * 72 / image.VerticalResolution) / 2;
             gfx.DrawImage(image, 10, 30);
 
             // 设置(添加)文本
             //gfx.DrawString("123124121", font, XBrushes.Black,
             //  new XRect(0, 0, page.Width, page.Height)
             //  );
             gfx.DrawString( "这是一行中文" , font, XBrushes.Black, 0, 60 + image.PixelHeight);
 
             // 保存文档
             string  filename = Server.MapPath( @"\tempfile\HelloWorld.pdf" );
             document.Save(filename);
         }

  5、Spire.Pdf

nuget中查找Spire.Pdf,并加入项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
public  void  CreatePDF()
         {
             PdfDocument document =  new  PdfDocument();
             
             //用于转换各种尺寸
             PdfUnitConvertor unitCvtr =  new  PdfUnitConvertor();
 
             //用于设置页边距
             PdfMargins margins =  new  PdfMargins();
 
             //设置页边距  单位:磅/点
             margins.Top = unitCvtr.ConvertUnits(20f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);
             margins.Bottom = margins.Top;
             margins.Left = 0;
             margins.Right = margins.Left;
             
             //新添加一个A4大小的页面,A4大小为211mm*297mm
             PdfPageBase page = document.Pages.Add(PdfPageSize.A4, margins);
             
             //字体,字体大小,font中设置字体大小的单位为磅
             PdfTrueTypeFont titleFont =  new  PdfTrueTypeFont( new  Font( "宋体" , unitCvtr.ConvertUnits(24f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point)),  true );
             PdfTrueTypeFont contentFont =  new  PdfTrueTypeFont( new  Font( "宋体" , unitCvtr.ConvertUnits(14f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point)),  true );
 
             //字体颜色
             //PdfPen为空心字
             //PdfPen pen = new PdfPen(Color.Black);
             PdfBrush brush =  new  PdfSolidBrush(Color.Black);
 
             //写入内容,x为距离左边的距离,单位为磅,y为距离上面的距离,单位为磅
             string  text = ( "这里是标题" );
             page.Canvas.DrawString(text, titleFont, brush, unitCvtr.ConvertUnits(14f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point), 0);
 
             text = ( "这里是内容" );
             page.Canvas.DrawString(text, contentFont, brush, unitCvtr.ConvertUnits(14f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point), unitCvtr.ConvertUnits(30f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point));
 
             text = ( "这里是内容2" );
             page.Canvas.DrawString(text, contentFont, brush, unitCvtr.ConvertUnits(14f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point), unitCvtr.ConvertUnits(50f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point));
 
             //按指定地址加载图片
             PdfImage image = PdfImage.FromFile(Server.MapPath( @"\images\1.png" ));
 
             //按图片流加载图片
             //Image img;
             //PdfImage img = PdfImage.FromImage(img)
 
             //按Stream流加载图片
             //System.IO.Stream stream;
             //PdfImage img = PdfImage.FromStream(stream)
 
             float  width = image.Width * 0.55f;
             float  height = image.Height * 0.55f;
 
             float  y = unitCvtr.ConvertUnits((20f+30f+20f), PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point);
 
             //插入图片,x为距离左边的距离,单位磅,y为距离上面的距离,单位磅,width,height为写入PDF的图片的宽高,单位像素
             page.Canvas.DrawImage(image, unitCvtr.ConvertUnits(14f, PdfGraphicsUnit.Pixel, PdfGraphicsUnit.Point), y, width, height);
 
             //保存并打开文档
             document.SaveToFile(Server.MapPath( @"\tempfile\PDF创建.pdf" ));
             //System.Diagnostics.Process.Start("PDF创建.pdf");
         }

 3、wkhtmltopdf 

What is it?

wkhtmltopdf and wkhtmltoimage are open source (LGPLv3) command line tools to render HTML into PDF and various image formats using the Qt WebKit rendering engine. These run entirely "headless" and do not require a display or display service.

There is also a C library, if you're into that kind of thing.

4、基于libcef 将html  /url  保存为pdf

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM