10

我正在尝试使用 PhpPresentationsample.pptx使用他们文档中针对读者的简单说明来读取文件,我得到:

imagecreatefromstring(): Data is not in a recognized format

我检查了我是否安装了 PHP7.2-gd 以及所有其他依赖项。

我的代码:

require_once 'vendor/autoload.php';

use \PhpOffice\PhpPresentation\PhpPresentation;
use \PhpOffice\PhpPresentation\IOFactory;
use \PhpOffice\PhpPresentation\Style\Color;
use \PhpOffice\PhpPresentation\Style\Alignment;

$oReader = IOFactory::createReader('PowerPoint2007');
$data = $oReader->load(__DIR__ . '/sample.pptx');
var_dump($data);

有人可以帮我理解这个问题吗?

4

2 回答 2

8

在查看PHP 源代码后,为了对“ imagecreatefromstring ”函数有一些了解,我发现它只处理以下图像格式:

  • JPEG
  • PNG
  • 动图
  • WBM
  • GD2
  • BMP
  • WEBP

PHP 通过检查图像签名来识别“imagecreatefromstring”函数的参数中包含的图像格式,如此处所述。
当检测到未知签名时,会发出警告“数据不是可识别的格式”。
因此,您遇到的错误的唯一合理解释是您的 PPTX 文件包含不是上述格式之一的图像
您可以通过将扩展名从“.pptx”更改为“.zip”然后打开它来查看 PPTX 文件中图像的格式。
您应该看到如下内容:

Archive:  sample.pptx
  Length      Date    Time    Name
---------  ---------- -----   ----
     5207  1980-01-01 00:00   [Content_Types].xml
      ...
     6979  1980-01-01 00:00   ppt/media/image1.jpeg
     6528  1980-01-01 00:00   ppt/media/image2.jpeg
   178037  1980-01-01 00:00   ppt/media/image3.jpeg
   229685  1980-01-01 00:00   ppt/media/image4.jpeg
   164476  1980-01-01 00:00   ppt/media/image5.jpeg
     6802  1980-01-01 00:00   ppt/media/image6.png
    19012  1980-01-01 00:00   ppt/media/image7.png
    32146  1980-01-01 00:00   ppt/media/image8.png
      ...
---------                     -------
   795623                     74 files

如您所见,我的sample.pptx文件包含一些 JPEG 和 PNG 格式的图像。
也许您的示例文件包含一些带有矢量格式(WMF 或 EMF)图像的幻灯片;我不清楚(因为我在文档中没有找到任何参考)是否支持这些格式。最后,您应该尝试使用其他 PPTX 文件,以确保问题与特定文件无关(您可以在“ test/resources/files ”下找到一些)。
我已经搜索了 PowerPoint 文件支持的图像格式列表,但我无法找到准确的答案。
我发现的唯一相关链接如下:

这意味着 PPTX 文件中存在 TIFF 或 PICT (QuickDraw) 格式的图像也可能导致正在考虑的错误。

于 2018-09-21T20:23:54.400 回答
0

在开放式办公室或 MS Powerpoint 中以 PPT 2007 格式再次保存您的 pptx。它的格式问题。您正在使用 2007 打开一个最近的 PPT 格式

于 2018-09-25T22:12:11.743 回答