Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将pdf (从window.print)保存到js

将pdf (从window.print)保存到js
EN

Stack Overflow用户
提问于 2019-02-11 17:56:07
回答 3查看 2.5K关注 0票数 0

我们可以使用window.print()在本地生成并保存为pdf格式的页面,但我想知道是否可以在变量中将页面保存为pdf格式,就像window.print()生成pdf格式一样,因为我想之后通过ajax发送它。谢谢。

EN

回答 3

Stack Overflow用户

发布于 2019-02-15 16:41:15

你知道你可以用window.print()将网页保存为pdf,所以你想在javascript中捕捉window.print()的输出。但那不是你的目标,对吧?您的最终目标是将Html页面保存为pdf并通过ajax发送。所以你需要问,除了使用window.print()之外,还有其他方法可以将我的网页保存为pdf吗?现在你走上了正确的道路。要将Html转换为pdf,您可以使用jsPDF的.html() PlugIn和html2canvas 1.0.0-alpha.12

代码语言:javascript
运行
AI代码解释
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.5.3/jspdf.debug.js" 
        integrity="sha384-NaWTHo/8YCBYJ59830LTz/P4aQZK1sS0SneOgAvhsIl3zBu8r9RevNg5lHCHAuQ/"
        crossorigin="anonymous"></script>
<script src="~/lib/html2canvas/html2canvas.min.js"></script></script>
<!-- html2canvas 1.0.0-alpha.11 up to v1.0.0-rc.1 works, current version may not work -->
<script>
    function emailHtml() {
        let pdf = new jsPDF('p', 'pt', 'a4');
        pdf.html(document.body, {
            callback: function () {
                let obj = {};
                obj.pdfContent = pdf.output('datauristring');
                var jsonData = JSON.stringify(obj);
                $.ajax({
                    url: '/api/yourapi',
                    type: 'POST',
                    contentType: 'application/json',
                    data: jsonData
                });
            }
        });
    }
</script>
票数 1
EN

Stack Overflow用户

发布于 2019-02-11 18:34:52

我能理解你的确切需求,这可能会对你有所帮助。

HTML

代码语言:javascript
运行
AI代码解释
复制
<button onclick="document.getElementById('opepdf').click();">Read PDF</button>
<input id="opepdf" type="file" name="name" style="display: none;" onchange="PDFReader(event);"/>

Javascript

代码语言:javascript
运行
AI代码解释
复制
function PDFReader(e){
   var file = e.target.files[0]; 

   var pdfReader = new FileReader();// Create a File Reader
   pdfReader.readAsText(file,'UTF-8');

   pdfReader.onload = readerEvent => {
      var PDFContent = readerEvent.target.result;
      console.log( PDFContent );//PDF content in variable
   }
}

不知道这是否跨浏览器,但它不需要任何js插件。更详细地解释你将如何使用它可以提高答案。如果您想通过ajax上传文件,您可以使用其他方法。

编辑:如果您想通过ajax将PDF发送到您的服务器,请使用:

HTML:

代码语言:javascript
运行
AI代码解释
复制
<form>
Select PDF
<input id="opepdf" name="opepdf" type="file" /><br>
<div id="upload"></div><br>
<input type="submit" value="submit"/> 
</form>

JAVA-SCRIPT:需要jquery

代码语言:javascript
运行
AI代码解释
复制
//form Submit
   $("form").submit(function(evt){   
      evt.preventDefault();
      $("#upload").html("<img src='http://crabsheet.com/cs/wp-content/uploads/2012/08/capture-1.gif'>");
      var formData = new FormData($(this)[0]);
   $.ajax({
       url: 'upload.php',
       type: 'POST',
       data: formData,
       async: true,
       cache: false,
       contentType: false,
       enctype: 'multipart/form-data',
       processData: false,
       success: function (response) {
         $("#upload").html(response);
       }
   });
   return false;
 });

PHP-Serverside:应该有一个相对于脚本目录的“上传”文件夹

代码语言:javascript
运行
AI代码解释
复制
<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["opepdf"]["name"]);

$fileName = $_FILES['opepdf']['name'];
$fileType = $_FILES['opepdf']['type'];
$fileError = $_FILES['opepdf']['error'];
$fileContent = file_get_contents($_FILES['opepdf']['tmp_name']);

