Я использую AJAX для отправки данных формы в серверный php-файл, который создает и отправляет html-адрес электронной почты. Часть этих данных я повторяю на сервере php-файле. HTML-код, который эхом, строит таблицу, которую я хотел бы, чтобы пользователь печатал (на бумаге). Я хотел бы открыть диалоговое окно печати браузера по умолчанию, чтобы пользователь мог распечатать таблицу, которую он / она не может видеть. Мне все равно, нужно ли открывать новую вкладку, отображая эхо-контент. Возможно ли это?
вернуть html форму ajax-запроса, а затем использовать javascript для печати
Этот код не проверен
JQuery / Javascript
$.post("EmailFile.php", { "EmailParam": "EmailVal" }, function(data){ var HTML = data.EmailHTML; var WindowObject = window.open("", "PrintWindow", "width=750,height=650,top=50,left=50,toolbars=no,scrollbars=yes,status=no,resizable=yes"); WindowObject.document.writeln(HTML); WindowObject.document.close(); WindowObject.focus(); WindowObject.print(); WindowObject.close(); }, "json");
Файл PHP (EmailFile.php)
$EmailData = $_POST['EmailParam']; //...Send Email... //..Build HTML... $TableHTML = "<table></table>"; //Return HTML $JSONArr['EmailHTML'] = $TableHTML; echo json_encode($JSONArr);
Если вы пытаетесь распечатать невидимый контент, вы можете использовать два разных файла css для разных носителей (экран или печать), где вы скрываете / скрываете необходимый контент через дисплей: none; а затем вызовите диалог печати через window.print () .
Ваш вопрос немного запутан.
Например:
<link rel="stylesheet" type="text/css" href="theme1.css" media="screen" /> <link rel="stylesheet" type="text/css" href="theme2.css" media="print" /> <div class="hidden_on_page">YOU CAN'T SEE ME BUT YOU CAN PRINT ME!</div> <div class="on_page">YOU CAN SEE ME BUT YOU CAN'T PRINT ME</div>
Затем в theme1.css:
.hidden_on_page { display: none; }
Затем в theme2.css:
.on_page { display: none; }
И вы будете запускать диалог печати, если потребуется, при необходимости:
window.print();
Найти решение есть полный код:
http://codexhelp.blogspot.in/2017/04/php-ajax-window-print-page-content.html
<script> function printContent(id){ $.ajax({ type: "POST", url: 'printContent.php', data: {id: id}, type: 'get', success: function( response ) { var contents = response; var idname = name; var frame1 = document.createElement('iframe'); frame1.name = "frame1"; frame1.style.position = "absolute"; frame1.style.top = "-1000000px"; document.body.appendChild(frame1); var frameDoc = frame1.contentWindow ? frame1.contentWindow : frame1.contentDocument.document ? frame1.contentDocument.document : frame1.contentDocument; frameDoc.document.open(); frameDoc.document.write('<html><head><title></title>'); frameDoc.document.write('<style>table { border-collapse: collapse; border-spacing: 0; width:100%; margin-top:20px;} .table td, .table > tbody > tr > td, .table > tbody > tr > th, .table > tfoot > tr > td, .table > tfoot > tr > th, .table > thead > tr > td, .table > thead > tr > th{ padding:8px 18px; } .table-bordered, .table-bordered > tbody > tr > td, .table-bordered > tbody > tr > th, .table-bordered > tfoot > tr > td, .table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, .table-bordered > thead > tr > th { border: 1px solid #e2e2e2;} </style>'); // your title frameDoc.document.title = "Print Content with ajax in php"; frameDoc.document.write('</head><body>'); frameDoc.document.write(contents); frameDoc.document.write('</body></html>'); frameDoc.document.close(); setTimeout(function () { window.frames["frame1"].focus(); window.frames["frame1"].print(); document.body.removeChild(frame1); }, 500); return false; } }); } </script>