MPDF - ошибка feof (), ftell (), fseek () и fread () - Содержание - PullRequest
0 голосов
/ 03 апреля 2019

Я использую следующую библиотеку для генерации PDF -> https://mpdf.github.io/

Версия MPDF -> 7.1.7 (обновлена ​​до 8.0.0)

Я сгенерировал довольно много PDF-файлов, а затем написал сценарий, чтобы объединить их в один скомпилированный PDF-файл. Все прошло хорошо, и PDF составляет 655 страниц.

Проблема возникает всякий раз, когда я пытаюсь добавить оглавление в pdf. Программа сталкивается с бесконечной ошибкой, говорящей о том, что feof (), ftell (), fseek () и fread () имеют ошибку «предоставленный ресурс не является допустимым потоковым ресурсом». Это происходит, только если я пытаюсь добавить в оглавление.

enter image description here

Ниже приведен код слияния. Он сканирует конкретный каталог, определяет, является ли он файлом или подкаталогом, затем захватывает pdf и импортирует его.

    function import_page($pdf, $path) {
        $page_count = $pdf -> SetSourceFile($path);
        for($j = 1; $j <= $page_count; $j++) {
            $page_id = $pdf -> ImportPage($j);
            $pdf -> UseTemplate($page_id);
            if($j < $page_count) {
                $pdf -> AddPage();
            }
        }
    }
    $pdf = new \Mpdf\Mpdf([
        'mode' => 'utf-8',
        'format' => 'Letter-P'
    ]);
    $pdf -> SetImportUse();

    $pdf -> WriteHTML('<tocpagebreak links="1" toc-preHTML="&lt;h2&gt;Table of Contents&lt;/h2&gt;" toc-resetpagenum="1" />');

    $files = scandir('../../output/');
    natsort($files);

    foreach($files as $file) {
        if(strpos($file, ".pdf") !== false) { // File
            $title = substr($file, strpos($file, '.') + 2, -4);
            $pdf -> TOC_Entry(htmlspecialchars($title, ENT_QUOTES), 0);

            import_page($pdf, '../../output/' . $file);
            $pdf -> WriteHTML('<pagebreak>');
        } elseif($file !== "." && $file !== "..") { // Directory
            $title = substr($file, strpos($file, '.') + 2);
            $pdf -> TOC_Entry(htmlspecialchars($title, ENT_QUOTES), 0);

            $sub_files = scandir('../../output/' . $file . '/');
            natsort($sub_files);

            foreach($sub_files as $sub_file) {
                if(strpos($sub_file, ".pdf") !== false) { // File
                    $sub_title = substr($sub_file, strpos($sub_file, '.') + 2, -4);
                    $pdf -> TOC_Entry(htmlspecialchars($sub_title, ENT_QUOTES), 1);

                    import_page($pdf, '../../output/' . $file . '/' . $sub_file);
                    $pdf -> WriteHTML('<pagebreak>');
                }
            }
        }
    }

    $pdf -> Output();

Этот код отлично работает, пока строка tocpagebreak закомментирована. Как только я попытаюсь добавить это, весь ад разрушится.

Надеюсь ... Я тупой и упустил что-то простое. Спасибо заранее за все ответы, я ценю это.

Исправить попытки

-Двигаясь по оглавлению writehtml в конец документа или добавляя страницу раньше. Результат: неудача.

-Удалить все настройки из tocpagebreak, пробовать методы tocpagebreak и tocpagebreakarray. Результат: неудача.

-Commenting либо один раздел блока if, либо другой (один файл или подкаталоги). Результат: Пасс.

-Завершить цикл после одной итерации подкаталога. Результат: Пасс.

-Сохранить скомпилированный PDF. Напишите быстрый импорт только этой страницы и попробуйте добавить оглавление. Результат: Fail.

- Обновлена ​​версия MPDF до 8.0.0. Результат: Fail.

...