5

FPDF() メソッド (FPDI_Protection.php から) を使用して、既存の PDF をインポートし、パスワード保護を適用しています。

私が抱えている問題は、元の PDF に縦向きと横向きのページ (8.5"X11" & 11"X8.5") が混在しているのに対し、インポート方法では一度定義する必要があることです。新しく作成された PDF を 11"X11" に定義できます。これにより、方向の切り取りの問題が修正されますが、これは印刷目的には理想的ではありません.

元のドキュメントがループされているときに、元のサイズを検出し、その場で新しいページの向きを設定するために使用できるルーチンはありますか?

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 にパスワードを追加する簡単な方法はありますか?

4

4 に答える 4

6

わかりました、私はこれで何日も髪を伸ばしました. 私の問題に関連する用語のすべての反復を精力的にグーグルで検索した後、実際に機能するソリューションのインスタンスを1つ見つけることができました(pdflib lite、phpinfo、ghostscript、xpdfなどをインストールして、寸法を測定して無駄にしました)。うまくいったのはこれでした( FPDI_Protectionパッケージ[無料]が必要です):

    $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;
}

この 2 行のコードを追加することで、元のページが縦向きか横向きかを検出し、同じ方法で出力ファイルにページを再作成することができました。ハレルヤ。

于 2013-03-06T23:21:55.840 に答える
0

投稿していただきありがとうございます。オリエンテーションの問題を 1 分以内に解決できました。

とにかく、向きの変更だけのために特別な FPDI_"Protection" パッケージは必要ありません。有効なソリューションには "FPDI" パッケージ (getTemplatesize 関数用) のみが必要です。2012 年 8 月のソリューションへのリンクは次の とおりです。 FPDF / FPDI addPage() Orientation

于 2013-04-01T11:33:27.683 に答える
0

getTemplateSize を使用するには、 setasign/fpdiパッケージのみが必要です。このパッケージの現在のバージョン ( v2.3.6 ) では、高さと幅のキーは 'w' と 'h' ではなく、'width' と 'height' です:

(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)
{
    ...
}
于 2021-06-01T11:53:47.137 に答える