Файл 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, остается.