我正在构建一个应用程序,人们可以在其中上传文件并与其他人共享。我们希望做的部分工作是允许人们在线预览文件。
是否有一种直截了当的方式来为文档中的前 X 个页面生成 jpgs?然后我们可以将这些 jpg 文件放在允许用户预览的网页中。
我看过在服务器上安装开放式办公室,但希望在某处有一个 php 库可以完成同样的工作。
有人可以帮忙吗?
干杯
顺便说一句,不必是 jpg,任何图像文件都可以(实际上即使是 pdf 也可以)
用 com 类试试这个:
您可以使用 com 类将 office 文件转换为 jpg
COM 类参考:-
http://us2.php.net/manual/en/class.com.php
或下面的代码是将ppt转换为jpg格式
<html>
<head>
<title>ShotDev.Com Tutorial</title>
</head>
<body>
<?
$ppApp = new COM("PowerPoint.Application");
$ppApp->Visible = True;
$strPath = realpath(basename(getenv($_SERVER["SCRIPT_NAME"]))); // C:/AppServ/www/myphp
$ppName = "MySlides.ppt";
$FileName = "MyPP";
//*** Open Document ***//
$ppApp->Presentations->Open(realpath($ppName));
//*** Save Document ***//
$ppApp->ActivePresentation->SaveAs($strPath."/".$FileName,17); //'*** 18=PNG, 19=BMP **'
//$ppApp->ActivePresentation->SaveAs(realpath($FileName),17);
$ppApp->Quit;
$ppApp = null;
?>
PowerPoint Created to Folder <b><?=$FileName?></b>
</body>
</html>
---------------------------
Or try this :-
$powerpnt = new COM("powerpoint.application") or die("Unable to instantiate Powerpoint");
$presentation = $powerpnt->Presentations->Open(realpath($file), false, false, false) or die("Unable to open presentation");
foreach($presentation->Slides as $slide)
{
$slideName = "Slide_" . $slide->SlideNumber;
$exportFolder = realpath($uploadsFolder);
$slide->Export($exportFolder."\\".$slideName.".jpg", "jpg", "600", "400");
}
$powerpnt->quit();
?>
或将word转换为jpg
<?php
// starting word
$word = new COM("word.application") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}\n";
//bring it to front
$word->Visible = 1;
//open an empty document
$word->Documents->Add();
//do some weird stuff
$word->Selection->TypeText("This is a test...");
$word->Documents[1]->SaveAs("Useless test.doc");
//closing word
$word->Quit();
//free the object
$word = null;
?>
您不能使用 Office 互操作来自动执行此类任务,请参阅此处的 Microsoft 原因:
https://support.microsoft.com/en-us/kb/257757
最好的方法是使用功能强大的库,例如 Aspose.Slides(与 ppt、pptx 兼容,强大的操作),旨在用作 API。
您可以通过 NetPhp 库从 PHP 中使用 Aspose.Slides。这里有一个例子:
http://www.drupalonwindows.com/en/blog/powerpoint-presentation-images-php-drupal-example
相关的代码是这个,它有一些 Drupal 特定的东西,但你可以看到它是如何运行的,并使它在其他地方工作:
protected function processFilePowerpoint(array $file, array &$files) {
/** @var \Drupal\wincachedrupal\NetPhp */
$netphp = \Drupal::service('netphp');
$runtime = $netphp->getRuntime();
$runtime->RegisterAssemblyFromFile("libraries/_bin/aspose/Aspose.Slides.dll", "Aspose.Slides");
$runtime->RegisterAssemblyFromFullQualifiedName("System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing");
$destination = strtr(PresentacionSlide::UPLOAD_LOCATION, ['[envivo_presentacion:id]' => $this->entity->id()]);
file_prepare_directory($destination, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
$sourcefile = drupal_realpath($file['tmppath']);
$presentation = $runtime->TypeFromName("Aspose.Slides.Presentation")->Instantiate($sourcefile);
$format = $runtime->TypeFromName("System.Drawing.Imaging.ImageFormat")->Png;
$x = 0;
/** @var \NetPhp\Core\NetProxyCollection */
$slides = $presentation->Slides->AsIterator();
foreach ($slides as $slide) {
$x++;
$bitmap = $slide->GetThumbnail(1, 1);
$destinationfile = $destination . "\\slide_{$x}.png";
$bitmap->Save(drupal_realpath($destinationfile), $format);
$files[] = PresentacionSlide::fromFile($destinationfile);
}
$presentation->Dispose();
}
对于特定于 PHP 的选项,您可以使用PHPWord - 这个库是用 PHP 编写的,并提供类来读取和写入不同的文档文件格式(包括.doc
和.docx
),但它不会让您能够从全范围转换Office 文件。
要在任何平台上转换任何 Office 文件,您可以使用像Zamzar这样的文件转换 API 。它可以从所有 Office 格式(DOC / DOCX / PPT / PPTX / XLS / XLSX)转换为图像(JPG、PNG、GIF 等)和 PDF。
从 PHP 调用的代码如下(更多信息在 docs 中)。
<?php
// Build request
$endpoint = "https://api.zamzar.com/v1/jobs";
$apiKey = "YOUR_KEY";
$sourceFilePath = "/tmp/my.doc"; // Or DOCX/PPT/PPTX/XLS/XLSX
$targetFormat = "jpg";
$sourceFile = curl_file_create($sourceFilePath);
$postData = array(
"source_file" => $sourceFile,
"target_format" => $targetFormat
);
// Send request
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_SAFE_UPLOAD, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, $apiKey . ":");
$body = curl_exec($ch);
curl_close($ch);
// Process response (with link to converted files)
$response = json_decode($body, true);
print_r($response);
?>