FPDF Получает «Неверное назначение вывода», но код ошибки показывает правильное назначение - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь использовать FPDF и FPDI для редактирования PDF и добавления текста к нему.Я получаю сообщение об ошибке «Неверное назначение вывода», но назначение - это правильное расположение, в котором я хочу создать файл. Почему FPDF не нравится мое назначение вывода?

Это в проекте laravel

    $pdf = new \setasign\Fpdi\Fpdi();
    $pdf->AddPage();
    $pdf->setSourceFile(public_path('/pdf/higher.pdf'));
    $tplIdx = $pdf->importPage(1);
    $pdf->useTemplate($tplIdx, 10, 10, 100);
    $pdf->SetFont('Helvetica');
    $pdf->SetTextColor(255, 0, 0);
    $pdf->SetXY(30, 30);
    $pdf->Write(0, 'This is just a simple text');
    $pdf->Output(public_path('/pdf/'),'higher2');
    return $pdf;

, и ошибка:

 message: "FPDF error: Incorrect output destination: /home/vagrant/code/project-name/public/pdf/"

Я также попытался удалить public_path () и просто установитьэто к Output('pdf', 'higher2') и ничего хорошего там тоже нет.

Кроме того, я также попытался изменить имя выходного файла PDF на higher2.pdf на тот случай, если он хочет увидеть расширение (но, очевидно, у него больше проблем с адресатом, а не с именем)

Я даже пытался изменить права доступа к этой папке для записи кем-либо:

drwxrwxrwx  5 ion  staff    160 May 21 05:44 pdf

edit: просто чтобы заметить, я вижу, что метод с public_path () пытается сохранить вмоя бродячая папка по какой-то причине, поэтому я в замешательстве.Когда я пытаюсь сохранить в '/ pdf' без public_path (), я получаю эту ошибку:

 message: "FPDF error: Incorrect output destination: /pdf/"

edit 2:

Я также пробовал это:

$pdf->Output('F','/pdf/higher2.pdf');

и получил ошибку:

message: "file_put_contents(/pdf/higher2.pdf): failed to open stream: No such file or directory"

, а также попробовал оригинальное имя pdf, которое определенно существует и получил ту же ошибку:

$pdf->Output('F','/pdf/higher.pdf');

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Вы никогда не должны перезаписывать файл, из которого читаете!

Подпись метода Output():

string Output([string dest [, string name [, boolean isUTF8]]])

Параметр $dest определяется как:

Пункт назначения, куда отправить документ. Это может быть одно из следующих:

I: send the file inline to the browser. The PDF viewer is used if available.
D: send to the browser and force a file download with the name given by name.
F: save to a local file with the name given by name (may include a path).
S: return the document as a string.

Значением по умолчанию является I.

Так твой код:

$pdf->Output(public_path('/pdf/'),'higher2');

не имеет абсолютно никакого смысла. Я предполагаю, что вы хотите сохранить полученный PDF-файл в путь в публичной области с именем higher2.pdf. Итак, ваш код должен выглядеть так:

$pdf->Output('F', public_path('/pdf/higher2.pdf'));

PS: Вы не можете редактировать PDF с FPDI !

1 голос
/ 23 мая 2019

Метод Output () требует, чтобы первым параметром был пункт назначения, а вторым параметром имя файла.

Из документации:

F: сохранить в локальный файл с именем, указанным по имени (может включать путь).

Попробуйте это:

$filename="/pdf/higher2.pdf";
$pdf->Output($filename,'F');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...