if($fileError == UPLOAD_ERR_OK){
   //Processes your file here
    if (move_uploaded_file($_FILES["opepdf"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["opepdf"]["name"]). " has been uploaded.";
    } else {
        echo "Error uploading your file.";
    }
}else{
   switch($fileError){
     case UPLOAD_ERR_INI_SIZE:   
          $message = 'MAX UPLOAD SIZE Reached';
          break;
     case UPLOAD_ERR_FORM_SIZE:  
          $message = 'MAX FORM Upload Size Reached';
          break;
     case UPLOAD_ERR_PARTIAL:    
          $message = 'Could not finish Upload';
          break;
     case UPLOAD_ERR_NO_FILE:    
          $message = 'NO upload File';
          break;
     case UPLOAD_ERR_NO_TMP_DIR: 
          $message = 'Servernot configured for file upload';
          break;
     case UPLOAD_ERR_CANT_WRITE: 
          $message= 'CANT WRITE';
          break;
     case  UPLOAD_ERR_EXTENSION: 
          $message = 'Could not finish Upload.';
          break;
     default: $message = 'Could not finish Upload';
              break;
    }
      echo json_encode(array(
               'error' => true,
               'message' => $message
            ));
}
?>
票数 0
EN

Stack Overflow用户

发布于 2019-02-11 18:02:00

不能从window.print()获取值。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54636428

复制
相关文章
如何是HTML页面中的表单居中显示[通俗易懂]
在进行前端页面设置的时候,发现写完的form表单始终无法居中显示,详细如图1所示:
全栈程序员站长
2022/09/20
7.9K0
如何是HTML页面中的表单居中显示[通俗易懂]
Confluence 如何在页面中显示目录
在默认情况下,Confluence 是不能在页面中显示目录和当前页面中的内容导航的。
HoneyMoose
2021/12/14
2K0
Confluence 如何在页面中显示目录
在默认情况下,Confluence 是不能在页面中显示目录和当前页面中的内容导航的。
HoneyMoose
2022/01/11
2.5K0
Confluence 如何在页面中显示目录
如何修改django的app在admin中显示的名称
在django的开发中,很多时候我们希望app在admin中显示成我们想要的中文名,而不是显示默认的app_label名称。 比如我们有一个blog应用,在我们的blog app目录下面,默认会生成一个apps.py文件,类似:
小海怪的互联网
2019/09/25
3.5K0
如何修改django的app在admin中显示的名称
shell:修改变更值[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157204.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/14
8480
以管理员身份修改hosts文件_如何修改hosts文件权限
修改host文件的时候若不是以管理员的身份,无权限修改host中的内容。简单说明如何使用powershell的方法修改host文件。
全栈程序员站长
2022/11/08
7.3K1
以管理员身份修改hosts文件_如何修改hosts文件权限
WinCC 中修改报警记录的消息文本
1 <概述> <在工业生产中不可避免地会产生很多报警信息,其中有些报警是需要分析原因的,而大部分报警产生的原因是需要事后才能获得,这就需要在报警消息产生一段时间后,把报警产生的原因再写入到报警信息中。例如,图 1 中报警的消息文本“设备 2故障,原因:电气故障”,这其中“电气故障”信息就是在分析报警产生的原因之后由 操作人员选择相应报警并写入原因。
科控物联
2022/03/29
5K0
WinCC 中修改报警记录的消息文本
WordPress如何修改页面底部的版权信息?
熟悉WordPress怎么用之后 相信你也开始着手建立规划摩拳擦掌的动手要做自己期盼已久的网站了,但是渐渐地,你会发现一些问题,正如这篇小文的标题,拉到页面底部,你会看到网站显示的是“骄傲的采用Wor
P轴
2022/11/18
2.2K0
springboot默认跳转/error页面变更
我们找到org.springframework.boot.autoconfigure.web.servlet.error包下面
阿超
2022/08/16
1.2K0
springboot默认跳转/error页面变更
Jenkins修改管理员密码.
前言:Jenkins修改管理员密码,我看了网上所有的教程,竟然全都是拿着一串已经加密好的111111的密文去替代config.xml文件里面的密码,然后大家的密码都是111111!我觉得这种做法实在太敷衍了!于是我就研究了下,包括Jenkins密码的加密方式,以及如何修改管理员的密码,当然,通过配置Jenkins允许注册用户,去注册一个用户,也不失为一个好选择。 1、Jenkies的加密方式 Jenkins的密码采用的是Java加解密工具 jBCrypt,我也是第一次接触到这种加密方式,实在被他惊叹到
JMCui
2018/03/15
2K0
Jenkins修改管理员密码.
WordPress 技巧:在注册页面显示自定义消息
如果你的 WordPress 博客是开放注册,并且你想在注册界面给用户做些自定义信息提示,你可以在当前主题的 functions.php 文件加入以下代码:
Denis
2023/04/15
6580
gitlab修改管理员用户邮箱
背景: 参照https://www.yuque.com/duiniwukenaihe/znm95g/fmpmzk内网搭建了一台gitlab服务器。嗯 然后我要测试webhook触发jenkins流水线
对你无可奈何
2021/04/30
2.7K0
js如何实现修改页面url不刷新页面
在Chrome、Safari、Firefox 4+和Internet Explorer 10以上可以实现
IT工作者
2022/01/25
8.5K0
如何在html页面显示html标签源码
这是一篇不正经实现方案报道。 1 引言 先来看个问答: stackoverflow: Why was the xmp HTML tag deprecated? [duplicate] 这个问题感觉
celineWong7
2020/11/05
11.6K0
网页title图标_php 数据库显示在页面并能修改
重新定义TCPDF中的K_PATH_IMAGES常量(define(‘K_PATH_IMAGES’, xxxx) , 需要定义在加载tcpdf.php 之前)
全栈程序员站长
2022/10/03
4.3K0
Mastercam如何变更图层?
当图面中有许多图形要素时,时常会干扰到识图及图形选择,因此,可以透过图层管理来对画面中的要素进行分类管理。例如在下图中可以看到画面中包含尺寸标注,使图面看起来比较混乱,尝试将画面中的所有尺寸标注移动到别的图层。
lrglu
2022/03/31
2.8K0
Mastercam如何变更图层?
点击加载更多

相似问题

根据列表头执行代码条件,而不是静态定义

236

如何引用表头而不是列?

10

将列值显示为表头,而不是原来的表头

30

如何在Django api中显示外键数据值而不是urls?

13

如何从表中返回列表头而不是过滤

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文