如何对使用 jspdf 和 html2canvas 生成的文件进行 Base64 编码?

2023-11-26

我正在尝试对附加代码中生成的文档进行编码,但没有任何反应,不会生成错误,但也不会对文件进行编码,并且ajax request从未被执行过

正确的方法是什么?

    html2canvas(document.getElementById("workAreaModel"), {
    onrendered: function(canvas)
    {
        var img = canvas.toDataURL("image/png");
        var doc = new jsPDF("l", "pt", "letter");
        doc.addImage(img, 'JPEG',20,20);
        var fileEncode = btoa(doc.output());
         $.ajax({
              url: '/model/send',
              data: fileEncode,
              dataType: 'text',
              processData: false,
              contentType: false,
              type: 'GET',
              success: function (response) {
                   alter('Exit to send request');
              },
              error: function (jqXHR) {
                  alter('Failure to send request');
              }
             });
    }
});

首先,jsPDF不是javascript中的原生,请确保您已包含正确的源代码,在查看其他参考资料后,我认为您不需要 btoa() 函数来转换 doc.output(),只需指定如下:

 doc.output('datauri');

其次,base-64编码的字符串可能包含' + ' , ' / ' , ' = ', 他们不是URL safe字符,你需要替换它们,否则你无法处理ajax。

然而,根据我自己的经验,根据文件的大小,很容易变得很长!在达到 GET 方法的字符长度限制之前,编码的字符串将首先使您的 Web 开发工具崩溃,并且调试会很困难。

我的建议,根据你的jquery代码

processData: false,
contentType: false

发送也许是常见的设置File or Blob目的, 只要看看 jsPDF,它就可以将您的数据转换为 blob :

doc.output('blob');

所以彻底修改你的代码:

var img = canvas.toDataURL("image/png");
var doc = new jsPDF("l", "pt", "letter");
doc.addImage(img, 'JPEG',20,20);
var file = doc.output('blob');
var fd = new FormData();     // To carry on your data  
fd.append('mypdf',file);

$.ajax({
   url: '/model/send',   //here is also a problem, depends on your 
   data: fd,           //backend language, it may looks like '/model/send.php'
   dataType: 'text',
   processData: false,
   contentType: false,
   type: 'POST',
   success: function (response) {
     alter('Exit to send request');
   },
   error: function (jqXHR) {
     alter('Failure to send request');
   }
});

如果您在后端使用 php,您可以查看您的数据信息:

echo $_FILES['mypdf'];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对使用 jspdf 和 html2canvas 生成的文件进行 Base64 编码? 的相关文章

