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

news/2024/12/22 0:16:20/
 

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 

 
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;
        }

使用

 
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,并加入项目

 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,并加入项目

public ActionResult DemoViewAsPdf()
        {
            return new ViewAsPdf("DemoViewAsPdf");
            //return new ActionAsPdf("DemoViewAsPdf")
            //{ FileName = "demo.pdf" };
        }

 
4、PDFSharp生成pdf

nuget中查找PDFSharp,并加入项目
 

/// <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,并加入项目
 

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");

        }


Spire.Pdf是我在测试时唯一没有遇到中文乱码的插件,而且源点在左上角,并提供单位转换工具类,所以个人更喜欢Spire.Pdf


http://www.ppmy.cn/news/173208.html

相关文章

Vue.js 中的 v-if 和 v-show 有什么区别?

Vue.js 中的 v-if 和 v-show 有什么区别&#xff1f; 在 Vue.js 中&#xff0c;v-if 和 v-show 都是用来控制元素的显示和隐藏的指令。但是&#xff0c;它们之间有一些区别。本文将深入探讨 v-if 和 v-show 的区别&#xff0c;并给出一些相关的代码示例。 v-if v-if 是一种条…

电脑桌面右下角小人非常萌

说明&#xff1a;此软件打开之后桌面右下角会出现一个小人&#xff0c;可以陪着你一起工作&#xff0c; 玩游戏&#xff0c;看电影&#xff0c;听音乐等等&#xff08;后面两个如果时间过长它是会累了休息的哦~&#xff09;。 当然&#xff0c;你也可以在累的时候戳戳头发&am…

桌面宠物鹅 DesktopGoose下载

它能够在桌面上显示一只鹅&#xff0c;而这只鹅会破坏你的桌面&#xff0c;比如拿出一个记事本&#xff0c;写着好好工作&#xff1b;比如拉出一张照片&#xff1b;比如在桌面留下脚印&#xff1b;比如叼走你的鼠标…非常有趣&#xff0c;支持 Windows 与 macOS 系统。 官网下载…

让电脑桌面的壁纸动起来吧—Wallpaper Engine

其实动态壁纸的软件真的不少&#xff0c;火萤、upupoo、飞火等等&#xff0c;但是之所以推荐大家使用Wallpaper Engine&#xff0c;原因主要有以下几种&#xff1a; ① 强大的壁纸库。划重点划重点&#xff01;在这款软件的创意工坊&#xff0c;你可以找到各种各样精美的壁纸&…

桌面宠物python

import os import sys import random from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import *class DesktopPet(QWidget):def __init__(self, parentNone, **kwargs):super(DesktopPet, self).__init__(parent)# 窗体初始化self.init()# 托盘化初…

桌面宠物秀,电脑桌面美化

桌面宠物秀是一款非常好玩的电脑桌面工具&#xff0c;你可以将宠物养在你的桌面上&#xff0c;随意拖动宠物到屏幕的任何一个角落&#xff0c;放置的宠物会在桌面进来来回的游动&#xff0c;为电脑桌面添加乐趣。 源码获取方式&#xff0c;关注公总号RaoRao1994&#xff0c;查看…

桌面宠物来了!

大家好&#xff0c;我是懂王。 我们身边有很多动物爱好者&#xff0c;平时会养一些猫猫狗狗之类的宠物来陪伴在我们身边。尤其是对于一个人租房子的打工人来说&#xff0c;宠物的陪伴是非常的温馨的。 但是对于一些平时上班比较忙&#xff0c;没有什么时间可以陪伴宠物的兄弟…

电脑桌面宠物-开机自启

1.什么是桌面宠物&#xff1f; 在你的电脑桌面有一个小宠物一直在动个不停&#xff0c;治愈你疲劳的心。 效果图 桌面壁纸是用的 Wallpaper Engine 里面的壁纸&#xff0c;跟随电脑的音量出现变化&#xff0c;当然是BP的&#xff0c;花钱是不可能花钱的&#xff0c;有需要的…