pdf中添加二维码无法扫描解决方案
正常行驶的bitmap类型的二维码格式,加载到PDF中,将会导致二维码失真,无法扫描。
矢量图可根据尺寸大小进行调节,不会出现失真模糊情况
所用依赖
<PackageReference Include="FreeSpire.PDF" Version="8.6.0" />//操作PDF依赖
<PackageReference Include="QRCoder" Version="1.4.3" />//生成二维码SVG依赖
//以下为代码说明
#region 生成svg格式的矢量二维码
public static string GetSvgQRCode(string plainText, int pixel)
{
var generator = new QRCodeGenerator();
var qrCodeData = generator.CreateQrCode(plainText, QRCodeGenerator.ECCLevel.Q);
var qrcode = new SvgQRCode(qrCodeData);
return qrcode.GetGraphic(pixel);
}
#endregion
#region
//生成并保存矢量图
public IActionResult GetSvgQRPic()
{
var svgText = QRCodeService.GetSvgQRCode("http://www.baidu.com", 15); string svgName = $"{Guid.NewGuid().ToString()}.svg";
string filePath = "E:\\ZGQM\\QRCODE\\"+ svgName;
System.IO.File.WriteAllText(filePath, svgText);
byte[] byts = System.IO.File.ReadAllBytes(filePath);
return File(byts, "image/svg", svgName);
}
public IActionResult SvgTOPdf()
{
string pdfname = "shuangcengSingle.pdf";
string rootPath = "E:\\ZGQM\\QRCODE\\";
//加载示例SVG图片
PdfDocument doc1 = new PdfDocument();
doc1.LoadFromSvg(rootPath + "a2.svg");
//加载示例PDF文档
PdfDocument doc2 = new PdfDocument();
doc2.LoadFromFile(rootPath + pdfname);
//设置图片在文档中的位置和大小59
var pdfwidth = doc2.Pages[0].Size.Width;
var pdfheight = doc2.Pages[0].Size.Height;
//计算两厘米二维码的磅值
double zb = 0;
if(pdfwidth<=pdfheight)
zb = 20 / (pdfwidth * 25.4 / 72);
else
zb = 20/ (pdfheight * 25.4 / 72);
double twocodezb = zb * (pdfwidth<= pdfheight?pdfwidth:pdfheight);
int twotruecode = Convert.ToInt32(Math.Round(twocodezb));
var doctemp = doc1.Pages[0].CreateTemplate();//创建蒙版
var p2 = new System.Drawing.PointF(0, 0);
var di = new System.Drawing.SizeF(twotruecode, twotruecode);
PdfCanvas d2z = doc2.Pages[0].Canvas;
d2z.DrawTemplate(doctemp, p2, di);//通过比例大小进行绘制二维码到PDF
//保存PDF文档
doc2.SaveToFile(rootPath + "AddSVGImagetoPDF-"+pdfname+".pdf", FileFormat.PDF);
doc1.Close();
doc2.Close();
return null;
}
#endregion
以上可实现将矢量图进行绑定到PDF中,并且保证不失真。
参考部分连接
https://www.e-iceblue.cn/pdf_java_conversion/convert-svg-to-pdf-and-add-a-svg-image-to-pdf-in-java.html
https://cloud.tencent.com/developer/article/1518580?from=15425&areaSource=102001.24&traceId=X5ThA0l7o2dpqbZKzQB2_
pdf中添加二维码无法扫描解决方案的更多相关文章
- PDF文件添加二维码水印教程
maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/i ...
- FastReport 中添加二维码功能.(Delphi)
http://www.cnblogs.com/fancycloud/archive/2011/07/24/2115240.html FastReport 中添加二维码功能.(Delphi) 在实际 ...
- flask 文件转为pdf并添加二维码
背景: 宝安区需求,企业会下载表格,打印后填报.填报后收上表格,统一录入PDA.因为某台PDA只能录某个地方的表格,所以他们希望纸质表上有个二维码,扫描出现填报公司的一些信息,以及统计(好像是这样,没 ...
- 【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/14450809 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- Android 基于google Zxing实现对手机中的二维码进行扫描
转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 有时候我们有这样子的需求,需要扫描手机中有二维码的的图片,所以今天实现的 ...
- Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系
Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...
- Android下二维码的扫描
Android平台下 二维码的扫描一般采用: Zxing:参考地址 Zxing功能比较强大,支持条形码和二维码的扫描,用的人也比较多,但是Zxing太大,一般开发简单的app,用起来比较麻烦. 所以网 ...
- 关于JAVA实现二维码以及添加二维码LOGO
今天在公司,完成了之前的任务,没有什么事做,就想鼓捣一下二维码,因为之前没有接触过,我就去翻看了几本书,也基本完成了二维码的实现,以及添加二维码的LOGO. 现在绘制二维码一般都使用的是谷歌的zxin ...
- QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式
目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...
- 【转】如何在您的PCB大作上添加二维码?
开篇先给大家来段新闻截选: “8月20日,新加坡总理李显龙在国庆群众大会上演讲时,称中国移动支付(电子支付)领先全球,新加坡的移动支付还很落后,上海路边摊都有移动支付,新加坡人去上海就像乡巴佬. 这番 ...
随机推荐
- Mybatis-plus实现数据库的增删改查操作
目录 1.MybatisPlus简介 2.MybatisPlus注解介绍 3.常用方法 4.SpringBoot整合MybatisPlus实现增删改查的一个简单Demo 5.参考资料 1.Mybati ...
- Codeforces Hello 2023 CF 1779 A~F 题解
点我看题 A. Hall of Fame 先把不用操作就合法的情况判掉.然后发现交换LL,RR,RL都是没用的,只有交换LR是有用的,这样可以照亮相邻的两个位置.所以我们就是要找到一个位置i,满足\( ...
- [Leetcode]环形链表 II
题目 代码 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * Li ...
- Ansible 学习笔记 - 定位主机和组的模式
中英文对照表 英文 中文 备注 host 主机 group (主机)组 pattern 模式 ad hoc 特别命令 playbook 剧本 Ansible 专有名词,一段复杂的编排 inventor ...
- jQuery查找标签、操作标签、事件和动画效果,Bootstrap页面框架的介绍和使用讲解
今日内容 jQuery查找标签 1.基本选择器: $('#d1') id选择器 $('.c1') class选择器 $('div') 标签选择器 2.组合选择器: $('div#d1') 查找id是d ...
- SOFAJRaft模块启动过程
本篇文章旨在分析SOFAJRaft中jraft-example模块的启动过程,由于SOFAJRaft在持续开源的过程中,所以无法保证示例代码永远是最新的,要是源代码有较大的变动,亦或出现纰漏.错误的地 ...
- 初探富文本之OT协同实例
初探富文本之OT协同实例 在前边初探富文本之OT协同算法一文中我们探讨了为什么需要协同.为什么仅有原子化的操作并不能实现协同.为什么要有操作变换.如何进行操作变换.什么时候能够应用操作.服务端如何进行 ...
- 使用docker安装hadoop(已实现)
1.拉镜像 这里推荐第一个 docker pull registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base 或者 docker pull q ...
- drf-day1——web应用模式、API接口、接口测试工具postman
目录 学习资料 一.web 应用模式 二.API接口 API概念 三.接口测试工具postman postman介绍 postman下载与使用 四.如何在浏览器中测试 学习资料 # 个人博客:http ...
- ASP.NET Core - IStartupFilter 与 IHostingStartup
1. IStartupFilter 上面讲到的方式虽然能够根据不同环境将Startup中的启动逻辑进行分离,但是有些时候我们还会可以根据应用中的功能点将将一系列相关中间件的注册封装到一起,从 St ...