使用FPDI + TCPDF导入的PDF模板的大小问题

Rav*_*ish 7 php pdf fpdi tcpdf pdftk

我陷入了一个非常复杂的局面.我正在为贺卡开发PHP Web应用程序.

为此,我使用了一些Linux工具和TCPDF和FPDI.让我告诉你它是如何工作的:

有4页贺卡模板PDF文件.这是自定义尺寸5x7英寸300dpi PDF文件.我也在TCPDF中添加了自定义大小

case 'STANDARD_CARD'       : {$pf = array(1500.00,2100.00);break;}
Run Code Online (Sandbox Code Playgroud)

我做的是,我使用:

pdftk templateX.pdf burst output  page_%2d.pdf 
Run Code Online (Sandbox Code Playgroud)

把每一页的寺庙分开.

现在我用:

$pdf = new FPDI($cardDetails['ORIENTATION'],"mm",$cardDetails['SIZE']);      


  //set source file for 
    $pdf->setSourceFile($pdfFile);
    $templateIndex = $pdf->importPage(1);
    $pdf->AddPage($cardDetails['ORIENTATION'],$cardDetails['SIZE']);
    $pdf->useTemplate($templateIndex,0,0);
Run Code Online (Sandbox Code Playgroud)

其他的事情,如写消息打印图像.最后使用以下方法保存文件:

$pdf->output("file_name.pdf","F");
Run Code Online (Sandbox Code Playgroud)

原始PDF文件(仅限第1页):( 5x7英寸) 原始pdf文件 修改PDF和一些PDF操作:(29x20英寸) 修改PDF

现在我得到的输出不是5x7 pdf它是一个29 x 20英寸的文件,它也破坏了我的计算和PDF.

请告诉我我做错了什么......

lev*_*mer 22

嗨Ravish,

我也遇到过这个问题.其实我的情况是这样的.我有一个法律尺寸(8.5毫米x 14毫米)的原始文件.当我像你一样使用FPDI输出显示它时,它只显示一个字母大小(8.5mm x 11mm).结果是:CROPPED PDF文件.

我做了几次谷歌搜索,并从不同的帖子中找到了几个答案.这是我找到的最相关的解决方案.

首先是下面的这段功能代码:useTemplate

$this->useTemplate($templateIndex, null, null, 0, 0, true);
Run Code Online (Sandbox Code Playgroud)

通常,一些开发人员将此设置为最后一个参数为TRUE.是的,如果你没有设置宽度和长度,这是正确的.但是,我想强调第4和第5个参数指定导入的PDF 的宽度和长度.因此,如果您将采用或获取导入文档的实际大小,请将最后一个参数设置为FALSE,因为这将指示它将采用您设置的实际或特定大小.

请带上我做的示例代码:

$pdf = new FPDI();
$pdf -> setSourceFile('birform2316.pdf');
$tplIdx = $pdf -> importPage(1);
$size = $pdf->getTemplateSize($tplIdx);
$pdf -> AddPage();
$pdf ->useTemplate($tplIdx, null, null, $size['w'], 310, FALSE);
$pdf -> SetFont('Arial');
$pdf -> SetTextColor(0, 0, 0);
$pdf -> SetXY(18, 174);
$pdf -> Write(0, $employer_address);
$pdf -> Output('myOwn.pdf', 'D');
Run Code Online (Sandbox Code Playgroud)

使用此代码,我生成了一个新的PDF,没有包含我设置的导入文件.意思是,已显示模板的所有详细信息(原始文件).

请注意我在设置PDF大小时观察到的内容:

首先,我的文件原始宽度为215.6毫米,长度为350.9毫米.现在,当我使用函数getTemplateSizeuseTemplate设置我的PDF大小时,例如:

$size = $pdf->getTemplateSize($tplIdx);
$pdf ->useTemplate($tplIdx, null, null, $size['w'], $size['h'],FALSE);
Run Code Online (Sandbox Code Playgroud)

或者干脆:

$pdf ->useTemplate($tplIdx, null, null, 215.6, 350.9,FALSE);
Run Code Online (Sandbox Code Playgroud)

结果是,我的新PDF文件在底部是CROPPED,我不知道为什么.

有了这个观察,我做了几个测试,找出原因.结果是,使用FPDI生成PDF文件的长度有限.正如您在上面的代码中看到的那样,我没有使用文件的实际长度.$size[h']我没有使用它,而是使用350.9mm,因为它会产生一个裁剪文件.我只是传递了一个靠近它的数值和实际的宽度来产生所需的结果.

$pdf->useTemplate($tplIdx, null, null, $size['w'], 310, false);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,310毫米(长度)是我用来生成一个未被删除的新PDF文件的最大数值.

我希望我已经向使用FPDI的所有开发人员提供了一些输入,这些开发人员遇到了CROPPED PDF结果的问题.

谢谢大家...

列维帕尔默


小智 11

代替

$pdf->useTemplate($templateIndex,0,0);
Run Code Online (Sandbox Code Playgroud)

使用

$this->useTemplate($templateIndex, null, null, 0, 0, true);
Run Code Online (Sandbox Code Playgroud)

$adjustPageSize默认情况下,最后一个参数设置为"false".

  • 谢谢你!我遇到了同样的问题.你有空的地方,我有0.用空值替换它们就可以了! (2认同)
  • 如果您对任何参数使用零,较新版本会抱怨,因此请使用所有空值,`$this->useTemplate($templateIndex, null, null, null, null, true);` (2认同)

小智 5

我有同样的问题。我的 pdf 从右侧裁剪,FDPI 从底部添加空间。我发现我的pdf宽度=215,高度=279,而FPDI每次导出都是210x297。

useTemplate函数可以将 pdf 缩放到一定大小,但输出仍保持 210x297。因此,我将 useTemplate 保留为默认值,并且“adjustPageSize”=true:

$pdf->useTemplate($templateId, 0, 0, 0, 0, true);
Run Code Online (Sandbox Code Playgroud)

需要更改的是输出尺寸,以匹配原始尺寸:

$templateSize = $pdf->getTemplateSize($templateId);
$pdf->AddPage('', [$templateSize['w'], $templateSize['h']]);
Run Code Online (Sandbox Code Playgroud)

如果您要上传横向 pdf,则必须设置方向:

$templateSize = $pdf->getTemplateSize($templateId);
$orientation = $templateSize['w'] > $templateSize['h'] ? 'L' : 'P';
$pdf->AddPage($orientation, [$templateSize['w'], $templateSize['h']]);
Run Code Online (Sandbox Code Playgroud)