我正在使用FPDF()方法(来自FPDI_Protection.php)导入现有PDF并应用密码保护。
我遇到的问题是原始PDF混合了纵向和横向页面(8.5“X11”和11“X8.5”),而导入方法则让您定义一次。我可以将新创建的pdf定义为11“X11”,这解决了其中一个方向裁剪的问题,但这对于打印目的并不理想,因为PDF缩放并左对齐,导致可读性/打印输出不佳。
我可以使用任何类型的例程,因为原始文档正在循环,以检测原始大小并动态设置新页面方向吗?
function pdfEncrypt ($origFile, $password, $destFile) // RESPONSIBLE FOR ADDING PASSWORD PROTECTION TO PDF FILES
{
require_once('fpdi/FPDI_Protection.php');
$pdf = new FPDI_Protection();
// set the format of the destinaton file, in our case 6×9 inch
$pdf->FPDF('P', 'in', array('11','11'));
//calculate the number of pages from the original document
$pagecount = $pdf->setSourceFile($origFile);
// copy all pages from the old unprotected pdf in the new one
for ($loop = 1; $loop <= $pagecount; $loop++)
{
$tplidx = $pdf->importPage($loop);
$pdf->addPage();
$pdf->useTemplate($tplidx);
}
// protect the new pdf file, and allow no printing, copy etc and leave only reading allowed
$pdf->SetProtection(array('print'), $password, '');
$pdf->Output($destFile, 'F');
return $destFile;
}
或者,或者,是否有更简单的方法使用php为现有的pdf添加密码?
答案 0 :(得分:3)
好的,我把头发拉了好几天。在不知不觉地搜索与我的问题相关的每个术语的迭代之后,我能够找到一个实际工作的解决方案的实例(我尝试安装pdflib lite,phpinfo,ghostscript,xpdf等等,以测量尺寸无济于事)。有用的是(你需要FPDI_Protection package [免费]):
$specs = $pdf->getTemplateSize($tplidx);
$pdf->addPage($specs['h'] > $specs['w'] ? 'P' : 'L');
完整功能如下:
function pdfEncrypt ($origFile, $password, $destFile) // RESPONSIBLE FOR ADDING PASSWORD PROTECTION TO PDF FILES
{
require_once('fpdi/FPDI_Protection.php');
$pdf = new FPDI_Protection();
// set the format of the destinaton file
$pdf->FPDF('P', 'in', array('8.5','11'));
//calculate the number of pages from the original document
$pagecount = $pdf->setSourceFile($origFile);
// copy all pages from the old unprotected pdf in the new one
for ($loop = 1; $loop <= $pagecount; $loop++)
{
$tplidx = $pdf->importPage($loop);
$specs = $pdf->getTemplateSize($tplidx);
$pdf->addPage($specs['h'] > $specs['w'] ? 'P' : 'L');
$pdf->useTemplate($tplidx);
}
// protect the new pdf file
$pdf->SetProtection(array('print'), $password, '');
$pdf->Output($destFile, 'F');
return $destFile;
}
添加这两行代码能够检测原始页面是否为横向纵向,并以相同方式在输出文件中重新创建页面。哈利路亚。
答案 1 :(得分:0)
感谢您的发帖,我可以在一分钟内解决我的定位问题!
无论如何,你不需要特殊的FPDI _&#34;保护&#34;仅为方向改变的包装,工作解决方案只需要&#34; FPDI&#34; package(用于getTemplatesize函数)。 以下是2012年8月解决方案的链接: FPDF / FPDI addPage() Orientation
答案 2 :(得分:0)
在我的fpdf_tpl.php(1.6.1)中,添加页面的方法称为 AddPage 而不是addPage。看一看,如果你调用addPage,方法就不会被执行,你就无法改变方向。
答案 3 :(得分:0)
要使用 getTemplateSize,您只需要 setasign/fpdi 包。 对于此包的当前版本 (v2.3.6),高度和宽度键不再是“w”和“h”,而是“宽度”和“高度”:
(来自 setasign\Fpdi\Fpdi.php)
/**
* Get the size of an imported page or template.
*
* Give only one of the size parameters (width, height) to calculate the other one automatically in view to the
* aspect ratio.
*
* @param mixed $tpl The template id
* @param float|int|null $width The width.
* @param float|int|null $height The height.
* @return array|bool An array with following keys: width, height, 0 (=width), 1 (=height), orientation (L or P)
*/
public function getTemplateSize($tpl, $width = null, $height = null)
{
...
}