2

我正在使用 AJAX 将表单数据发送到构建和发送 html 电子邮件的服务器 php 文件。我在服务器 php 文件中回显了这些数据的一部分。回显的 html 构建了一个我希望用户打印的表(在纸上)。我想打开默认浏览器打印对话框,以便用户可以打印他/她看不到的表格。我不在乎是否必须打开一个新选项卡以显示回显的内容。这甚至可能吗?

4

3 回答 3

10

返回该 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);
于 2012-06-26T20:10:45.763 回答
3

如果您尝试打印不可见的内容,您可以为不同的媒体(屏幕与打印)使用两个不同的 css 文件,您可以在其中通过display: 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();
于 2012-06-26T20:12:36.440 回答
0

找到解决方案有完整的代码:

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>
于 2017-04-30T11:58:36.410 回答