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毫米.现在,当我使用函数getTemplateSize和useTemplate设置我的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".
小智 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)