使用 FPDI 和 FDP 生成略有不同的 pdf 文件

发布于 2024-11-03 18:31:28 字数 897 浏览 5 评论 0原文

我首先使用 fpdi 导入 pdf 来制作 fpdf 对象,然后对该 pdf 执行一些更改。我克隆它来制作自定义 pdf,只需添加一些文本。然后我将两个文件输出到磁盘,但只创建了一个文件,第二个输出出现致命错误:

致命错误:调用 C 中未定义的方法 stdClass::closeFile(): \Program Files\EasyPHP 3.0\www\oursin\oursin\public\scripts\FPDI\fpdi.php 在线 534

我的代码片段:

$pdf = new FPDI('L','mm',array(291.6,456)); 
$fichier=$repertoireGrilles.'GR_IFR.pdf';   

$pdf->setSourceFile($fichier); 
// add a page 
$tplIdx = $pdf->importPage(1); 
$pdf->AddPage(); 
$pdf->useTemplate($tplIdx,0,0,0); 
.. 
... 
methods on $pdf 
.. 
.. 
.. 

$pdfCopie=clone $pdf; 

methods on $pdfCopie

$pdfCopie-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'_copie.pdf','F'); 
$pdf-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'.pdf','F'); 

任何人都可以帮助我解决这个问题让我的大脑持续数小时(数天)处于高压状态:)?

i first import a pdf using fpdi to make a fpdf object, i then perform several changes on that pdf. I clone it to make a custom pdf just adding some texts. Then i output the two files to disk but just one is created and i got a fatal error for the second output :

Fatal error: Call to undefined method stdClass::closeFile() in C:\Program Files\EasyPHP 3.0\www\oursin\oursin\public\scripts\FPDI\fpdi.php on line 534

pieces of my code:

$pdf = new FPDI('L','mm',array(291.6,456)); 
$fichier=$repertoireGrilles.'GR_IFR.pdf';   

$pdf->setSourceFile($fichier); 
// add a page 
$tplIdx = $pdf->importPage(1); 
$pdf->AddPage(); 
$pdf->useTemplate($tplIdx,0,0,0); 
.. 
... 
methods on $pdf 
.. 
.. 
.. 

$pdfCopie=clone $pdf; 

methods on $pdfCopie

$pdfCopie-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'_copie.pdf','F'); 
$pdf-> Output($repertoireGrilles.'grillesQuotidiennes/'.$date.'/Grille_'.$date.'_'.$ou.'.pdf','F'); 

Anybody to help me to tackle this issue that keeps my brain under high pressure for hours (days) :) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

挽你眉间 2024-11-10 18:31:28

克隆、分叉、复制,所有这些都是非常肮脏的。如果你走这条路,你将很难获得输出。相反,请考虑以下方法:

  1. 对单个 PHP 文件进行多个 AJAX 调用,向其传递 pid 值以区分它们。
  2. 对 FPDI 进行完全相同的文档设置。这比克隆、分叉、复制等更加一致
  3. 。完成所有设置后,检查 pid 并对不同文档执行不同的操作。
  4. 输出文档。

这是我的 jQuery:

$(document).ready(function(){
    var i;
    for( i=0; i<=1; i++ )
    {
        $.ajax({
            url:    'pdfpid.php',
            data:   {
                pid:    i,
                pdf:    'document.pdf'
            },
            type:   'post'
        });
    }
});

如您所见,它非常简单。 pdfpid.php 是将生成和处理文档的文件的名称。在本例中,我希望 pid 为 0 的文档成为我的“原始”文档,而 pid 为 1 的文档作为“克隆”文档。

//  Ensure that POST came in correctly
if( !array_key_exists('pid',$_POST) || !array_key_exists('pdf',$_POST) )
    exit();

//  Populate necessary variables from $_POST
$pid    = intval($_POST['pid']);
$src    = $_POST['pdf'];

//  Setup the PDF document
$pdf = new FPDI();
$pdf->setSourceFile($src);
$templateID = $pdf->importPage(1);
$pdf->addPage();
$pdf->useTemplate($templateID);
$pdf->SetFont('Arial','B',24);

switch( $pid )
{
    default:
        break;
    case 0:
        //  "Parent" document
        $pdf->Text(10,10,"ORIGINAL");
        $filename = "original.pdf";
        break;
    case 1:
        //  "Child" document
        $pdf->Text(10,10,"CLONED");
        $filename = "cloned.pdf";
        break;
}

$pdf->Output($filename,'F');

我将两个文档作为输出,其中“父”和“子”之间的独特修改全部到位。

Cloning, forking, copying, any of that is really dirty. You will have a very hard time with outputs if you take that route. Instead, consider this approach:

  1. Make multiple AJAX calls to a single PHP file, pass a pid value to it so as to differentiate between them.
  2. Go through the exact same document setup for FPDI. This is far more consistent than cloning, forking, copying, etc.
  3. Check pid and do different things to different documents after all the setup is done.
  4. Output the documents.

Here is my jQuery:

$(document).ready(function(){
    var i;
    for( i=0; i<=1; i++ )
    {
        $.ajax({
            url:    'pdfpid.php',
            data:   {
                pid:    i,
                pdf:    'document.pdf'
            },
            type:   'post'
        });
    }
});

As you can see, it's pretty simple. pdfpid.php is the name of the file that will generate and process the documents. In this case, I want the document with a pid of 0 to be my "original" and the one with a pid of 1 to be the "cloned" document.

//  Ensure that POST came in correctly
if( !array_key_exists('pid',$_POST) || !array_key_exists('pdf',$_POST) )
    exit();

//  Populate necessary variables from $_POST
$pid    = intval($_POST['pid']);
$src    = $_POST['pdf'];

//  Setup the PDF document
$pdf = new FPDI();
$pdf->setSourceFile($src);
$templateID = $pdf->importPage(1);
$pdf->addPage();
$pdf->useTemplate($templateID);
$pdf->SetFont('Arial','B',24);

switch( $pid )
{
    default:
        break;
    case 0:
        //  "Parent" document
        $pdf->Text(10,10,"ORIGINAL");
        $filename = "original.pdf";
        break;
    case 1:
        //  "Child" document
        $pdf->Text(10,10,"CLONED");
        $filename = "cloned.pdf";
        break;
}

$pdf->Output($filename,'F');

I got both documents as an output, with the unique modifications between the "parent" and the "child" all in place.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文