.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