广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# 利用PdfSharp生成Pdf文件的示例
  • 435
分享到

C# 利用PdfSharp生成Pdf文件的示例

2024-04-02 19:04:59 435人浏览 八月长安
摘要

目录pdfSharp下载 涉及知识点 文档示例图 核心代码 PdfSharp一款开源的用于创建,操作PDF文档的.net类库,本文以一个简单的小例子,简述如何通过PdfSharp进行

PdfSharp一款开源的用于创建,操作PDF文档的.net类库,本文以一个简单的小例子,简述如何通过PdfSharp进行创建PDF文档,仅供学习分享使用,如有不足之处,还请指正。

PdfSharp下载

在本例中,主要通过NuGet包管理器进行下载安装,目前PdfSharp版本为v1.5.0.5147,如下所示:

涉及知识点

在生成PDF文档过程中,主要知识点如下:

  1. PdfDocument : 表示一个PDF文档对象,调用save方法保存文档到指定路径。
  2. PdfPage : 表示PDF文档中的一页。
  3. XGraphics:表示页面上的绘制对象,所有的页面内容,都可通过此对象绘制。如:DrawString绘制文本内容,DrawLine绘制直线等。
  4. XFont:绘制文本的字体,字体名称只能取C:\windows\Fonts目录下的ttf字体文件,不能是ttc格式的字体。
  5. XTextFORMatter:表示一个简单的文本字体格式,如识别文本的换行符而实现自动换行等内容。

文档示例图

在本例中,主要是将页面内容写入PDF文件中,页面如下所示:

生成的PDF文件,如下所示:

核心代码

在本例中,核心代码主要包括如下几个部分:

  • 创建文档
  • 绘制文本
  • 绘制直线
  • 设置纸张大小,
  • 设置边界
  • 文本的自动换行

具体代码,如下所示:


