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

非表示のコンテンツを印刷しようとしている場合は、異なるメディア(画面と印刷)に2つの異なるcssファイルを使用して、表示を介して必要なコンテンツを非表示/再表示できます。次に、 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 に答える