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

这篇具有很好参考价值的文章主要介绍了.net生成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 

 
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
文章来源地址https://www.toymoban.com/news/detail-576903.html

到了这里,关于.net生成PDF文件的几种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过skia导出pdf 生成超链接 skia pdfdocument annotation pdflink

    如题 最近导出pdf ,想实现文本支持超链接跳转, 看了下skia的官网文档, 翻墙找各种资料 就是找不到关于怎么实现,毫无头绪咋办呢 我想了一下 1.粗略翻阅了下pdf的格式 了解了下基本的构成 啥root page text 啥的 2.通过pdf格式了解到 链接是通过LinkAnnotation 到这一步骤 我就googl

    2024年02月11日
    浏览(39)
  • C#面:列出 .NET 中的几种循环方法,并指出它们的不同

    for 循环是一种最常见的循环方法,它通过指定循环的起始值、终止条件和每次迭代的步长来控制循环。 for 循环适用于已知循环次数的情况。 while循环是一种在循环开始之前先判断条件是否满足的循环方法。只有当条件为真时,循环体才会执行。while循环适用于未知循环次数

    2024年02月20日
    浏览(37)
  • vue前端实现将页面显示内容生成pdf文件的几种方法,html2canvas、dom-to-image、jspdf(带分页)基本使用以及介绍

    实际开发需求:vue项目中,根据数据结构生成echarts图表组件,生成带有样式的图表以后,点击下载按钮,把图表以pdf格式的文件下载到本地 实现思路:将vue界面的echarts组件生成图片,然后使用插件将生成的图片放入pdf中,再实现pdf文件的下载 涉及框架以及插件:vue、echar

    2024年01月25日
    浏览(53)
  • Java生成二维码的几种实现方式

    本文将基于Spring Boot介绍两种生成二维码的实现方式,一种是基于Google开发工具包,另一种是基于Hutool来实现; 下面我们将基于Spring Boot,并采用两种方式实现二维码的生成,对于每一种方式还提供两种类型的二维码返回形式,即:物理文件 和 图片响应流 一、基于Google开发

    2024年02月17日
    浏览(44)
  • vue3 实现预览pdf的几种方式(vue3-pdf, iframe流展示,vue-office/pdf)

    功能描述: 要实现菜单(二级)绑定文件,并进行预览(点击菜单即触发),支持文件上传下载(绑定菜单),文件以byte[]形式保存到数据库(至于为什么不用文件存储系统,因为这是领导定的 =,= 而且这个功能比较小,数据也不多,成本有限),同时,要解析pdf文件里的内

    2024年02月16日
    浏览(54)
  • Linux创建文件的几种方式

    使用 touch 命令来创建一个空文件,或者多个文件。当文件存在时,只会修改文件的访问和修改时间,不会清空内容。 批量创建 使用 vi vim 编辑器,输入内容并保存退出,来创建一个文件 :wq 保存退出 使用重定向符号 创建一个空文件 使用 创建文件,需要注意,当文件存在时

    2024年02月04日
    浏览(59)
  • java 读取文件的几种方式

    在 Java 中有几种常用的方式来读取文件: 使用 FileInputStream 类以字节的方式读取文件。 使用 BufferedReader 在字符输入流上包装一个缓冲区,以行为单位读取文件。 使用 Scanner 类以分隔符为标志读取文件。 使用 Files 类的 readAllLines 方法一次性读取所有行。 使用 ObjectInputStream 反

    2024年02月14日
    浏览(49)
  • Java读取文件的几种方式

    1. 使用流读取文件 2. 使用JDK1.7提供的NIO读取文件(适用于小文件) 3. 使用JDK1.7提供的NIO读取文件(适用于大文件) 4. 使用JDK1.4提供的NIO读取文件(适用于超大文件) 5. 使用cmmons-io依赖提供的FileUtils工具类读取文件 添加依赖: 6. 使用cmmons-io依赖提供的IOtils工具类读取文件 添加依赖:

    2024年02月16日
    浏览(53)
  • Linux下文件共享的几种方式

    hello,小伙伴们,大家好!我是木荣。今天给大家分享一下Linux下不同主机之间如何通过网络进行文件共享,达到文件在不同主机之间进行拷贝的目的。在平时的工作中,我们需要经常在主机与开发板、同一网络下的不同主机、主机与公网中的主机、主机与云服务器等等之间拷

    2024年02月04日
    浏览(54)
  • Qt 播放音频文件的几种方式

    : Qt 、 QSound 、 QSoundEffect 、 QMediaPlayer 、 multimedia 这篇文章至少拖了有一两个月了,这不阳了,在家实在是难受的要死,无心处理工作的事情,那就写写博客吧,因为项目中需要用到播放音频的功能,CV了部分代码,这里就简单的扯扯我对 QSound 、 QSoundEffect 和 QMediaP

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包