c# 在PDFsharp里绘制ZXing生成的条形码矢量图

news/2024/9/19 17:54:13/文章来源:https://www.cnblogs.com/redpod/p/18418255

PDFsharp支持 在pdf文档里生成矢量格式的二维码, 单支持的条码格式比较少,不支持常用的93码和二维码等。
ZXing 支持的条码多,但无法在PDFsharp里直接绘制矢量格式的图形。
这里一个扩展就可以 在PDFsharp里绘制ZXing生成的条形码矢量图了。

使用方法:

using PdfSharp.Drawing;
using PdfSharp.Pdf;
using ZXing;
using ZXing.Common;
using Extensions; //引入扩展PdfDocument newDocument = new PdfDocument(); // 创建pdf文档
PdfPage page = newDocument.AddPage();   //添加页面
XGraphics gfx = XGraphics.FromPdfPage(page); 
var barcodeWriter = new ZXing.BarcodeWriterGeneric
{Format = BarcodeFormat.CODE_93, //条码格式Options = new EncodingOptions { Height = 80, Width = 200 } //条码尺寸
};
var bitMatrix = barcodeWriter.Encode("24341873"); //条码内容
gfx.DrawBitMatrix(bitMatrix, new XPoint(100, 100));  //绘制条码
newDocument.Save("output.pdf");   //保存文件
newDocument.Close();

 

扩展: XGraphicsExtensions.cs

