广告
返回顶部
首页 > 资讯 > 精选 >C#如何利用PdfSharp生成Pdf文件
  • 742
分享到

C#如何利用PdfSharp生成Pdf文件

2023-06-14 09:06:04 742人浏览 独家记忆
摘要

这篇文章给大家分享的是有关C#如何利用pdfSharp生成Pdf文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PdfSharp一款开源的用于创建,操作PDF文档的.net类库。PdfSharp下载在本例中,主

这篇文章给大家分享的是有关C#如何利用pdfSharp生成Pdf文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

PdfSharp一款开源的用于创建,操作PDF文档的.net类库。

PdfSharp下载

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

C#如何利用PdfSharp生成Pdf文件

涉及知识点

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

  1. PdfDocument : 表示一个PDF文档对象,调用save方法保存文档到指定路径。

  2. PdfPage : 表示PDF文档中的一页。

  3. XGraphics:表示页面上的绘制对象,所有的页面内容,都可通过此对象绘制。如:DrawString绘制文本内容,DrawLine绘制直线等。

  4. XFont:绘制文本的字体,字体名称只能取C:\windows\Fonts目录下的ttf字体文件,不能是ttc格式的字体。

  5. XTextFORMatter:表示一个简单的文本字体格式,如识别文本的换行符而实现自动换行等内容。

文档示例图

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

C#如何利用PdfSharp生成Pdf文件

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

C#如何利用PdfSharp生成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文件”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: C#如何利用PdfSharp生成Pdf文件

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

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

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

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

下载Word文档
猜你喜欢
  • C#如何利用PdfSharp生成Pdf文件
    这篇文章给大家分享的是有关C#如何利用PdfSharp生成Pdf文件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。PdfSharp一款开源的用于创建,操作PDF文档的.Net类库。PdfSharp下载在本例中,主...
    99+
    2023-06-14
  • C# 利用PdfSharp生成Pdf文件的示例
    目录PdfSharp下载 涉及知识点 文档示例图 核心代码 PdfSharp一款开源的用于创建,操作PDF文档的.Net类库,本文以一个简单的小例子,简述如何通过PdfSharp进行...
    99+
    2022-11-12
  • 如何利用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如何生成pdf文件
    这篇“JAVA如何生成pdf文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JAVA如何生成pdf文件”文章吧。一、简介P...
    99+
    2023-07-04
  • 如何在Java中利用iTextPDF生成一个PDF文件
    这篇文章主要介绍了如何在Java中利用iTextPDF生成一个PDF文件,编程网小编觉得不错,现在分享给大家,也给大家做个参考,一起跟随编程网小编来看看吧!Java可以用来干什么Java主要应用于:1. web开发;2. Android开发...
    99+
    2023-06-06
  • 使用mpdf生成pdf文件
    本文主要需求是将html页面转换为pdf文档 1、安装mpdf工具类 (composer方式) composer require mpdf/mpdf:8.0.3 2、控制器里调用 ...
    99+
    2023-09-23
    servlet javascript 前端
  • 使用Python生成pdf文件
        Python平台的优秀PDF报表类库Reportlab。它不属于Python的标准类库,所以必须手动下载类库包并安装:       yum install python-reportlab -y    这篇文章将介绍reportla...
    99+
    2023-01-31
    文件 Python pdf
  • 【Java】使用iText生成PDF文件
    iText介绍   iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。   项目要使用iT...
    99+
    2023-09-11
    java pdf python
  • Visual 中怎么利用C#生成DLL文件
    本篇文章给大家分享的是有关Visual 中怎么利用C#生成DLL文件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Visual C#生成DLL文件——预备知识DLL(Dynam...
    99+
    2023-06-17
  • php利用tcpdf生成签名盖章的pdf文件并支持中文
    下载tcpdf github 代码: ...
    99+
    2023-09-29
    pdf php
  • Nodejs中怎么利用Kue动态生成PDF文档
    Nodejs中怎么利用Kue动态生成PDF文档,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。先决条件您需要安装以下软件:Node.js最新稳定...
    99+
    2022-10-19
  • 【教程】如何使用Java生成PDF文档?
    在如今数字化时代,越来越多的人使用PDF文档进行信息传递和共享。而使用Java生成PDF文档也成为了一个非常重要的技能,因为Java作为一种通用的编程语言,可以在不同的操作系统和平台上运行。下面,我们将为您介绍如何使用Java生成PDF文档...
    99+
    2023-09-02
    java servlet jvm
  • 利用python程序生成word和PDF文档的方法
    一、程序导出word文档的方法 将web/html内容导出为world文档,再java中有很多解决方案,比如使用Jacob、Apache POI、Java2Word、iText等各种方式,以及使用freem...
    99+
    2022-06-04
    文档 程序 方法
  • Java中如何生成带有二维码的PDF文件?
    在现代社会,二维码已经成为了非常普遍的一种信息传递方式。而PDF文件也是一种非常常见的文档格式。那么,如何在Java中生成带有二维码的PDF文件呢?本文将为大家介绍一种基于iText库的方法。 iText是一个开源的Java PDF库,它...
    99+
    2023-06-24
    文件 二维码 shell
  • ASP.NET Core 5中如何生成PDF文档
    前言 大家用 ASP.NET Core 进行项目开发时,常会有生成 PDF 的需求,那如何生成呢?这篇文章我们就来讨论如何通过 DinkToPdf 来生成 PDF 文档,DinkTo...
    99+
    2022-11-11
  • 从Java应用程序动态生成PDF文件(转)
    从Java应用程序动态生成PDF文件(转)[@more@]如果应用程序需要动态生成 PDF 文档,则需要 iText 库。开放源码的 iText 库使 PDF 文档的创建能够在瞬间完成。本文介绍了 iText 并提供了使用它从 Java ...
    99+
    2023-06-03
  • C++利用GPAC实现生成MP4文件的示例代码
    目录一、MP4Writer类二、写h264流数据为mp4文件步骤三、写h265流数据为mp4文件步骤四、利用命令行生成mp4文件GPAC主要针对学生和内容创作者,代表了一个跨平台的多...
    99+
    2023-02-06
    C++ GPAC生成MP4文件 C++生成MP4文件 C++ GPAC MP4
  • eml文件如何转换成pdf
    本篇内容主要讲解“eml文件如何转换成pdf”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“eml文件如何转换成pdf”吧! eml文件转换成pdf的方法 1...
    99+
    2023-01-03
    pdf eml文件
  • 利用exe4j生成java的exe文件
    使用集成开发工具IDEA生成jar文件 1. File—>Project Structure 2. Artifacts—>加号—>JAR—>From mod...
    99+
    2022-11-12
  • Python如何提取PDF指定内容并生成新文件
    小编给大家分享一下Python如何提取PDF指定内容并生成新文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!01需求描述数据是一份有286页的上市公司公开年报P...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作