使用PHP从office文件(.doc .ppt等)生成JPG

时间:2012-08-02 19:07:44

标签: php ms-office jpeg

我正在构建一个应用程序,人们可以上传文件并与其他人共享文件。我们要做的部分工作是允许人们在线预览文件。

是否有一种直接的方式来为文档中的前X个页面生成jpgs?然后我们可以将这些jpgs放在网页中,允许用户预览。

我已经看过在服​​务器上安装开放式办公室,但希望有一个PHP库可以完成同样的工作。

有人可以帮忙吗?

干杯


是的,不一定要是jpg,任何图像文件都没问题(实际上甚至pdf也没关系)

3 个答案:

答案 0 :(得分:4)

尝试使用com类:

您可以使用com类将office 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();

&GT;

或将单词转换为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;
?>

答案 1 :(得分:2)

您无法使用Office Interop自动执行此类任务,请参阅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特定的东西,但是你可以看到它是怎么回事并让它在其他地方工作:

@IBAction func myButton(sender: AnyObject) { //login button

    let UserName = input.text!
    let UserPassword = password.text!

    if ( UserName.isEmpty || UserPassword.isEmpty) { return }

    //send data user to server side 
    let myUrl = NSURL(string: "http://servertest.cf/Store.php?LoginUser=Test%40home.com&LoginPassword=123456789")
    let myRequest = NSMutableURLRequest(URL: myUrl!)

    myRequest.HTTPMethod = "POST"

    let postString = "email=\(UserName)&Password=\(UserPassword)";

    myRequest.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

    let Task = NSURLSession.sharedSession().dataTaskWithRequest(myRequest)
        { data , response , error in

            if error != nil {
                println("error\(error)")

                self.myLabel.text = "wrong user name"
            }

            var err : NSError?
            var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableContainers , error: &err) as? NSDictionary

           if let parseJson = json
           {
            var resultValue:String = parseJson["Status"] as! String!

            println("result\(resultValue)")

            if(resultValue == "Success" )
            {
                var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
                var vc: UINavigationController = storyboard.instantiateViewControllerWithIdentifier("SecondViewController") as! UINavigationController

                self.presentViewController(vc, animated: true, completion: nil)
            }
        }
    }

    Task.resume()
}

答案 2 :(得分:0)

对于特定于PHP的选项,您可以使用PHPWord - 此库是用PHP编写的,提供用于读取和写入不同文档文件格式的类(包括hierarchical queriesOption Explicit Public wsSheet As Worksheet Public wbMaster As Workbook Public wbReport As Workbook Public rngPartNumber As Range Public rngPartName As Range Public rngSupplier As Range Public rngTPRStatus As Range Public rngOffTool As Range Public rngExceptionNotes As Range Public rngMRD As Range Sub RunReports() Set wbMaster = ActiveWorkbook Set wsSheet = wbMaster.Sheets("Part x Part Matrix") With wsSheet .AutoFilterMode = False SetRanges End With TPRReport ExceptionsReport1 wsSheet.ShowAllData End Sub Sub SetRanges() wsSheet.Activate Set rngPartNumber = Range("C:C") Set rngPartName = Range("H:H") Set rngSupplier = Range("Q:R") Set rngTPRStatus = Range("X:Y") Set rngOffTool = Range("Z1", Range("AC1").End(xlDown)) Set rngExceptionNotes = Range("AH1", Range("AH1").End(xlDown)) Set rngMRD = Range("AI1", Range("AK1").End(xlDown)) End Sub Sub TPRReport() Dim rngTPRResults As Range wsSheet.Range("A1").End(xlToRight).AutoFilter Field:=24, Criteria1:="No" Set rngTPRResults = Union(rngPartNumber, rngPartName, rngSupplier, rngTPRStatus) rngTPRResults.Copy Set wbReport = Workbooks.Add With wbReport.Worksheets("Sheet1") .Range("A1").Select .Paste .SaveAs Filename:=wbMaster.Path & "\TPR Report" & Format(CStr(Now), "yyyymmdd_hhmm") .Close End With End Sub Sub ExceptionsReport1() Dim rngExceptions As Range wsSheet.Range("A1").End(xlToRight).AutoFilter Field:=38, Criteria1:="X" Set rngExceptions = Union(rngPartNumber, rngPartName, rngSupplier, rngTPRStatus, rngOffTool, rngExceptionNotes, rngMRD) rngExceptions.Copy Set wbReport = Workbooks.Add With wbReport.Worksheets("Sheet1") .Range("A1").Select .Paste .SaveAs Filename:=wbMaster.Path & "\Exceptions Report CV" & Format(CStr(Now), "yyyymmdd_hhmm") .Close End With End Sub ),但它不会让你能够从全系列的Office文件进行转换。

要在任何平台上转换任何Office文件,您可以使用Zamzar等文件转换API。它可以将所有Office格式(DOC / DOCX / PPT / PPTX / XLS / XLSX)转换为图像(JPG,PNG,GIF等)和PDF。

从PHP调用的代码如下(更多信息in the docs)。

.doc