我陷入了非常复杂的困境。 我正在为贺卡开发PHP Web应用程序。
为此,我使用了一些Linux工具和TCPDF和FPDI。 让我告诉你这一切是如何运作的:
有4页贺卡模板PDF文件。这是自定义尺寸5x7英寸300dpi PDF文件。 我也在TCPDF中添加了自定义大小
case 'STANDARD_CARD' : {$pf = array(1500.00,2100.00);break;}
我做的是,我用:
pdftk templateX.pdf burst output page_%2d.pdf
将寺庙的每一页分开。
现在我使用:
$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);
其他一些事情,比如写邮件打印图像。最后使用以下方法保存文件:
$pdf->output("file_name.pdf","F");
原始PDF文件(仅限第1页):( 5x7英寸) Original pdf file 修改PDF和一些PDF操作:(29x20英寸) modified PDF
现在我得到的输出不是5x7 pdf它是一个29 x 20英寸的文件,它也破坏了我的计算和PDF。
请告诉我我做错了什么......
答案 0 :(得分:20)
嗨Ravish,
我也遇到过这个问题。其实我的情况是这样的。我有一个 Legal尺寸(8.5mm x 14mmmm)的原始文件。当我使用FPDI输出显示它时,它只显示字母大小(8.5mm x 11mm)。结果是: CROPPED PDF文件。
我做了几次谷歌搜索,并从不同的帖子中找到了几个答案。这是我找到的最相关的解决方案。
首先是下面这段功能代码: useTemplate
$this->useTemplate($templateIndex, null, null, 0, 0, true);
通常,一些开发人员将此设置为最后一个参数为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');
使用此代码,我创建了一个新的PDF WITHOUT CROPPING 我设置的导入文件。意思是,已显示模板的所有详细信息(原始文件)。
请注意我在设置PDF格式时观察到了一些内容:
首先,我的文件原始宽度为215.6毫米,长度为350.9毫米。现在,当我使用函数 getTemplateSize 和 useTemplate 设置PDF的大小时,例如:
$size = $pdf->getTemplateSize($tplIdx);
$pdf ->useTemplate($tplIdx, null, null, $size['w'], $size['h'],FALSE);
或简单地说:
$pdf ->useTemplate($tplIdx, null, null, 215.6, 350.9,FALSE);
结果是,我的新PDF文件底部是 CROPPED ,我不知道为什么。
根据这一观察,我做了几次测试以找出原因。并且结果是,使用FPDI生成PDF文件时存在长度限制。正如您在上面的代码中看到的那样,我没有使用文件的实际长度。而不是使用可以从$size[h']
派生的350.9mm,我没有使用它,因为它将提供裁剪文件。我只是传递了一个靠近它的数值和实际的宽度来产生所需的结果。
$pdf->useTemplate($tplIdx, null, null, $size['w'], 310, false);
顺便说一句,310毫米(长度)是我用来生成 NOT CROPPED 的新PDF文件的最大数值。
我希望我已经为使用FPDI的所有开发人员提供了一些输入,这些开发人员遇到了CROPPED PDF结果的问题。
感谢所有......
Levi Palmer
答案 1 :(得分:10)
而不是
$pdf->useTemplate($templateIndex,0,0);
使用
$this->useTemplate($templateIndex, null, null, 0, 0, true);
默认情况下,最后一个参数$adjustPageSize
设置为“false”。
答案 2 :(得分:3)
我有同样的问题。我的pdf是从右边裁剪的,从底部FDPI增加了空间。 我发现我的pdf宽度= 215,高度= 279,而FPDI每次导出210x297。
useTemplate
函数可以将你的pdf缩放到一定的大小,但输出仍然是210x297。
所以我将useTemplate保留为默认值和" adjustPageSize" = true:
$pdf->useTemplate($templateId, 0, 0, 0, 0, true);
需要更改的是输出尺寸,以匹配原始尺寸:
$templateSize = $pdf->getTemplateSize($templateId);
$pdf->AddPage('', [$templateSize['w'], $templateSize['h']]);
如果要上传横向格式的pdf,则必须设置方向:
$templateSize = $pdf->getTemplateSize($templateId);
$orientation = $templateSize['w'] > $templateSize['h'] ? 'L' : 'P';
$pdf->AddPage($orientation, [$templateSize['w'], $templateSize['h']]);