/// <summary>
    /// 生成Pdf
    /// </summary>
    /// <param name="filePath"></param>
    /// <param name="bo"></param>
    /// <returns></returns>
    public bool GeneratePdf(string filePath, PdfBo bo) {
      int margin_left_right = 30;//左右边距
      int margin_top_bottom = 30;//上下边距
      //1. 定义文档对象
      PdfDocument document = new PdfDocument();
      //2. 新增一页
      PdfPage page = document.AddPage();
      // 设置纸张大小
      page.Size = PageSize.A4;
      //3. 创建一个绘图对象
      XGraphics gfx = XGraphics.FromPdfPage(page);
      XFont font = new XFont("华文宋体", 40, XFontStyle.Bold);
      //定制化内容开始
      int cur_x = 0 + margin_left_right;
      int cur_y = 0 + margin_top_bottom;
      //标题1
      gfx.DrawString(bo.Head1, font, XBrushes.Red, new XRect(cur_x, cur_y, page.Width-2*cur_x, 80), XStringFormats.Center);
      //序号
      font = new XFont("华文宋体", 12, XFontStyle.Regular);
      cur_y = cur_y + 80;
      gfx.DrawString(bo.No, font, XBrushes.Black, new XRect(cur_x, cur_y, 100, 20), XStringFormats.CenterLeft);
      //密级
      cur_x = cur_x + 200;
      gfx.DrawString(string.Format("密级[{0}]",bo.Private), font, XBrushes.Black, new XRect(cur_x, cur_y, 100, 20), XStringFormats.CenterLeft);
      //缓级
      cur_x = cur_x + 100;
      gfx.DrawString(string.Format("缓级[{0}]", bo.Speed), font, XBrushes.Black, new XRect(cur_x, cur_y, 100, 20), XStringFormats.CenterLeft);
      //签发人
      cur_x = cur_x + 100;
      gfx.DrawString(string.Format("签发人:{0}", bo.Person), font, XBrushes.Black, new XRect(cur_x, cur_y, 100, 20), XStringFormats.CenterLeft);
      //一条横线
      cur_x = 0 + margin_left_right;
      cur_y = cur_y + 20;
      XPen pen = new XPen(XColor.FromKnownColor(XKnownColor.Black), 1);
      gfx.DrawLine(pen, cur_x, cur_y, page.Width-cur_x, cur_y+2);
      //标题2
      font = new XFont("华文宋体", 20, XFontStyle.Regular);
      cur_y = cur_y + 10;
      gfx.DrawString(bo.Head2, font, XBrushes.Black, new XRect(cur_x, cur_y, page.Width-2*cur_x, 40), XStringFormats.Center);
      //抬头
      font = new XFont("华文宋体", 15, XFontStyle.Bold);
      cur_y = cur_y + 40;
      gfx.DrawString(bo.Title, font, XBrushes.Black, new XRect(cur_x, cur_y, page.Width, 40), XStringFormats.CenterLeft);
      //正文 ,自动换行
      cur_y = cur_y + 40;
      XTextFormatter tf = new XTextFormatter(gfx);
      font = new XFont("华文宋体", 12, XFontStyle.Regular);

      //测量当前内容下,一行可以多少个汉字
      int cnt = 0;
      int height = 0;
      for (int i = 0; i < bo.Content.Length; i++) {
        XSize xsize=gfx.MeasureString(bo.Content.Substring(0,i+1), font, XStringFormats.TopLeft);
        double width = xsize.Width;
        if (width >= page.Width - 2 * cur_x) {
          cnt = i; //表示一行可以放多少个汉字。
          height =(int) xsize.Height;
          break;
        }
      }
      cnt = cnt > 0 ? cnt : bo.Content.Length;//每一行多少汉字
      string[] arrContent = bo.Content.Split('\n');
      string new_content = "";
      int total_lines = 0;
      foreach (string content in arrContent) {
        if (content.Length <= cnt)
        {
          new_content+=string.Format("{0}\n",content);
          total_lines++;
        }
        else {
          string tmpContent = content;
          int lines = content.Length / cnt + 1;
          for (int j = 0; j < lines; j++) {
            tmpContent = tmpContent.Insert(j * cnt, "\n");
            total_lines++;
          }
          new_content += string.Format("{0}\n", tmpContent);
        }
      }
      int num = new_content.Length - new_content.Replace("\r", "").Length;
      //计算矩形
      XRect rect = new XRect(cur_x, cur_y, page.Width - 2 * cur_x, (total_lines+num)*(height+2));
      tf.DrawString(new_content, font, XBrushes.Black, rect, XStringFormats.TopLeft);
      //主题词
      cur_y = cur_y + (total_lines + num) * (height + 2) + 20;
      font = new XFont("华文宋体", 12, XFontStyle.Bold);
      gfx.DrawString(string.Format("主题词:{0}",bo.KeyWord), font, XBrushes.Black, new XRect(cur_x, cur_y, page.Width, 40), XStringFormats.CenterLeft);
      //再加一条横线
      cur_y = cur_y + 40;
      gfx.DrawLine(pen, cur_x, cur_y, page.Width - cur_x, cur_y + 2);
      cur_y = cur_y + 2;
      font = new XFont("华文宋体", 10, XFontStyle.Regular);
      gfx.DrawString(string.Format("{0}{1}",bo.Company, bo.Dept), font, XBrushes.Black, new XRect(cur_x, cur_y, page.Width-2*cur_x, 40), XStringFormats.CenterLeft);
      gfx.DrawString(DateTime.Now.ToString("yyyy 年 MM 月 dd 日 印发"), font, XBrushes.Black, new XRect(cur_x, cur_y, page.Width-2*cur_x, 40), XStringFormats.CenterRight);
      //水印开始
      font = new XFont("华文宋体", 20, XFontStyle.BoldItalic);
      // 计算长度
      var size = gfx.MeasureString(bo.Watermark, font);

      // 定义旋转中心
      gfx.TranslateTransform(page.Width / 2, page.Height / 2);
      gfx.RotateTransform(-Math.Atan(page.Height / page.Width) * 180 / Math.PI);
      gfx.TranslateTransform(-page.Width / 2, -page.Height / 2);

      // 字符样式
      var format = new XStringFormat();
      format.Alignment = XStringAlignment.Near;
      format.LineAlignment = XLineAlignment.Near;

      //画刷
      XBrush brush = new XSolidBrush(XColor.FromArgb(128, 255, 0, 0));
      for (int i = 0; i < 3; i++) {
        gfx.DrawString(bo.Watermark, font, brush,
        new XPoint((page.Width - size.Width) / (1.5+i*0.5), (page.Height - size.Height) / (1.5 + i * 0.5)),
        format);
      }
      //水印结束
      //6. 保存文档
      document.Save(filePath);
      return true;
    }

以上就是C# 利用PdfSharp生成Pdf文件的示例的详细内容,更多关于c# 生成Pdf文件的资料请关注编程网其它相关文章!

--结束END--

本文标题: C# 利用PdfSharp生成Pdf文件的示例

