以下为在.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

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

.net生成PDF文件的几种方式的更多相关文章

  1. 使用ABAP和JavaScript代码生成PDF文件的几种方式

    ABAP 方法1:使用ABAP + Adobe Lifecycle Enterprise Service 详细步骤参考我的博客Convert word document into PDF via Ad ...

  2. pdfjs预览pdf文件的两种方式(可复制)

    1.以图片形式进行展示: version:采用1.x版本,2.0版本会有字体显示不完整的问题:参考 这里使用1.8.170 <script th:src="@{/pdfjs/build ...

  3. java调用wkhtmltopdf生成pdf文件,美观,省事

    最近项目需要导出企业风险报告,文件格式为pdf,于是搜了一大批文章都是什么Jasper Report,iText ,flying sauser ,都尝试了一遍,感觉不是我想要的效果, 需要自己调整好多 ...

  4. Itext生成pdf文件

    来源:https://my.oschina.net/lujianing/blog/894365 1.背景 在某些业务场景中,需要提供相关的电子凭证,比如网银/支付宝中转账的电子回单,签约的电子合同等. ...

  5. 在spring boot 中使用itext和itextrender生成pdf文件

    转载请注明出处 https://www.cnblogs.com/majianming/p/9539376.html 项目中需要对订单生成pdf文件,在第一版本其实已经有了比较满意的pdf文档,但是还是 ...

  6. Java生成PDF文件(转)

    原文地址:https://www.cnblogs.com/shuilangyizu/p/5760928.html 一.前言 前几天,做ASN条码收货模块,需要实现打印下载收货报表,经一番查找,选定iT ...

  7. [itext]Java生成PDF文件

    一.前言 最近在做也导出试卷的功能,刚开始是导出为doc,可是导出来格式都有变化,最后说直接将word转为pdf,可是各种不稳定,各种报错.最后想到直接将文件写入pdf(参考:http://www.c ...

  8. Asciidoctor-pdf生成pdf文件

    本文使用asciidoc语法编写. = Asciidoctor-pdf生成pdf文件 Pinnsvin Pinnsvin@163.com v1.0 {docdate} :plantuml-server ...

  9. 前端js,css文件合并三种方式,bat命令

    前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...

随机推荐

  1. 解决Apple Mobile Device USB Driver

    在设备管理器里找到便携设备:APPLE IPHONE 更新驱动 自定义更新:在设备管理器里找到便携设备:APPLE IPHONE 更新驱动 自定义更新:C:\Program Files\Common ...

  2. Codeforces_446_B

    http://codeforces.com/problemset/problem/446/B 分别将每行的和与每列的和存入优先队列,计算操作n次的最大和,保存每一次结果. 枚举行和列操作的次数,注意要 ...

  3. (七)mybatis批量操作,分页插件

    首先使用方式很简单: SqlSession sqlSession = sessionFactory.openSession(ExecutorType.BATCH); 批量操作核心:改变执行sql的方式 ...

  4. Android Studio 学习笔记(三):简单控件及实例

    控件.组件.插件概念区分 说到控件,就不得不区分一些概念. 控件(Control):编程中用到的部件 组件(Component):软件的组成部分 插件(plugin): 应用程序中已经预留接口的组件 ...

  5. Shell:setfacl缩小普通用户的权限

    简介 我们在使用jumpserver的过程中,会向主机推送普通用户,但普通用户有上传下载文件的权限,要想对这些权限进行管控就比较困难,之前考虑通过将$PATH变量下的命令的权限设置为750,设置完发现 ...

  6. css 浏览兼容问题及解决办法 (1)

    主流浏览器css兼容问题的总结 最近又搞了一波网站的兼容,由于要求ie浏览器还是要兼容到ie8,所以调起来还是各种蛋疼. 现在就post一些做兼容的总结,可能不够全面,但是可以告诉大家如何避过一些坑. ...

  7. javascript 原生js对html元素的 增删改查 操作

    'use strict'; class View{ constructor(){ } //创建html元素 addEl(fel, elemName, id, cls){ //创建一个元素 let el ...

  8. Hapi+MySql项目实战环境初始化(一)

    因为项目要求特殊的原因,公司要求使用Nodejs+HApi(纯英文的API)+Mysql构建新的项目.网上找了一堆资料,看了半天一脸懵逼.结论就是:版本的差异,资料国内几乎都是旧的17年前的了.根据资 ...

  9. 【笔记】Git简明教程

    前言 Git这个东西我曾经有学过,但学的内容太多了,有点懵,不太理解,磕磕碰碰的,走了不少弯路.不过最近我在B站上发现了一个讲的很好的教程:<表严肃讲Git>.因此,我决定用文字的方式分享 ...

  10. 使用docker搭建FastDFS

    拉取镜像(使用docker-componse可以忽略) [root@localhost ~]# docker pull phinexdaz/fdfs_tracker [root@localhost ~ ...