FPDF:使用 AJAX 输出 PDF

2024-02-22

我有一个 PHP 文件,我在其中使用 FPDF 生成 PDF 文件。如果我执行该文件,它会在浏览器上生成并加载 pdf 文件。但是,当我尝试使用按钮并使用 AJAX 生成 PDF 文件时,它不起作用。

我正在使用 AJAX,因为我需要将一些变量发布到 PHP,以便在生成 PDF 文件之前在数据库中进行查询。

我在互联网上寻找解决方案,但我仍然不知道如何实现这一目标。

我想在浏览器上加载pdf,而不是下载它

PHP:

$pdf->Output('name.pdf','I');

AJAX:

var IDDocument = 15;
var Document = 'Invoice';
var ClientID = '205160615';

    $.ajax({  
                type: 'POST', 
                url: 'PDF.php',  
                data: { IDDocument:IDDocument, 
                        Document:Document,  
                        ClientID:ClientID, 
                        btnPDF:'btnPDF'},
                success: function(data) {
                    //load PDF on browser.
                }
            });

            return false;

这就是我最终所做的:

我决定使用 JQuery 对 PHP 文件进行 POST,如下所示:

function f()
    {
        //Variables I needed to POST to PHP

        var IDDocument = 15;
        var Document = 'Invoice';
        var ClientID = '205160615';

        //POST to PHP using JQUERY

        $.post('PDF.php'{
                         IDDocument:IDDocument, 
                         Document:Document,
                         ClientID:ClientID,
                         btnPDF:"btnPDF"//btnPDF is just to check if user clicked the button
                         }, 

                         function() //this function is to call the PHP File a second time
                         {
                            window.open('PDF.php');
                         });

    }

然后,在 PHP 文件中我决定存储发送的变量$_SESSION确保用户通过使用单击按钮后的变量if健康)状况。然后,第二次调用 PHP 文件时,由于用户没有单击按钮,我检查了使用else为了这次创建并加载 PDF 文件。因为我之前存储了变量$_SESSION变量,我只是用它们来加载 PDF 文件,然后取消设置它们。

这是 PHP 文件中的代码:

