正常行驶的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中添加二维码无法扫描解决方案的更多相关文章

  1. PDF文件添加二维码水印教程

    maven配置iText的jar,主要不是所有私服都有iText的jar,maven仓库没有的,可以去https://mvnrepository.com/artifact/com.itextpdf/i ...

  2. FastReport 中添加二维码功能.(Delphi)

    http://www.cnblogs.com/fancycloud/archive/2011/07/24/2115240.html FastReport 中添加二维码功能.(Delphi)   在实际 ...

  3. flask 文件转为pdf并添加二维码

    背景: 宝安区需求,企业会下载表格,打印后填报.填报后收上表格,统一录入PDA.因为某台PDA只能录某个地方的表格,所以他们希望纸质表上有个二维码,扫描出现填报公司的一些信息,以及统计(好像是这样,没 ...

  4. 【转】 Android 基于google Zxing实现对手机中的二维码进行扫描--不错

    原文网址:http://blog.csdn.net/xiaanming/article/details/14450809 转载请注明出处:http://blog.csdn.net/xiaanming/ ...

  5. Android 基于google Zxing实现对手机中的二维码进行扫描

    转载请注明出处:http://blog.csdn.net/xiaanming/article/details/14450809 有时候我们有这样子的需求,需要扫描手机中有二维码的的图片,所以今天实现的 ...

  6. Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 现在的二维码可谓是烂大街了,到处都是二维码,什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

  7. Android下二维码的扫描

    Android平台下 二维码的扫描一般采用: Zxing:参考地址 Zxing功能比较强大,支持条形码和二维码的扫描,用的人也比较多,但是Zxing太大,一般开发简单的app,用起来比较麻烦. 所以网 ...

  8. 关于JAVA实现二维码以及添加二维码LOGO

    今天在公司,完成了之前的任务,没有什么事做,就想鼓捣一下二维码,因为之前没有接触过,我就去翻看了几本书,也基本完成了二维码的实现,以及添加二维码的LOGO. 现在绘制二维码一般都使用的是谷歌的zxin ...

  9. QRCode 扫描二维码、扫描条形码、相册获取图片后识别、生成带 Logo 二维码、支持微博微信 QQ 二维码扫描样式

    目录 功能介绍 常见问题 效果图与示例 apk Gradle 依赖 布局文件 自定义属性说明 接口说明 关于我 功能介绍 根据之前公司的产品需求,参考 barcodescanner 改的,希望能帮助到 ...

  10. 【转】如何在您的PCB大作上添加二维码?

    开篇先给大家来段新闻截选: “8月20日,新加坡总理李显龙在国庆群众大会上演讲时,称中国移动支付(电子支付)领先全球,新加坡的移动支付还很落后,上海路边摊都有移动支付,新加坡人去上海就像乡巴佬. 这番 ...

随机推荐

  1. TS学习笔记

    类型 类型 例子 描述 number 1,2,-2 任意数字 string 'hi',"hi" 任意字符串 boolean true,false 布尔值或者true false 字 ...

  2. 青少年CTF-Web-Robots

    题目信息 题目名称:Robots 题目描述:昨天十三年社团讲课,讲了Robots.txt的作用,小刚上课没有认真听课正在着急,你能不能帮帮忙? 题目难度:一颗星 解题过程 访问题目链接 浏览器里是空白 ...

  3. 1.【窗口组件】小部件-QWidgt

    一.前言 QWidget翻译过来是小部件的意思,QWidgt 类是所有用户界面对象的基类. 窗口部件是用户界面的一个基本单元:它从窗 口系统接收鼠标.键盘和其它事件,并且在屏幕上绘制自己.每一个窗口部 ...

  4. MySQL 中一条 sql 的执行过程

    一条 SQL 的执行过程 前言 查询 查询缓存 分析器 优化器 执行器 数据更新 日志模块 redo log (重做日志) binlog (归档日志) undo log (回滚日志) 两阶段提交 为什 ...

  5. 行为型模式 - 命令模式Command

    模式的定义与特点 命令模式(Command Pattern),是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化.命令模式是把发出命令的责任和执行命令的责任分割开,委派给不同的对象. ...

  6. 【分析笔记】Linux tasklet 机制的理解

    Tasklet 介绍 Linux 内核提供的四种中断下半部中 softirq(软中断).tasklet(小任务).workqueue(工作队列) .request thread(中断线程)中的其中一种 ...

  7. SpringBoot实现电子文件签字+合同系统

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  8. python自动发布

    import os import paramiko baseconfig = { "ip": "121.4.38.187", "port": ...

  9. html 引入 js 代码的几种方式

    一.普通加载 <script src="./abc.js"></script> 二.内嵌 <script> JavaScript 代码 < ...

  10. configurable 神图

    自己做的