随机推荐

  • 如何根据条件对 pandas 数据框进行切片?

    当我使用以下代码时 frioMurteira data loc data POM Murteira data TMP gt 7 2 DTM TMP 我收到以下错误 cannot compare a dtyped float64 array
  • Page-Break-inside 属性在 chrome 中不起作用

    我有一个长表数据 其中有许多行和嵌套表 当我打印这些数据时 表和嵌套表的行只是在分页符上断开 意味着表和数据被分成页面 所以我在那里使用以下 CSS 属性 table tr page break inside avoid position
  • UICollectionViewCell 中的 UICollectionView (Swift)

    我想放一个UICollectionView在每个可重复使用的UICollectionViewCell The 灰犁沟方法对我来说效果不太好 因为使用一种UICollectionViewController两个数据源和委托的类UICollec
  • 如果外部和内部参数已知,则从 2D 图像像素获取 3D 坐标

    我正在使用 tsai 算法进行相机校准 我得到了内在和外在矩阵 但如何从该信息重建 3D 坐标 1 我可以使用高斯消元法来查找 X Y Z W 然后点将 X W Y W Z W 作为齐次系统 2 I can use the OpenCV d
  • 修复 C++ 中的分段错误

    我正在为 Windows 和 Unix 编写一个跨平台 C 程序 在Window端 代码编译和执行没有问题 在 Unix 方面 它会编译 但是当我尝试运行它时 我遇到了分段错误 我最初的预感是指针有问题 查找和修复分段错误的好方法是什么 编
  • $_ 在 PowerShell 中意味着什么?

    我在 PowerShell 中见过很多下面的内容 但它到底是做什么的呢 这是管道中当前值的变量 称为 PSItem在 Powershell 3 及更高版本中 1 2 3 write host or 1 2 3 write host PSIt
  • 将 UIPageViewController 滑动与 iOS 7 UINavigationController 向后滑动手势相结合

    我有一个导航控制器 可以推动视图控制器 PARENT 包含一个 UIPageViewController PAGES 现在 我使用平移 滑动手势在页面视图控制器的子级之间切换 但是 我无法再弹出PARENT 使用从屏幕左边框滑动手势的视图控
  • 使用 JQuery 展开/折叠表行

    我想在单击标题列时展开和折叠表行 我只想展开 折叠特定标题下的行 单击 这是我的表结构 table border 0 tr td Header td tr tr td data td td data td tr tr td data td
  • 使用 jQuery 模拟单击​​选择元素

    我用这个代码来模拟click on select元素 function click click function ts click ts trigger click HTML 代码是
  • 如何在 Dart 中对带有德语变音符号的字符串列表进行排序?

    如何使用变音符号对列表进行排序 CompareTo Function 会忽略这些并将单词放在列表的末尾 main var fruits pfel Bananen Orangen fruits sort a b gt a compareTo
  • BasicHttpBinding 与证书身份验证 - 错误“禁止”?

    我正在尝试使用 BasicHttpBinding 在传输级别上使用 SSL 证书让 WCF 服务器和客户端相互进行身份验证 服务器的创建方式如下 var soapBinding new BasicHttpBinding Namespace
  • 在 PHP 中使用 ssl 证书时出错

    我是 php 新手 尝试加载证书时遇到此错误 jameys macbookpro41 user php f Sites providerService php 警告 stream socket client 无法设置本地证书链文件 cert
  • @Nullable/@NotNull 与 IntelliJ IDEA、Maven 和 JSR 305

    我真的很喜欢代码检查功能 现在可以使用 JSR 305 或 Jetbrains 的 IntelliJ 专有注释 不幸的是 这两种实现 JSR 305 和 Jetbrains 不能很好地混合 IntelliJ 显然只理解它自己专有的注释集并将
  • DOM 文本节点是否保证不会被解释为 HTML?

    有谁知道 DOMNode类型的Text保证不会被浏览器解释为HTML 更多详细信息如下 背景 我正在为一个朋友构建一个简单的网络评论系统 并且我一直在考虑XSS攻击 我不认为过滤或转义 HTML 标签是一个非常优雅的解决方案 很容易想出一个
  • C C++内存泄漏的原因

    C C 内存泄漏的原因是什么 除了通常分配内存而忘记释放它 如果在分配和释放之间引发异常 就会发生内存泄漏 void f1 int ptr new int do something which may throw an exception
  • Tabula-py - 导入错误:没有名为 tabula 的模块

    我正在尝试使用 Tabula py 来阅读 pdf 我通过安装 tabula pypip install tabula py 我还安装了所需的依赖项 requests pandas pytest flake8 我的代码目前如下 import
  • 如何进行 SPARQL 查询来查找属性的最高值?

    假设我有一个像 age 这样的谓词 其中所有年龄三元组的值都是整数 哪个 SPARQL 查询会返回数据中年龄最高的主题 你只需要做order by desc与年龄谓词然后limit只得到第一个 PREFIX ns
  • 从同一个 FileInputStream 读取字符串和二进制

    我有一个文件 开头包含一些纯文本 结尾包含二进制内容 二进制内容的大小由我读取的某些纯文本行决定 我当时用的是BufferedReader读取各个行 但是它没有公开任何方法来引用读取字节数组 这readUTF for a DataInput
  • Azure DocumentDB 按 ID 查询非常慢

    我有一个 16GB 的集合 有 2 个分区 当我通过 ID 查询文档时 速度非常慢 但是通过索引字段查询速度很快 两者都是跨分区查询 如果我通过查询传递分区键 速度会很快 但分区键并不总是可用于我的查询 在 Azure 门户中使用 NET
  • 如何对使用 jspdf 和 html2canvas 生成的文件进行 Base64 编码?

    我正在尝试对附加代码中生成的文档进行编码 但没有任何反应 不会生成错误 但也不会对文件进行编码 并且ajax request从未被执行过 正确的方法是什么 html2canvas document getElementById workAr