正常行驶的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. vulnhub靶场之IA: KEYRING (1.0.1)

    准备: 攻击机:虚拟机kali.本机win10. 靶机:IA: KEYRING (1.0.1),下载地址:https://download.vulnhub.com/ia/keyring-v1.01.o ...

  2. 使用Prometheus监控docker compose方式部署的ES

    需求 收集 ES 的指标, 并进行展示和告警; 现状 ES 通过 docker compose 安装 所在环境的 K8S 集群有 Prometheus 和 AlertManager 及 Grafana ...

  3. [C++]std::sort()函数使用总结

    函数声明 template< class RandomIt, class Compare > constexpr void sort( RandomIt first, RandomIt l ...

  4. 【Vue3.0】关于 script setup 语法糖的用法

    script setup - 简介 先来看一看官网关于 <script setup> 的介绍: 要彻底的了解 setup 语法糖,你必须先明确 setup() 这个 组合式API 官网中对 ...

  5. AtCoder Beginner Contest 282 G - Similar Permutation

    套路题 题意 求有多少个 \(1\) 到 \(n\) 的排列满足恰有 \(k\) 对在排列中相邻的数满足前小于后 \(2 \leq n \leq 500, 0 \leq k \leq (n - 1)\ ...

  6. 【学习笔记】Tarjan 图论算法

    - 前言 本文主要介绍 Tarjan 算法的「强连通分量」「割点」「桥」等算法. 争取写的好懂一些. - 「强连通分量」 - 何为「强连通分量」 在有向图中,如果任意两个点都能通过直接或间接的路径相互 ...

  7. CAN2-CH32V307CAN2使用说明与CAN波特率计算方法

    一.修改引脚 CH32V307CAN2的TX为PB13,RX为PB12 注意用CAN2时需要初始化CAN1的时钟. 二.配置CAN2过滤器开始的组(组号与图24-4相对应) 三.将FIFO0改为FIF ...

  8. Android第六次作业

    图片一 用内部存储实现文件写入和读取功能 <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  9. FAQ docker进程启动失败处理案例分享

    docker进程启动失败处理 背景 有同学反馈在启动docker的时候遇到了如下问题:docker启动报错 [root@wuxianfeng ~]# systemctl start docker Jo ...

  10. Arm-Linux子系统的互相Notify

    前言: Linux下面不同的子系统一个个的组成了整个系统的运行环节,为了让这些子系统能够互相通讯,有一种叫做:notify chain(通知链)的东西.本篇看下. 概括 所谓通知链,有通知,就有执行的 ...