7

ファイルをアップロードして他の人と共有できるアプリケーションを構築しています。私たちが目指していることの一部は、オンラインでファイルをプレビューできるようにすることです。

ドキュメントから最初の X ページ分の jpg を生成する簡単な方法はありますか? 次に、これらの jpg を Web ページに配置して、ユーザーがプレビューできるようにします。

私はサーバーにオープンオフィスをインストールすることを見てきましたが、同じ仕事をするphpライブラリがどこかにあることを望んでいました.

誰でも助けることができますか?

乾杯


ところで、jpg である必要はありません。任意の画像ファイルで問題ありません (実際には pdf でも問題ありません)。

4

3 に答える 3

4

com クラスでこれを試してください:

Officeファイルをjpgに変換するには、comクラスを使用できます

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;
?>
于 2012-08-02T19:16:58.990 に答える
1

Office Interop を使用してこのようなタスクを自動化することはできません。Microsoft の理由を参照してください。

https://support.microsoft.com/en-us/kb/257757

最善の方法は、API として使用するように設計された Aspose.Slides (ppt、pptx、強力な操作との互換性) などの強力なライブラリを使用することです。

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();
  }
于 2016-02-06T18:42:01.010 に答える