using PdfSharp.Drawing;
using ZXing.Common;
namespace Extensions
{public static class XGraphicsExtensions{public static void DrawBitMatrix(this XGraphics gfx, BitMatrix matrix, XPoint offset){if (matrix == null)return;int width = matrix.Width;int height = matrix.Height;var processed = new BitMatrix(width, height);bool currentIsBlack = false;int startPosX = 0;int startPosY = 0;//test border//gfx.DrawRectangle(new XPen(XColor.FromArgb(0, 0, 0), 0.5), new XRect(offset.X, offset.Y, matrix.Width, matrix.Height));for (int x = 0; x < width; x++){int endPosX;for (int y = 0; y < height; y++){if (processed[x, y])continue;processed[x, y] = true;if (matrix[x, y]){if (!currentIsBlack){startPosX = x;startPosY = y;currentIsBlack = true;}}else{if (currentIsBlack){FindMaximumRectangle(matrix, processed, startPosX, startPosY, y, out endPosX);var rect = new XRect(startPosX + offset.X, startPosY + offset.Y, endPosX - startPosX + 1, y - startPosY);gfx.DrawRectangle(XBrushes.Black, rect);currentIsBlack = false;}}}if (currentIsBlack){FindMaximumRectangle(matrix, processed, startPosX, startPosY, height, out endPosX);var rect = new XRect(startPosX + offset.X, startPosY + offset.Y, endPosX - startPosX + 1, height - startPosY);gfx.DrawRectangle(XBrushes.Black, rect);currentIsBlack = false;}}}private static void FindMaximumRectangle(BitMatrix matrix, BitMatrix processed, int startPosX, int startPosY, int endPosY, out int endPosX){endPosX = startPosX;for (int x = startPosX + 1; x < matrix.Width; x++){for (int y = startPosY; y < endPosY; y++){if (!matrix[x, y]){return;}}endPosX = x;for (int y = startPosY; y < endPosY; y++){processed[x, y] = true;}}}}
}

  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799280.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zblog后台编辑模块式时提示“UNKNOWN:未查询到相关数据

当您在 Z-Blog 后台编辑模块时收到“UNKNOWN:未查询到相关数据”的提示,这通常表示在尝试获取或更新数据时出现了问题。以下是一些可能的原因及解决方法: 1. 检查数据库连接问题描述:数据库连接失败或不稳定。 解决方法:确认数据库连接信息(如服务器地址、端口、用户名和密…

zblog后台登陆错误的解决方法

1. 检查登录地址问题描述:使用错误的后台登录地址导致无法登录。 解决方法:确认您使用的是正确的后台登录地址。通常,Z-Blog 的后台登录地址为 域名/zblog/admin.php 或 域名/zb_system/login.php。 如果您使用的是旧地址(如 域名/zb_system/admin),请尝试使用上述正确的…

zblog上传文件出现未知错误 大小不能超过200k

当您在使用 Z-Blog 上传文件时遇到“未知错误”,并且发现上传的文件大小不能超过 200KB,这通常是由几个因素造成的。下面是一些可能的原因及解决方法: 1. 检查 PHP 配置问题描述:PHP 的配置限制了上传文件的大小。 解决方法:编辑服务器上的 php.ini 文件,增加 upload_max…

2024_CCPC网络赛I题

2024_CCPC网络赛I题题解 DP题目2024_CCPC网络赛I题 题目链接 思路time为1s,n==200,可以\(n^3\)做法。可以想到枚举每一个时间间隔。原先的思路是对于每一个确定的时间,比如x,通过某种dp求出来时间为x的时候的方案数目。所以比赛的时候一直卡在这里没做出来。有一个小trick:…

Z-Blog提示数据库连接错误的原因

Z-Blog 提示数据库连接错误的原因可能有多个,以下是一些常见的原因及其解决方法:数据库连接信息错误:数据库服务器地址、端口、数据库名称、用户名或密码输入错误。 解决方法:检查数据库连接信息是否正确,并确保数据库用户具有足够的权限来连接数据库。数据库服务未启动:…

安装zblog提示数据库连接失败,怎么解决

当安装 Z-Blog 时提示数据库连接失败,可以尝试以下步骤来解决这个问题:检查数据库连接信息:确认数据库服务器地址、数据库名称、用户名和密码是否正确无误。 检查数据库连接字符串中的端口号是否正确,以及是否需要使用端口号。确认数据库服务状态:确认数据库服务正在运行。…

zblog后台访问不了应用中心的解决办法

当您遇到 Z-Blog 后台无法访问应用中心的问题时,可以从以下几个方面着手解决:检查网络连接:确保服务器能够访问互联网,并且没有防火墙或安全设置阻止对外部站点的访问。检查服务器配置:确认服务器是否允许远程访问应用中心的服务器地址 app.blogcn.net。如果服务器上有任何…

zblog水印插件上传图片提示getimagesize

当您在使用 Z-Blog 的水印插件上传图片时遇到 getimagesize 的错误提示,这通常意味着 PHP 在尝试获取图片信息时出现了问题。getimagesize 函数用于获取图像尺寸和其他信息,如果它无法正常工作,可能是由于以下几个原因:文件类型不支持:getimagesize 不支持所有类型的图像文…

zblog后台的应用中心登录提示错误解决方法

Z-Blog 后台应用中心登录提示错误的情况时,可以尝试以下几种解决方法:检查应用中心插件版本:登录 Z-Blog 后台,进入“应用中心”页面,检查是否有应用中心插件的更新可用。 如果有更新,尝试升级应用中心插件到最新版本。检查网络连接:确保服务器能够访问互联网,并且没有…

Ros2 - Moveit2 - MoveItCpp

MoveItCpp 教程 介绍 MoveItCpp 是一个新的高级接口,一个统一的 C++ API,不需要使用 ROS 操作、服务和消息来访问核心 MoveIt 功能,并且是现有MoveGroup API的替代方案(不是完全替代) ,我们建议需要更多实时控制或行业应用的高级用户使用此接口。PickNik Robotics 已根据…

ZBLOG错误原因:数据库连接错误

当您在使用 Z-Blog 时遇到“数据库连接错误”,这可能是由多种原因引起的。根据过去的经验和提供的信息,以下是一些可能的原因及解决方案:权限问题:确保数据库用户拥有足够的权限来连接数据库以及执行必要的读写操作。 检查数据库连接配置文件中的用户名和密码是否正确。文件…

Z-blog上传文件时出现未知错误

当在使用 Z-Blog 上传文件时遇到未知错误,可以尝试以下几个方面来诊断和解决问题:检查文件格式:确保上传的文件格式是 Z-Blog 支持的。常见的支持格式包括 JPEG、PNG 和 GIF。如果你上传的是其他格式的文件,可能就会导致上传失败。检查文件大小:Z-Blog 对上传文件的大小有…