读取Chrome的Ctrl + P数据

时间:2019-03-15 16:53:54

标签: javascript google-chrome google-chrome-extension

是否可以通过chrome扩展程序读取ctrl + p数据并将其另存为pdf或html,而不显示打印屏幕?

2 个答案:

答案 0 :(得分:7)

您可以使用JavaScript和可以保存pdf文档的任何免费html到pdf生成器来解决此问题。

这是我逐步解决的方法:

  1. 禁用并覆盖 ctrl + p 功能,使其不显示打印屏幕。
  2. 在第1步中进行覆盖时,将您想要的任何函数(如HTML)调用到可保存文档并保存的Pdf生成器中。

就是这样。现在代码是什么样的?

在此解决方案中,我使用了jQuery和jsPdf生成器。

因此在您的代码中添加CDN

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.min.js"></script>

在此处插入以下jQuery代码以禁用和覆盖打印功能:

//Override ctrl+p and excute another function
$(document).bind("keyup keydown", function(e){
  if(e.ctrlKey && e.keyCode == 80){
    Print(); 
    e.preventDefault();
  }
});

创建一个调用pdfGenerator函数或其他多个函数的打印函数:

//Print My Way
function Print(){
  console.log("for testing to see if this is called");
  pdfGenerator()
}

//Use any other print method, in this case I print/save html to pdf as downloadable
function pdfGenerator(){
  var doc = new jsPDF();
  doc.fromHTML($('body').get(0), 15, 15, {
    'width': 170, 
  });
  // instead of Test.pdf you can make give the name of the page.
  doc.save('Test.pdf');
}

就是这样。如果您需要将其仅与Chrome配合使用,则需要检测遵循此answer的浏览器类型。

要查看所有此示例,请参见完整代码:

<!doctype html>

<html lang="en">
<head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.4/jspdf.min.js"></script>
</head>

<body>
  <p>This is my page and ctrl+p will prevent print screen but print this page as downloadable pdf</p>

<script>
  //Override ctrl+p and excute another function
  $(document).bind("keyup keydown", function(e){
    if(e.ctrlKey && e.keyCode == 80){
      Print(); 
      e.preventDefault();
    }
  });

  //Print My Way
  function Print(){
    pdfGenerator()
    //additional function do something else.
  }

  //Use any other print method, in this case I print/save html to pdf as downloadable
  function pdfGenerator(){
    var doc = new jsPDF();
    doc.fromHTML($('body').get(0), 15, 15, {
      'width': 170, 
    });
    doc.save('Test.pdf');
  }
</script>

</body>
</html>

资源:

演示 enter image description here

答案 1 :(得分:0)

要阅读剪贴板上的内容,此方法有效。

async function getClipboardContents() {
  try {
    const text = await navigator.clipboard.readText();
    console.log('Pasted content: ', text);
  } catch (err) {
    console.error('Failed to read clipboard contents: ', err);
  }
}

为防止CTRL + P,请将其放入您的head标签

<link rel="alternate" media="print" href="alternativeUrlForPrint.ext" />

使用L2i库捕获控制台中的内容,它将使用上述代码捕获放置在控制台中的所有内容。然后,您只需使用功能下载它即可。

l2i.download();

最后,您可以将其全部放入TamperMonkey进行扩展。