安装
概述
Aspose.Slides for PHP via Java 在两个进程中运行。您的 PHP 脚本使用 PHP 类,将每个调用通过 PHP/Java Bridge 传递给运行在 Apache Tomcat 中的 Java 版 Aspose.Slides。本文解释如何设置两端、使用 Composer 安装包以及运行短脚本来验证安装。
先决条件
- PHP 7.0 到 8.3,在
php.ini中设置allow_url_include = On。您的脚本从 Tomcat 通过 HTTP 加载桥接的客户端库Java.inc。在 PHP 8.4 及以后版本,如果加载了 PHP 的xml扩展,Java.inc会因错误 “end() expects exactly 1 argument” 而停止,且 Windows 版 PHP 总是加载该扩展。 - Composer。
- Java 8 或更高版本。 JRE 即可。
- Apache Tomcat 9。 PHP/Java Bridge 基于
javax.servletAPI,而 Tomcat 10 及以后不再提供该 API,因此桥接在这些版本上无法启动。 - PHP/Java Bridge 7.2.1,最新发布版本。它的 Web 应用
JavaBridge.war在 Tomcat 中运行。
本文在同一台计算机上运行 Tomcat 和您的 PHP 脚本。Aspose.Slides 在 Tomcat 内部打开和保存文件,因此脚本传递给它的每个路径都必须在 Tomcat 中有效。
在 Linux 上安装
这些命令在 Ubuntu 24.04 的用户主目录中安装所有内容。对于其他发行版,请使用相应的包管理器安装相同的软件包。
-
安装 PHP、Composer、Java 和下载工具,然后为 PHP 命令行打开
allow_url_include:sudo apt-get update sudo apt-get install -y php-cli composer default-jre-headless curl unzip sudo sed -i 's/^allow_url_include = Off/allow_url_include = On/' "$(php -r 'echo php_ini_loaded_file();')"
2. 下载 Apache Tomcat 9 和 PHP/Java Bridge,将桥接的 `JavaBridge.war` 放入 Tomcat 的 `webapps` 文件夹,然后启动 Tomcat。Tomcat 启动时会将 WAR 文件解压到 `webapps/JavaBridge`:
```bash
cd ~
curl -fsSLO https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.122/bin/apache-tomcat-9.0.122.tar.gz
tar -xzf apache-tomcat-9.0.122.tar.gz
curl -fsSL -o php-java-bridge.zip "https://sourceforge.net/projects/php-java-bridge/files/Binary%20package/php-java-bridge_7.2.1/php-java-bridge_7.2.1_documentation.zip/download"
unzip -o php-java-bridge.zip JavaBridge.war -d apache-tomcat-9.0.122/webapps
apache-tomcat-9.0.122/bin/startup.sh
-
创建项目文件夹,并从 Packagist 安装 Aspose.Slides for PHP via Java:
mkdir ~/hello-slides cd ~/hello-slides composer require aspose/slides -
停止 Tomcat,将包中的 Aspose.Slides JAR 文件复制到桥接的
WEB-INF/lib文件夹,用包中的 PHP 8 版本Java.inc替换桥接的Java.inc,然后再次启动 Tomcat:~/apache-tomcat-9.0.122/bin/shutdown.sh cp vendor/aspose/slides/zh/jar/aspose-slides-*-php.jar ~/apache-tomcat-9.0.122/webapps/JavaBridge/WEB-INF/lib/ unzip -o vendor/aspose/slides/zh/Java.inc.php8.zip -d ~/apache-tomcat-9.0.122/webapps/JavaBridge/java/ ~/apache-tomcat-9.0.122/bin/startup.sh对于 PHP 7,跳过
Java.inc的替换。Tomcat 启动需要几秒钟,且在脚本使用 Aspose.Slides 时必须保持运行。
在 Windows 上安装
-
安装 PHP 8.3 for Windows,并将其文件夹添加到
PATH环境变量。将php.ini-production复制为同文件夹下的php.ini。在php.ini中,设置allow_url_include = On并取消注释extension_dir = "ext"、extension=openssl和extension=zip行。Composer 需要openssl来下载包,需要zip来解压,除非已安装 7‑Zip 或PATH中已有unzip命令。 -
安装 Composer。
-
安装 Java 并将
JAVA_HOME环境变量设置为其安装目录。没有该变量 Tomcat 将无法启动。 -
在命令提示符中,下载 Apache Tomcat 9 和 PHP/Java Bridge,将桥接的
JavaBridge.war放入 Tomcat 的webapps文件夹并启动 Tomcat。Tomcat 的脚本通过CATALINA_HOME变量找到 Tomcat,因此后续步骤请继续使用同一命令提示符窗口。Tomcat 启动时会将 WAR 文件解压到webapps\\JavaBridge:cd %USERPROFILE% curl -fsSLO https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.122/bin/apache-tomcat-9.0.122-windows-x64.zip tar -xf apache-tomcat-9.0.122-windows-x64.zip set CATALINA_HOME=%USERPROFILE%\apache-tomcat-9.0.122 curl -fsSL -o php-java-bridge.zip "https://sourceforge.net/projects/php-java-bridge/files/Binary%20package/php-java-bridge_7.2.1/php-java-bridge_7.2.1_documentation.zip/download" tar -xf php-java-bridge.zip -C "%CATALINA_HOME%\webapps" JavaBridge.war "%CATALINA_HOME%\bin\startup.bat" -
创建项目文件夹,并从 Packagist 安装 Aspose.Slides for PHP via Java:
mkdir %USERPROFILE%\hello-slides cd %USERPROFILE%\hello-slides composer require aspose/slides -
停止 Tomcat,将包中的 Aspose.Slides JAR 文件复制到桥接的
WEB-INF\\lib文件夹,用包中的 PHP 8 版本Java.inc替换桥接的Java.inc,然后再次启动 Tomcat:"%CATALINA_HOME%\bin\shutdown.bat" copy vendor\aspose\slides\jar\aspose-slides-*-php.jar "%CATALINA_HOME%\webapps\JavaBridge\WEB-INF\lib\" tar -xf vendor\aspose\slides\Java.inc.php8.zip -C "%CATALINA_HOME%\webapps\JavaBridge\java" "%CATALINA_HOME%\bin\startup.bat"对于 PHP 7,跳过
Java.inc的替换。Tomcat 启动需要几秒钟,且在脚本使用 Aspose.Slides 时必须保持运行。
验证安装
将此脚本保存为项目文件夹中的 hello.php。它会创建一个包含一个文本框的演示文稿,并将其保存于脚本所在目录旁边:
<?php
require_once("http://localhost:8080/JavaBridge/java/Java.inc");
require_once(__DIR__ . "/vendor/aspose/slides/zh/lib/aspose.slides.php");
use aspose\slides\Presentation;
use aspose\slides\SaveFormat;
use aspose\slides\ShapeType;
$presentation = new Presentation();
try {
$slide = $presentation->getSlides()->get_Item(0);
$shape = $slide->getShapes()->addAutoShape(ShapeType::Rectangle, 50, 50, 400, 100);
$shape->getTextFrame()->setText("Hello, Aspose.Slides!");
$presentation->save(__DIR__ . "/hello.pptx", SaveFormat::Pptx);
} finally {
$presentation->dispose();
}
在项目文件夹中运行它:
php hello.php
脚本会生成 hello.pptx,其中包含一个包含文本框的幻灯片。未授权时,幻灯片还会带有试用水印;参见 Licensing。
脚本直接包含 aspose.slides.php:Composer 的自动加载器无法加载这些类,因为它们全部定义在同一个文件中。它还向 save 传递了绝对路径,因为 Aspose.Slides 在 Tomcat 中运行,并将相对路径解析为 Tomcat 的工作文件夹,而不是脚本所在的文件夹。
常见问题
如何验证已正确集成 Aspose.Slides?
运行 验证安装 中的脚本。如果它能够在无错误的情况下生成 hello.pptx,则 PHP、PHP/Java Bridge 和 Aspose.Slides 已成功协同工作。
为什么我的脚本会因 “Failed opening required ‘http://localhost:8080/JavaBridge/java/Java.inc’” 而停止?
PHP 无法从 Tomcat 加载 Java.inc。如果前面的提示信息显示 http:// 包装器被禁用,请在 PHP 命令行使用的 php.ini 文件中将 allow_url_include 设置为 On;可以通过 php --ini 查看使用的是哪个文件。如果提示 “Connection refused”,说明 Tomcat 尚未启动:请启动它,或等待几秒钟直至启动完成。
在处理大型演示文稿时,如何限制内存消耗?
仅在需要时提升 JVM 内存上限,并在 finally 块中关闭每个 Presentation 实例,以及时释放缓存。这样可防止内存不足错误,并在批处理操作期间保持整体内存使用的可预测性。
我能排除不需要的导出格式以减小最终 JAR 大小吗?
当前的 Aspose.Slides 发行版以单一整体库的形式提供,无法在构建时禁用像 PDF 或 SVG 等特定导出器。