Вы можете решить эту проблему с помощью JavaScript и любого бесплатного генератора html to pdf, который может сохранить документ в формате PDF.
Вот как я решил это поэтапно:
- Отключить и переопределить *Функция 1006 * ctrl + p , поэтому она не отображает экран печати.
- При переопределении на шаге 1 вызовите любую функцию, такую как Html, для генератора PDF, которая может сохранить документ исохранить.
Вот и все.Теперь, как выглядит код?
В этом решении я использовал генератор jQuery и jsPdf.
Поэтому добавьте cdns в ваш код
<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, вам необходимо определить тип браузера, следуя этому ответу .
Чтобы увидеть весь этот пример, вот полный код:
<!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](https://i.stack.imgur.com/XICqi.gif)