当前位置: 首页 > news >正文

C#基于SkiaSharp实现印章管理(11)

  PdfSharpCore支持类似GDI+方式在PDF页面绘制文字、矩形、圆形、多边形、路径、图片等内容,本文学习基于PdfSharpCore将结构化印章数据导出为PDF文件的基本用法,评估其使用可行性。
  PdfSharpCore创建PDF文件很方便,调用PdfDocument类创建实例对象并调用AddPage添加页面即可(参考文献3)。从使用示例来看,页面尺寸可以通过Size属性设置常用页面尺寸,也可以直接设置Width和Height属性自定义尺寸(单位为点,Size属性值为Undefined)。

 PdfDocument document = new PdfDocument();PdfPage page = document.AddPage();page.Size= PageSize.A6;

  PdfSharpCore的DrawImage支持向页面绘制图片,比较简单的导出PDF文件的方式是创建空白PDF页面,然后将结构化印章数据先导出为图片,再将图片绘制到PDF页面,本文不具体展开这种方式。
  另一种方式是改造基于SkiaSharp的绘图函数,将其中的各类绘制边框及填充形状的函数改造成适合PdfSharpCore的调用方式。从改造过程来看,PdfSharpCore类似于GDI+的数据类型、绘图函数,和SkiaSharp的绘制方式有一定区别,主要包括:
  1)SkiaSharp通过SKPaint的Style属性(Fill、Stroke、StrokeAndFill)设置绘制边框及填充形状,而PdfSharpCore的绘图函数通过调用XPen和XBrush参数区分,调用XPen参数为绘制边框,调用XBrush为填充形状,两者同时调用则同时绘制边框及填充形状;
  2)SkiaSharp绘制圆形调用DrawCircle,绘制参数包括圆心坐标及半径,绘制椭圆调用DrawOval,绘制参数为圆心坐标及长短边半径,而PdfSharpCore使用DrawEllipse函数绘制圆形或椭圆,绘制参数为包括圆形或椭圆的外协矩形;
  3)SkiaSharp提供了沿路径绘制文本的便捷函数DrawTextOnPath,但目前暂未在PdfSharpCore中找到类似函数;
  4)SkiaSharp的默认单位为像素,而PdfSharpCore的单位默认为点;
  5)SkiaSharp通过SKPaint.Typeface属性设置文本字体,中英文都支持,而PdfSharpCore中使用XFont设置字体,但暂时没有找到设置中文字体的方式(设置为中文字体时显示为方框),只能绘制英文文本。

  最后是测试程序效果,除了沿路径绘制文本之外,其它图形或文字的效果如下图所示,在SkiaSharp控件中显示的效果和使用PdfSharpCore模块导出为PDF文件的效果差不多(文字的对齐效果还没有搞清楚,文字对齐有点不一样)。
在这里插入图片描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/fbc3a406f6d34f7e9ffa9b39fa2a0fa9.png

在这里插入图片描述

参考文献:
[1]https://blog.csdn.net/gc_2299/article/details/80501805
[2]https://www.cnblogs.com/haogj/p/15975918.html
[3]https://docs.pdfsharp.net/PDFsharp/Topics/Start/About.html

http://www.lryc.cn/news/467515.html

相关文章:

  • Spring使用@Async出现循环依赖原因以及解决方案
  • 如何训练 RAG 模型
  • 鸿蒙网络编程系列34-Wifi热点扫描及连接示例
  • LVS三种模式工作原理
  • 【二轮征稿启动】第三届环境工程与可持续能源国际会议持续收录优质稿件
  • 网络安全——防火墙技术
  • Missing classes detected while running R8报错解决方案
  • 智能指针
  • 通过DevTools逃离Chrome沙盒(CVE-2024-6778和CVE-2024-5836)
  • 手持无人机飞手执照,会组装调试入伍当兵有多香!
  • 项目经理好累好烦啊,不想干了....
  • 论技术人员“技术人格”的重要意义
  • Kafka异常重试方案小记
  • 非页面缓冲池占用过高处理方法
  • 【Linux】进程信号(下)
  • FlinkCDC 实现 MySQL 数据变更实时同步
  • JavaWeb——Maven(4/8):Maven坐标,idea集成-导入maven项目(两种方式)
  • 实现uniapp天地图边界范围覆盖
  • 思科网络设备命令
  • Egg.js使用ejs快速自动生成resetful风格的CRUD接口
  • 自动化抖音点赞取消脚本批量处理
  • 基于YOLOv8深度学习的智能车牌检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
  • qt QGraphicsGridLayout详解
  • 数字处理系列
  • 基于开源Jetlinks物联网平台协议包-MQTT自定义主题数据的编解码
  • 【Python】Python2.7升级Python3
  • Python 内置函数 round() 详解
  • JavaScript入门中-流程控制语句
  • kconfig语法(一)
  • 十七、行为型(命令模式)