如题,使用TCPDF,例子是使用example_03.php
将example_03.php改成B.php,主要是$html内容改了,改成一个table内容了
情况1. 直接访问B.php,可以生成正确的PDF文件
情况2. A.php(其实就是一个表格table内容),点击按钮调用B.php,数据通过ajax post传输给B.php(内容其实就是A中的一个表格的html代码),显示一堆看不懂的乱码,没有生成PDF文件
如果在B中直接写$html=‘<table>……</table>’;也就是还是用A调用B,不用A传过来的数据,还是不行,然后直接访问B,可以生成PDF文件
另外,如果A调用B,在B中注释掉调用的TCPDF的最后两行writeHTML和Output的话,显示传过来的数据没有问题,但是一执行writeHTML和output就有问题
求大侠指点哈,这个怎么解决或者有其他方法没有?
多谢,多谢

解决方案 »

  1.   

    没研究过pdf帮你顶个,贴出代码,可以一起研究下
      

  2.   

    B.PHP主要代码,设计到TCPDF的就不写了吧header("Content-Type: text/html; charset=UTF-8")
    $html = $_REQUEST("my_content");
    //下面是TCPDF,创建pdf对象,和example.03一样了
    $pdf->writeHTML(........);
    A.php,这里就只写js和html部分了var xmlHttpRequest; //用来装入XMLHttpRequest对象
    function Ajax(){
    xmlHttpRequest = createRequestObject();
                                    ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                                    var my_data = document.getElementById("my_div").innerHTML;
                                    var m_data = "my_content="+my_data;
    xmlHttpRequest.open("post", "B.php", true);
    xmlHttpRequest.onreadystatechange = requestCallBack;
    xmlHttpRequest.send(m_data);
    }

    /** 请求回调函数 */
    function requestCallBack(){
    /*
    0: 请求未初始化
    1: 服务器连接已建立
    2: 请求已接收
    3: 请求处理中
    4: 请求已完成,且响应已就绪
    */
    switch(xmlHttpRequest.readyState)
    {
    case 0:
    showMessage("请求未初始化");break;
    case 1:
    showMessage("服务器连接已建立");break;
    case 2:
    showMessage("请求已接收");break;
    case 3:
    showMessage("请求处理中");break;
    case 4:
    showMessage("请求已完成,且响应已就绪");

    if(xmlHttpRequest.status == 200)
    showMessage(xmlHttpRequest.responseText);
    break;
    }
    } /** 显示XMLHttpRequest当前状态信息 */
    function showMessage(str)
    {
    var msg = document.getElementById("msg");
    msg.innerHTML = msg.innerHTML + "<br/>" + str;
    }

    /** XMLHttpRequest对象 */
    function createRequestObject()
    {
    var xmlHttpRequest;
    if(window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlHttpRequest = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {// code for IE6, IE5
    xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xmlHttpRequest;
    }
    </script>
     </head>  <body>
                            <div id="my_div">
                                <table>
                                    <tr>
                                         <td>序号</td><td>姓名</td>
                                    </tr>
                                    <tr>
                                         <td>1</td><td>流星</td>
                                    </tr>
                                    <tr>
                                         <td>2</td><td>流星雨</td>
                                    </tr>
                                </table>
                            </div>
    <input type="button" value="Ajax提交" onclick="Ajax();" />
    <div id="msg">Ajax提交过程:</div>
     </body>
      

  3.   

    再说 TCPDF 的样例文件目录中并无 example_03.php 只有 example_003.php,谁知到你用的是什么
      

  4.   

    我真是服你了
    除了TCPDF的东西没有列出来,我还给你写啥子东西
    简历pdf对象就是30行代码,给你说的很清楚了,只是把例子中的$html这个内容变了而已,这个是唯一不同的地方,还要给你啥子内容
      

  5.   

    看题目
    OK,非要我写的及其详尽么
    改的仅仅writeHTML中的$html变量,这个变量是通过ajax post获得的,我要说的如何仔细你才能读懂题目?
      

  6.   

    尽管你不愿意听,但本着治病救人的原则,还是再说一下1、你说 如果在B中直接写$html=‘<table>……</table>’;也就是还是用A调用B,不用A传过来的数据,还是不行,然后直接访问B,可以生成PDF文件
    这显然可以排除 ajax 没有获得正确数据的原因
    ajax没有收到正确的内容,自然也不可能显示出期望的结果
    这难道与你的 B.php 写法无关吗?2、你说 如果A调用B,在B中注释掉调用的TCPDF的最后两行writeHTML和Output的话,显示传过来的数据没有问题,但是一执行writeHTML和output就有问题
    你在 B.php 是如何向 ajax 发送数据的?你不说,我怎么知道?
    TCPDF 用 output 方法产生并输出 PDF 文档,你把他注释掉了还说显示没问题
    这难道与你的 B.php 写法无关吗?