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

news/2023/12/1 10:59:48
 

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;有需要的…

超可爱桌面电子宠物下载

我是一个网虫&#xff0c;我天天对着电脑&#xff0c;看看自己朝夕相处的电脑桌面&#xff0c;还是一如既往的一片寂静&#xff0c;太没有气氛了。今天飞鸽传书就给大家介绍几个好玩的桌面宠物&#xff0c;它们会让你的桌面充满生机&#xff0c;还可以陪你一起快快乐乐地玩电脑…

live2d_一款电脑桌面跨平台开源免费live2D桌面宠物精灵

每天面对电脑时间很多&#xff0c;桌面宠物也是见过很多款&#xff0c;不过今天给大家介绍的是一款适用于 Windows、macOS、Linux开源免费的桌面宠物--PPet&#xff0c;它可以调用live2D的资源&#xff0c;宠物的数量与便利性和其他的软件相比就更加优越。 可以换妹子、可以换装…

电脑桌面美化

看够了千篇一律的桌面&#xff1f;推荐你几款好用的插件给你的桌面整整容吧&#xff01; 2019-01-20 19:49:56 199点赞 2604收藏 186评论 电脑用久了就跟手机一样&#xff0c;各种零碎的文件多了就会使电脑变得卡顿 有没有连连看的感觉 这还是整洁的时候&#xff0c;桌面最…

MacOs | 一只捣乱桌面宠物鹅

Desktop Goose Mac版是Mac电脑上的一款桌面宠物应用。Desktop Goose Mac可以给你的电脑加上一只会捣乱的鹅&#xff0c;作为桌面宠物。偶尔启动起来&#xff0c;让自己的的MAC 自娱一会儿。 Desktop Goose Mac版可以给你的电脑加上一只捣乱的鹅作为桌面宠物。 应用本身没有什么…

用Python实现自制桌面宠物,变出一个桌面小挂件

前言 就喜欢自己自定义一些小玩意&#xff0c;今天就来分享一些制作桌面宠物的素材&#xff0c;还有代码 相关文件 声明&#xff1a;图片素材源于网络&#xff0c;侵歉删。 开发工具 Python版本&#xff1a;3.6.4 相关模块&#xff1a; PyQt5模块&#xff1b; 以及一些…

线上宠物领养系统

实现功能 客户端&#xff1a;客户可以查询数据库的宠物信息并根据查询的宠物信息选择自己喜欢的宠物进行领养。 服务器&#xff1a;服务器实现了对管理员相关信息的保存&#xff0c;管理员必须输入正确的用户名和密码才能对数据库信息进行增删改查等操作。服务器也可以直接对数…

用Python写个桌面挂件,手把手带你做只桌面宠物~

导语 前段时间有小伙伴留言说想让我带大家写写桌面小挂件&#xff0c;今天就满足一下留过类似言的小伙伴的请求呗~不过感觉写桌面的挂历啥的没意思&#xff0c;就简单带大家做一只桌面宠物吧~ 皮卡丘大家喜欢吗~今天就由做个皮卡丘为例哦&#xff01;&#xff01; 相关文件 …

宠物管理之家

宠物乐园是我最近做的一个O2O项目&#xff0c;支持商家入驻&#xff0c;为线下门店提供客源&#xff0c;从中抽取分成&#xff0c;实现互利共赢。 随着生活水平的提高&#xff0c;人们对精神方面的需求也不断提高&#xff0c;很多人喜欢通过喂养宠物来丰富自己的精神需求&#…

如何用unity制作一个桌面宠物?

unity版本为&#xff1a;2018.3.14 1、找到带动画模型 获取途径&#xff1a; ① unity官方有免费模型和付费模型。 ② 有mmd转unity的转换器。 我使用的是“Little Heroes Mega Pack”素材包&#xff0c;里面可以自己设置主角的衣服和发型。 2、设计互动动作 好多材质包…

多猫宠物游戏

多猫简介3D桌面宠物多猫是一款全新的桌面养成游戏。用户通过简单的操作&#xff0c;在电脑桌面上喂养可爱的宠物。宠物在主人悉心地照料下会慢慢地长大&#xff0c;随着感情交流的逐步发展&#xff0c;同一品种的宠物渐渐形成自己独特的个性特征。用户可以带着自己的宠物去拜访…

电子宠物小游戏

144791TOC 1.电子宠物小游戏 本游戏python3.7编写 玩法&#xff1a; 1.屏幕上的图标对应键盘按键1,2,3,4&#xff0c;分别是玩耍、看病、吃饭、散步。 2.如果宠物感到饿了和生病&#xff0c;过一会会死掉。 3.运动后有时会饿。 import pygame,sys,random pygame.init() scre…

桌面宠物:可爱的鱼

转载请注明:敏捷学院-技术资源库原文链接:http://dev.mjxy.cn/a-766.aspx 介绍本文演示了一个很可爱的金鱼桌面宠物&#xff0c;使用alpha-PNG和GDI。这个可爱的金鱼可以从一个侧面游泳到您的桌面&#xff0c;当你试图用鼠标抓住它的时候&#xff0c;金鱼会设法逃脱。 示例 以下…
最新文章