12

我陷入了一个非常复杂的境地。我正在开发用于贺卡的 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 文件(仅第一页):(5x7 英寸) 原始 pdf 文件 修改后的 PDF 和一些 PDF 操作:(29x20 英寸) 修改后的 PDF

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

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

4

3 回答 3

28

嗨,拉维什,

我也遇到了这个问题。其实我的情况是这样的。我有一个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,而没有裁剪我设置的导入文件。意思是,模板(原始文件)的所有详细信息都已显示。

另请注意,我在设置 PDF 的大小时观察到了一些东西:

首先,我的文件的原始宽度为 215.6mm,长度为 350.9mm。现在,当我使用函数getTemplateSizeuseTemplate设置 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 文件在底部被裁剪,我不知道为什么。

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

$pdf->useTemplate($tplIdx, null, null, $size['w'], 310, false);

顺便说一句,310 mm(长度)是我用来生成未 CROPPED的新 PDF 文件的最大数值。

我希望我已经向所有使用 FPDI 遇到 CROPPED PDF 结果问题的开发人员提供了一些意见。

谢谢大家...

列维·帕尔默

于 2013-09-30T22:53:12.723 回答
13

代替

$pdf->useTemplate($templateIndex,0,0);

采用

$this->useTemplate($templateIndex, null, null, 0, 0, true);

最后一个参数$adjustPageSize默认设置为“false”。

于 2012-06-05T17:27:54.283 回答
5

我有同样的问题。我的 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']]);
于 2018-05-17T08:18:48.840 回答