本文链接: https://www.lsjlt.com/news/122778.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C# 利用PdfSharp生成Pdf文件的示例
    目录PdfSharp下载 涉及知识点 文档示例图 核心代码 PdfSharp一款开源的用于创建,操作PDF文档的.Net类库,本文以一个简单的小例子,简述如何通过PdfSharp进行...
    99+
    2022-11-12
  • C#如何利用PdfSharp生成Pdf文件
    这篇文章给大家分享的是有关C#如何利用PdfSharp生成Pdf文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PdfSharp一款开源的用于创建,操作PDF文档的.Net类库。PdfSharp下载在本例中,主...
    99+
    2023-06-14
  • C++利用GPAC实现生成MP4文件的示例代码
    目录一、MP4Writer类二、写h264流数据为mp4文件步骤三、写h265流数据为mp4文件步骤四、利用命令行生成mp4文件GPAC主要针对学生和内容创作者,代表了一个跨平台的多...
    99+
    2023-02-06
    C++ GPAC生成MP4文件 C++生成MP4文件 C++ GPAC MP4
  • 如何利用java实现生成PDF文件
    目录1.PDF文件简介2.生成PDF2.1 基于freemarker框架实现HTML转PDF2.1.1 引入jar包依赖:2.1.2 创建html模板test_template:2....
    99+
    2022-11-13
    java生成pdf文档 java生成pdf文件表格 java生成pdf
  • 如何在Java中利用iTextPDF生成一个PDF文件
    这篇文章主要介绍了如何在Java中利用iTextPDF生成一个PDF文件,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java可以用来干什么Java主要应用于:1. web开发;2. Android开发...
    99+
    2023-06-06
  • C#生成EMF矢量图形文件示例详解
    目录前言原因实现绘制位置错误结论前言 公众号上有网友询问我如何生成 EMF 文件的问题: 本以为非常简单,我快速给出了解决方案: var bitmap = new Bitmap(6...
    99+
    2022-11-13
  • php利用tcpdf生成签名盖章的pdf文件并支持中文
    下载tcpdf github 代码: ...
    99+
    2023-09-29
    pdf php
  • Visual 中怎么利用C#生成DLL文件
    本篇文章给大家分享的是有关Visual 中怎么利用C#生成DLL文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Visual C#生成DLL文件——预备知识DLL(Dynam...
    99+
    2023-06-17
  • C#/VB.NET实现创建PDF/UA文件的示例代码
    目录1.什么是PDF/UA文件2.文件格式要求3.如何创建PDF/UA文件C#VB.NET1.什么是PDF/UA文件 PDF/UA,即Universally Accessible P...
    99+
    2022-11-13
  • 利用Java Apache POI 生成Word文档示例代码
    最近公司做的项目需要实现导出Word文档的功能,网上关于POI生成Word文档的例子很少,找了半天才在官网里找到个Demo,有了Demo一切就好办了。 package org.apache.poi.xwpf.usermodel; impo...
    99+
    2023-05-31
    apache poi word
  • 利用python程序生成word和PDF文档的方法
    一、程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freem...
    99+
    2022-06-04
    文档 程序 方法
  • 利用exe4j生成java的exe文件
    使用集成开发工具IDEA生成jar文件 1. File—>Project Structure 2. Artifacts—>加号—>JAR—>From mod...
    99+
    2022-11-12
  • C#实现文字视频生成器的示例代码
    目录前言实现功能开发环境实现代码实现效果前言 简单的描述下写这个软件的背景吧。之前短视频平台很火的时候,相信很多人都想进去分一杯羹,俺当然也不能免俗,但是人丑家穷又没才艺,咋办呢?看...
    99+
    2022-11-13
  • 利用Python自动生成PPT的示例详解
    在日常工作中,PPT制作是常见的工作,如果制作创意类PPT,则无法通过自动化的形式生成,因为创意本身具有随机性,而自动化解决的是重复性工作,两者有所冲突。 python-pptx是p...
    99+
    2022-11-11
  • vue生成文件目录结构的示例分析
    这篇文章主要介绍了vue生成文件目录结构的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。利用node和npm环境我们可以很快的搭建一...
    99+
    2022-10-19
  • 利用Python创建位置生成器的示例详解
    目录介绍开始步骤创建训练数据集创建测试数据集将合成图像转换回坐标放在一起结论介绍 在这篇文章中,我们将探索如何在美国各地城市的地图数据和公共电动自行车订阅源上训练一个快速生成的对抗网...
    99+
    2022-11-11
  • PHP实现生成Excel文件并导出的示例详解
    在现在的项目里,不管是电商项目还是别的项目,在管理端都会有导出的功能,比方说订单表导出,用户表导出,业绩表导出。这些都需要提前生成excel表,然后在导出,实际上是在代码里生成一张e...
    99+
    2023-01-11
    PHP生成Excel PHP导出Excel PHP Excel
  • c#使用Aspose打印文件的示例
    目录WrodToPDFExcelToPDFPPTToPDF图片ToPDFPDF文件打印最近在研究winform打印文件,需要支持word,excel,ppt,pdf,图片这几种格式,...
    99+
    2022-11-12
  • GEN 自动生成 GORM 模型结构体文件及使用示例
    GEN 自动生成 GORM 模型结构体文件及使用示例 背景 GEN 是一个基于 GORM 的安全 ORM 框架, 由字节跳动无恒实验室与 GORM 作者联合研发,主要功能说白了就是帮助生成数据表对应的...
    99+
    2023-09-06
    golang gorm gen mysql
  • C#操作文本文件应用的示例分析
    本篇文章给大家分享的是有关C#操作文本文件应用的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#操作文本文件应用实例:using System; ...
    99+
    2023-06-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作