Файл PDF, созданный PdfLib, поврежден / неполон после загрузки в Amazon S3

Я генерирую PDF-файл, используя расширение PdfLib PHP. Я запускаю новый файл, загружаю в него изображение и вызываю end_document, чтобы закончить файл.

Все работает нормально, файл генерируется правильно, но я пытаюсь загрузить файл в облако Amazon S3 сразу (в той же функции, которая генерирует файл) после его генерации. Файл загружен, но он не завершен, похоже, загружен пустой PDF-файл.

// get a PDFLib object
$p = new PDFlib();

// determine filename
$pageFileName = $page->getPageNr() . '_' . sha1(microtime()) . '.pdf';

// determine local file path and S3 file path
$filePath = $this->fs->getPath(
    Dt_Util_FileStorage_Path::FILETYPE_SOURCEFILE,
    $pageFileName,
    $job
);

// start the document
if ($p->begin_document($filePath->getTmpPath(), "") == 0) {
    throw new Dt_Exception_DtException($p->get_errmsg(), 3, null);
}

// begin a new page inside the new document
$p->begin_page_ext($widthScreenResPixels, $heightScreenResPixels, "");

// load an image resource
$image = $p->load_image("auto", $imgfile, "");
if ($image == -1){
    throw new Exception("Error: " + $p->get_errmsg());
}

// load the image into the current page
$p->fit_image($image, 0, 0, "boxsize={" . $widthScreenResPixels . " " . $heightScreenResPixels . "} fitmethod=entire");

// end the page
$p->end_page_ext("");

// release the image
$p->close_image($image);

//write PDF file
$p->end_document("");

// sleep(5);

// upload the file to S3
$this->fs->putFile($filePath);

Место, где я храню файл, содержит файл, как и должно быть: изображение загружается в него, а размер файла составляет около 600 КБ. Загруженный файл похож на пустой скелет, файл, который был сгенерирован, когда я вызвал PdfLib->begin_document, но до того, как что-то на самом деле было помещено в него, я не могу открыть его, и его размер составляет 104 байта.

Я пытался поспать несколько секунд после end_document и перед загрузкой, потому что я подумал, что, возможно, PdfLib нужно некоторое время, чтобы закончить, но это не имеет никакого эффекта, результаты точно такие же.

У кого-нибудь есть идеи как это исправить, что может вызвать это, где искать решение?

ОБНОВЛЕНИЕ Проблема, кажется, класс API S3, который я использую. Я использовал это. При использовании официального SDK загрузка завершается, как и ожидалось. Я буду продолжать использовать официальный SDK. Первоначальный вопрос, почему он не смог использовать другой класс API, остается.

0 ответов

Другие вопросы по тегам