if(isset($_POST['btnPDF'])) //Check if user clicked the button
{
   //If the user clicked the button, store the variables in $_SESSION variables         

    $_SESSION["IDDocument"]=$_POST['IDDocument'];
    $_SESSION["Document"]=$_POST['Document'];
    $_SESSION["ClientID"]=$_POST['ClientID'];
}
else
{
   //the second time the PHP file is called, the user didn't clicked the button.
   //This second time I use the $_SESSION variables previously stored in the first
   //call to the PHP file in order to create and load the PDF file

    //asign $_SESSION variables to PHP variables if you want to

    $IDDocument=$_SESSION["IDDocument"];
    $Document=$_SESSION["Document"]; 
    $ClientID=$_SESSION["ClientID"];

    //unset the $_SESSION variables

    unset($_SESSION["IDDocument"],$_SESSION["Document"],$_SESSION["ClientID"]);

    //Create and load the PDF file
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPDF:使用 AJAX 输出 PDF 的相关文章

随机推荐

  • 如何使用 jquery 清除文本区域

    这个问题已经得到解答 但为了将来的参考 这里有一个完整的例子 您可以根据需要多次单击 添加 按钮和 清除 按钮 它就会起作用 但是 一旦您在文本框中输入内容 清除和添加按钮就不起作用
  • 正确使用电子

    我想进入 Electron 并且我已经开始学习它 但是我认为我不太明白应该如何使用它 根据我收集的信息 使用 Electron 我能够创建跨桌面应用程序 铬 with HTML CSS 和 JavaScript并在后台执行任务 NodeJS
  • 返回 void* 的 C++/C 函数指针

    我正在尝试调用一个带有参数的函数 void void int const char 但我不知道如何将这些参数传递给函数 Example void ptr int int function int int void int 我试图像这样调用该
  • 如何在 CodeIgniter 中检查请求是否是通过 AJAX 发出的?

    如何检查请求是否是 AJAX 我正在使用 CodeIgniter 我有一个链接 当它单击时 它将打开弹出对话框窗口 这是通过 ajax 请求控制器名称来完成的login window 代码点火器 Here is the controller
  • pip 未能为 scipy 构建轮子

    我刚刚下载了新的python 3 8我正在尝试安装scipy使用以下内容进行封装 pip3 8 install scipy 但是构建失败并出现以下错误 Failed to build scipy ERROR Could not build
  • 如何重构这个?

    我试图重构这个 class AClass string Property1 get set string Property2 get set string Property3 get set void AMethod AClass othe
  • symfony2主义选择IFNULL

    好的 我有这个代码 SELECT IFNULL s2 id s1 id AS effectiveID IFNULL s2 status s1 status AS effectiveStatus IFNULL s2 user id s1 us
  • dplyr: case_when 涉及很多情况

    我有两个数据框 set seed 002 data1 lt data frame cbind a1 sample letters 8 replace TRUE a2 rpois 8 10 stringsAsFactors FALSE dat
  • 复选框已全部单击

    我想在单击任何子项时选择父项 这段代码正在检查和检查 function child on click function parent this prevAll parent if this is checked parent prop ch
  • 如何避免 Java 中的 switch-case 语句[重复]

    这个问题在这里已经有答案了 我有一个 TriggerType 枚举 可以在其中添加不同的触发器 public enum TriggerType meta data list toggle 这些触发器类型在不同的处理程序 例如组件 仪表板等
  • 如何为 Facebook 应用程序设置画布 url?

    这个问题之前已经被问过很多次了 但是最近 Facebook 开发者网站显然发生了变化 因此该解决方案在任何地方都找不到 Here s what the problem looks like 抱歉 您使用的应用程序配置错误 请稍后重试 Now
  • 以编程方式在音频元素上设置当前时间属性会导致事件侦听器无限期地触发

    正如标题所述 当设置currentTime以编程方式指定音频元素的属性 设置该值后 事件侦听器将无限期地反复触发 音频将尝试播放 但由于正在进行太多处理 音频将跳过 我的浏览器将开始变得无响应 我通过删除对的绑定解决了这个问题current
  • Crypto.Signature.PKCS1_v1_5 和 Crypto.Signature.pkcs1_15 有什么区别?

    我想知道两者之间有什么区别Crypto Signature PKCS1 v1 5 and Crypto Signature pkcs1 15 In the 文档 https www pycryptodome org en latest sr
  • 为什么位图数据没有通过Flash发布到服务器端?

    这是我用来将位图数据发布到服务器端的代码 PHP private function savePicToServer bmpData BitmapData void trace in savePicToServer trace bmpData
  • 正则表达式在数字之间替换

    我想要替换以下时间码 00 04 02 01 gt 00 04 02 01 如何用冒号替换两个数字之间的空格 我想出了 d s d 但这显然也包括数字 捕获您的数字 然后在替换时使用它们 d s d 用 来代替 1 以下示例使用 JavaS
  • 在 Swift 中添加视图控制器作为子视图

    我正在尝试使用 swift 构建一个简单的计算器应用程序 我创建了两个具有基本和高级选项的视图控制器 早些时候在 Obj C 中曾经这样做过 AViewController alloc initWithNibName nibName bun
  • C++ - 重载 [] 运算符

    我有一个模板类数组 template
  • Doctrine2 的查询构建器子字符串帮助器方法的正确语法

    好吧 这个问题可能是由于我对查询生成器帮助器方法的理解模糊 但我一生都找不到使用子字符串方法的正确方法 我试图返回以指定字母数字值开头的所有结果 下面的代码不会引发任何错误 但也不会返回任何结果 我已经搜索过谷歌 但显然几乎没有任何内容显示
  • 如何编写特定于浏览器的 JavaScript 代码? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何编写特定于浏览器的 JavaSc
  • FPDF:使用 AJAX 输出 PDF

    我有一个 PHP 文件 我在其中使用 FPDF 生成 PDF 文件 如果我执行该文件 它会在浏览器上生成并加载 pdf 文件 但是 当我尝试使用按钮并使用 AJAX 生成 PDF 文件时 它不起作用 我正在使用 AJAX 因为我需要将一些变