.Net 对于PDF生成以及各种转换的操作

前段时间公司的产品,要做一个新功能,签章(就是把需要的数据整理成PDF很标准的文件,然后在盖上我们在服务器上面的章)

然后我就在百度上找了找,发现搞PDF的类库很少,要么就要钱,要么就有水印,破解版的没找到。

先讲一讲我是怎么生成PDF的

1、生成PDF

  这里用到了Spire.Pdf 这个类库可以在NuGet里面搜索到,上面带个小红标的就是免费版本。  

  当然也可以去他们的官网,上面还有文档(https://www.e-iceblue.cn/Introduce/Spire-PDF-NET.html)。

  代码(这是我自己写的一个测试的表格)

 public static void abc()
    {
      //创建PDF文档
      Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument();

      //添加一页
      PdfPageBase page = doc.Pages.Add();
    //设置字体
      PdfTrueTypeFont font = new PdfTrueTypeFont(new System.Drawing.Font("Microsoft Yahei", 20f), true);
      PdfTrueTypeFont font1 = new PdfTrueTypeFont(new System.Drawing.Font("Microsoft Yahei", 11f), true);

      //创建一个PdfGrid对象
      PdfGrid grid = new PdfGrid();

        //这一段的内容是在表格只玩显示一些数据 根据坐标定位 第一个是内容,第二个是字体,第三个是颜色,第四第五是坐标
      page.Canvas.DrawString("XXXXXXXX管理中心回单",
          font,
          new PdfSolidBrush(System.Drawing.Color.Black), 130, 10);
      page.Canvas.DrawString("编号:31231",
          font1,
          new PdfSolidBrush(System.Drawing.Color.Black), 380, 60);
      page.Canvas.DrawString("经办人:XXXX",
          font1,
          new PdfSolidBrush(System.Drawing.Color.Black), 60, 250);
      page.Canvas.DrawString("打印日期:2020/06/15",
          font1,
          new PdfSolidBrush(System.Drawing.Color.Black), 380, 250);
      //设置单元格边距
      grid.Style.CellPadding = new PdfPaddings(1, 1, 4, 4);

      //设置表格默认字体
      grid.Style.Font = new PdfTrueTypeFont(new System.Drawing.Font("Microsoft Yahei", 12f), true);

      //添加4行4列
      PdfGridRow row1 = grid.Rows.Add();
      PdfGridRow row2 = grid.Rows.Add();
      PdfGridRow row3 = grid.Rows.Add();
      PdfGridRow row4 = grid.Rows.Add();
      PdfGridRow row5 = grid.Rows.Add();
      PdfGridRow row6 = grid.Rows.Add();
      grid.Columns.Add(4);

      //设置列宽
      foreach (PdfGridColumn col in grid.Columns)
      {
        col.Width = 120f;
      }

      //写入数据 第一行第一个格式的值,第一行第二个格子的值
      row1.Cells[0].Value = "收款单位";
      row1.Cells[1].Value = "{DW}";
      row2.Cells[0].Value = "收款单位";
      row2.Cells[1].Value = "{DW}";
      row3.Cells[0].Value = "汇款时间";
      row3.Cells[1].Value = "2016/06/02";
      row3.Cells[2].Value = "金额小写";
      row3.Cells[3].Value = "¥231";
      row4.Cells[0].Value = "金额合计大写";
      row4.Cells[1].Value = "大苏打实打实";
      row5.Cells[0].Value = "用途:" +
        "付XXXX2020年04月至2020年04月";
      row6.Cells[0].Value = "提示:回单可重复打印,请勿重复XXX";

      //row5.Cells[0].Height = (float)20;
      //水平和垂直合并单元格 从那个格子开始合并几个(包含当前格子)
      row1.Cells[1].ColumnSpan = 3;
      row2.Cells[1].ColumnSpan = 3;
      row4.Cells[1].ColumnSpan = 3;
      row5.Cells[0].ColumnSpan = 2;
      row5.Cells[2].ColumnSpan = 2;
      row6.Cells[0].ColumnSpan = 2;
      row6.Cells[2].ColumnSpan = 2;
        //这个是垂直合并,但是我之前合并的没有效果
      row5.Cells[1].RowSpan = 2;

      //设置单元格内文字对齐方式
      row1.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row1.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row2.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row2.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row3.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row3.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row3.Cells[2].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row3.Cells[3].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row4.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row4.Cells[1].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row5.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      row6.Cells[0].StringFormat = new PdfStringFormat(PdfTextAlignment.Center);
      //设置单元格背景颜色
      //row1.Cells[0].Style.BackgroundBrush = PdfBrushes.Gray;
      //row3.Cells[3].Style.BackgroundBrush = PdfBrushes.Green;
      //row4.Cells[3].Style.BackgroundBrush = PdfBrushes.MediumVioletRed;

      //设置边框颜色、粗细
      PdfBorders borders = new PdfBorders();
      borders.All = new PdfPen(System.Drawing.Color.Black, 0.1f);
      foreach (PdfGridRow pgr in grid.Rows)
      {
        foreach (PdfGridCell pgc in pgr.Cells)
        {
          pgc.Style.Borders = borders;
        }
      }
      //保存到文档
      //在指定为绘入表格
      grid.Draw(page, new PointF(30, 80));
      doc.SaveToFile(@"路径");
       //这句是在浏览器重打开这个PDF  
      System.Diagnostics.Process.Start(@"路径");
    }

  保存我们看一下

  

2、之后就是关于PDF一些转换的操作了(PDF转base64,转图片之类的,我把代码贴到下面)

这个用到了iTextSharp类库,也可以在Nuget下载到

/// <summary>
    /// 图片转pdf
    /// </summary>
    /// <param name="jpgfile"></param>
    /// <param name="pdf"></param>
    public static bool ConvertJPG2PDF(string jpgfile, string pdf)
    {
      try
      {
        var document = new iTextSharp.text.Document(iTextSharp.text.PageSize.A4, 25, 25, 25, 25);
        using (var stream = new FileStream(pdf, FileMode.Create, FileAccess.Write, FileShare.None))
        {
          PdfWriter.GetInstance(document, stream);
          document.Open();
          using (var imageStream = new FileStream(jpgfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
          {
            var image = iTextSharp.text.Image.GetInstance(imageStream);
            if (image.Height > iTextSharp.text.PageSize.A4.Height - 25)
            {
              image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
            }
            else if (image.Width > iTextSharp.text.PageSize.A4.Width - 25)
            {
              image.ScaleToFit(iTextSharp.text.PageSize.A4.Width - 25, iTextSharp.text.PageSize.A4.Height - 25);
            }
            image.Alignment = iTextSharp.text.Image.ALIGN_MIDDLE;
            document.NewPage();
            document.Add(image);
          }
          document.Close();
        }

        return true;

      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

这个和上面用的也是同一个(我觉得这个比较好用一些)

/// <summary>
    /// pdf转img
    /// </summary>
    /// <param name="path">pdf位置</param>
    /// <param name="path2">img位置</param>
    public static void Pdf2Img(string path, string path2)
    {
      PDFFile pdfFile = PDFFile.Open(path);
      //实例化一个PdfDocument类对象,并加载PDF文档
      using (Spire.Pdf.PdfDocument doc = new Spire.Pdf.PdfDocument())
      {
        doc.LoadFromFile(path);
        //调用方法SaveAsImage()将PDF第一页保存为Bmp格式
        System.Drawing.Image bmp = doc.SaveAsImage(0);
        // //调用另一个SaveAsImage()方法,并将指定页面保存保存为Emf、Png
        System.Drawing.Image emf = doc.SaveAsImage(0, Spire.Pdf.Graphics.PdfImageType.Bitmap);
        System.Drawing.Image zoomImg = new Bitmap((int)(emf.Size.Width * 2), (int)(emf.Size.Height * 2));
        using (Graphics g = Graphics.FromImage(zoomImg))
        {
          g.ScaleTransform(2.0f, 2.0f);
          g.DrawImage(emf, new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), emf.Size), new System.Drawing.Rectangle(new System.Drawing.Point(0, 0), emf.Size), GraphicsUnit.Pixel);
          zoomImg.Save(path2, ImageFormat.Jpeg);

          zoomImg.Dispose();
          emf.Dispose();
          bmp.Dispose();
        }
        doc.Close();
        doc.Dispose();
      }
    }

我主要也就用到这些,之后在发现,我在往上加  

https://www.jb51.net/dll/O2S.Components.PDFRender4NET.dll.html

  这个是O2S.Components.PDFRender4NET的文件,我看评论里有问的,之前忘记发了,网上有的是收费的,Nuget里面带后缀的我没用过。

到此这篇关于.Net 对于PDF生成以及各种转换的操作的文章就介绍到这了,更多相关.Net PDF生成内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文作者:沉_默
本文链接:https://www.cnblogs.com/silentCM/p/13130333.html

(0)

相关推荐

  • ASP.NET实现将word文档转换成pdf的方法

    本文实例讲述了ASP.NET实现将word文档转换成pdf的方法,分享给大家供大家参考.具体实现步骤如下: 一.添加引用 复制代码 代码如下: using Microsoft.Office.Interop.Word; 二.转换方法   1.方法 复制代码 代码如下: /// <summary>     /// 把Word文件转换成pdf文件     /// </summary>     /// <param name="sourcePath">需要转

  • ASP.NET MVC 项目直接预览PDF文件

    背景及需求 项目使用的是MVC4框架,其中有一个功能是根据设置生成PDF文件,并在点击时直接预览. 实现过程 1.第一版实现代码: HTML内容 @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> &

  • ASP.NET Core中快速构建PDF文档的步骤分享第1/2页

    比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本文中我们将要使用DinkToPDF来处理我们在.NET Core Web 程序中进行构建PDF文档!就现在我们不多说,直接开始有趣的部分. 前言# 您可以通过创建PDF文档在我的仓库中,获取源代码,欢迎给个免费的Star... 现在我们创建一个.NET Core 3.0 项目,至于是mvc.Api.

  • asp.net实现将ppt文档转换成pdf的方法

    本文实例讲述了asp.net实现将ppt文档转换成pdf的方法.分享给大家供大家参考.具体实现方法如下: 一.添加引用 复制代码 代码如下: using Microsoft.Office.Core; using Microsoft.Office.Interop.PowerPoint; 二.转换方法 复制代码 代码如下: ///<summary>        /// 把PowerPoint文件转换成PDF格式文件       ///</summary>        ///<

  • asp.net 按指定模板导出word,pdf实例代码

    复制代码 代码如下: /// <summary>        /// 导出word文件        /// </summary>        /// <param name="templateFile">模板路径</param>        /// <param name="fileNameWord">导出文件名称</param>        /// <param name=&q

  • ASP.NET保存PDF、Word和Excel文件到数据库

    在项目中,有时候我们很需要把PDF.Word和Excel文档等等上传到数据库,以便日后使用.今天这篇文章向大家讲解如何将这些文件保存到数据库的. 详细步骤 第一步:打开数据库,单击新建查询,创建一个名称为Documents的表: 代码如下: create table Documents ( SNo int identity, Name_File varchar(100), DisplayName varchar(50), Extension varchar(10), ContentType va

  • .Net 对于PDF生成以及各种转换的操作

    前段时间公司的产品,要做一个新功能,签章(就是把需要的数据整理成PDF很标准的文件,然后在盖上我们在服务器上面的章) 然后我就在百度上找了找,发现搞PDF的类库很少,要么就要钱,要么就有水印,破解版的没找到. 先讲一讲我是怎么生成PDF的 1.生成PDF 这里用到了Spire.Pdf 这个类库可以在NuGet里面搜索到,上面带个小红标的就是免费版本. 当然也可以去他们的官网,上面还有文档(https://www.e-iceblue.cn/Introduce/Spire-PDF-NET.html)

  • PHP使用imagick读取PDF生成png缩略图的两种方法

    一.ImageMagick是什么ImageMagick是一套功能强大.稳定而且免费的工具集和开发包,可以用来读.写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式.利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小.旋转.锐化.减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存.二.php_imagick什么一个可以供PHP调用ImageMagick功

  • 利用JAVA反射,读取数据库表名,自动生成对应实体类的操作

    本代码是利用java反射,读取数据库表自动根据表名生成实体类,数据库采用老牌SQLSERVER 2000,驱动为JTDS,其他数据库可根据情况自定修改. 代码中包含了大部分数据库类型与JAVA类型的转换,少数未包含进去的会在生成代码时打印出来,方面后期查找修改. import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.sq

  • jQuery动态生成的元素绑定事件操作实例分析

    本文实例讲述了jQuery动态生成的元素绑定事件操作.分享给大家供大家参考,具体如下: 这段时间在写代码的时候遇到一个问题,通过append()添加的节点,点击事件不起作用.当时我百思不得其解,各种找错都没找到错误的原因.后来才发现是动态生成节点的问题,还是自己没有经验啊. 下面来总结一下这个问题的始末,温故而知新. 先看下click绑定事件的效果. <div> <p>a</p> <p>b</p> <p>c</p> <

  • java字节字符转换流操作详解

    本文实例讲述了java字节字符转换流操作.分享给大家供大家参考,具体如下: 一 基本概念 1.认识文本和文本文件 java的文本(char)是16位无符号,是字符的unicode编码(双字节编码) 文件是byte byte byte 的数据序列 文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果. 2.字符流(Reader Writer)---操作的都是文本文件 字符的处理:一次处理一个字符 字符的底层任然是基本的字节序列 3.字符流

  • mybatis generator只能生成insert和selectAll的操作

    一般出现这个情况的时候,怎么办? 第一步:不要慌,保持冷静的思考和清醒的头脑,这很关键! 第二步:打开浏览器,搜索一下:Cannot obtain primary key information from the database, generated objects may be incomplete这个错误, 遇到这种情况的时候,代码生成器就只会生成insert和selectAll这两个方法,这个时候需要在jdbc配置的connectionURL上加上一个参数:nullCatalogMean

  • Java读取OpenSSL生成的PEM公钥文件操作

    JDK8的JCE是不支持读取PEM文件的.需要使用bouncycastle. 项目需求,使用SHA1WithRSA算法,对接口数据做签名. 代码如下: @Service class SignService { private static Logger LOG = LoggerFactory.getLogger(SignService.class); @Autowired private Config config; private Signature signature; @PostConst

  • VUE前端从后台请求过来的数据进行转换数据结构操作

    我就废话不多说了,大家还是直接看代码吧` let label(){ let _this = this; let _offset = (_this.pagination.currentPage - 1) * _this.pagination.pageSize let params ={ offset:_offset,//分页偏移量 limit:_limit,//分页查询数量 } labelView(",params).then(res=>{ _this.list = res.data.dat

  • phonegap教程使用jspdf库在应用中生成pdf文件(pdf生成方法)

    首先在命令行创建一个PhoneGap工程 复制代码 代码如下: phonegap create . "jspdf.sample" "JSPDF App"phonegap local plugin add org.apache.cordova.filephonegap local plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-console.git 然后,下载JSPDF代码 down

  • xorm根据数据库生成go model文件的操作

    你懂的,手工翻译表定义到go结构体是很枯燥的. so,用xorm搞定. go get github.com/go-xorm/cmd/xorm 安装以下依赖,用到哪个装哪个. github.com/go-xorm/xorm 驱动 Mysql: github.com/go-sql-driver/mysql Postgres: github.com/lib/pq SQLite: github.com/mattn/go-sqlite3 MSSQL: github.com/denisenkom/go-ms

随机推荐