sau*_*sel 33 php excel pdf-generation ms-word
我正在寻找一种使用PHP将Word和Excel文件转换为PDF的方法.
原因是我需要能够将各种格式的文件合并到一个文档中.我知道如果我能将所有内容转换为PDF,我可以使用PDFMerger(使用fpdf)将PDF合并到一个文件中.
我已经能够从其他文件类型/图像创建PDF,但我坚持使用Word Docs.(我想我可能能够使用我已经用来从html代码创建Excel文件的PHPExcel库转换Excel文件).
我不使用Zend Framework,所以我希望有人能够指出我正确的方向.
或者,如果有一种方法可以从Word文档创建图像(jpg)文件,那将是可行的.
谢谢你的帮助!
sau*_*sel 22
我找到了解决问题的方法,并在提出请求后将其发布在此处以帮助其他人.如果我错过任何细节,我会道歉,自从我开始研究这个解决方案以来已经有一段时间了.
首先需要在服务器上安装Openoffice.org.我请求我的托管服务提供商在我的VPS上安装开放式办公室RPM.这可以通过WHM直接完成.
既然服务器具有处理MS Office文件的能力,您就可以通过PHP执行命令行指令来转换文件.为了解决这个问题,我找到了PyODConverter:https://github.com/mirkonasato/pyodconverter
我在服务器上创建了一个目录,并在其中放置了PyODConverter python文件.我还在Web根目录上创建了一个纯文本文件(我将其命名为"adocpdf"),其中包含以下命令行说明:
directory=$1
filename=$2
extension=$3
SERVICE='soffice'
if [ "`ps ax|grep -v grep|grep -c $SERVICE`" -lt 1 ]; then
unset DISPLAY
/usr/bin/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
sleep 5s
fi
python /home/website/python/DocumentConverter.py /home/website/$directory$filename$extension /home/website/$directory$filename.pdf
Run Code Online (Sandbox Code Playgroud)
这将检查openoffice.org库是否正在运行,然后调用PyODConverter脚本来处理该文件并将其作为PDF输出.当使用PHP文件执行脚本时,将提供前三行中的3个变量.延迟("睡眠5秒")用于确保openoffice.org有足够的时间来启动(如果需要).我已经使用了几个月了,5s的差距似乎给了足够的喘息空间.
该脚本将在与原始目录相同的目录中创建文档的PDF版本.
最后,从PHP中启动Word/Excel文件的转换(我在一个函数中检查我们正在处理的文件是否是word/excel文件)...
//use openoffice.org
$output = array();
$return_var = 0;
exec("/opt/adocpdf {$directory} {$filename} {$extension}", $output, $return_var);
Run Code Online (Sandbox Code Playgroud)
将Word/Excel文件上载到服务器后,将调用此PHP函数.exec()调用中的3个变量直接与上面纯文本脚本开头的3相关.请注意,如果要转换的文件位于Web根目录中,$ directory变量不需要前导斜杠.
好的,就是这样!希望这对某人有用,并为他们解决我遇到的困难和学习曲线.
dbf*_*dbf 16
当我谈到主题词2007 docx,单词97-2004 doc,pdf以及所有其他类型的MS Office希望"转换y为z但实际上他们不想成为" 时,我的2美分.根据我迄今为止的经验,不能依赖使用LibreOffice或OpenOffice进行转换.虽然.doc文档往往比word 2007更好地支持.docx.一般来说,很难将其转换.docx为.doc不破坏任何东西.
.docx.doc对于不是二元的模板,它也往往非常有用.
从.doc大多数情况下转换为PDF非常可靠.如果您仍然可以影响word文档的设计或内容,那么这可能会令人满意,但在我的情况下,文档是由外国公司提供的,即使在生成.docx模板后,在某些情况下,生成的文件.docx也必须稍微修改一下补充文本在生成PDF之前.
所有这些打嗝让我得出结论,我发现唯一真正可靠的转换方法是在PHP中使用COM类,让MS Word或Excel应用程序为您完成所有工作.我将举例说明转换.docx为.doc和/或PDF.如果您没有安装MS Office,可以下载60天的试用版,这样可以为测试提供足够的空间.
COM.net扩展默认在注释中php.ini,只搜索该行php_com_dotnet.dll并取消注释它
extension=php_com_dotnet.dll
Run Code Online (Sandbox Code Playgroud)
重新启动Web服务器(IIS不是预先的,Apache也可以正常工作).
下面的代码演示了它是多么容易.
$word = new COM("Word.Application") or die ("Could not initialise Object.");
// set it to 1 to see the MS Word window (the actual opening of the document)
$word->Visible = 0;
// recommend to set to 0, disables alerts like "Do you want MS Word to be the default .. etc"
$word->DisplayAlerts = 0;
// open the word 2007-2013 document
$word->Documents->Open('yourdocument.docx');
// save it as word 2003
$word->ActiveDocument->SaveAs('newdocument.doc');
// convert word 2007-2013 to PDF
$word->ActiveDocument->ExportAsFixedFormat('yourdocument.pdf', 17, false, 0, 0, 0, 0, 7, true, true, 2, true, true, false);
// quit the Word process
$word->Quit(false);
// clean up
unset($word);
Run Code Online (Sandbox Code Playgroud)
这只是一个小小的示范.我可以说,如果涉及转换,这是我可以使用甚至推荐的唯一真正可靠的选项.
Vin*_*kal 10
1)我正在使用WAMP.
2)我已经安装了Open Office(来自apache http://www.openoffice.org/download/).
3)$output_dir = "C:/wamp/www/projectfolder/";这是我想要创建输出文件的项目文件夹.
4)我已将输入文件放在此处 C:/wamp/www/projectfolder/wordfile.docx";
然后我运行我的代码..(如下)
<?php
set_time_limit(0);
function MakePropertyValue($name,$value,$osm){
$oStruct = $osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue");
$oStruct->Name = $name;
$oStruct->Value = $value;
return $oStruct;
}
function word2pdf($doc_url, $output_url){
//Invoke the OpenOffice.org service manager
$osm = new COM("com.sun.star.ServiceManager") or die ("Please be sure that OpenOffice.org is installed.\n");
//Set the application to remain hidden to avoid flashing the document onscreen
$args = array(MakePropertyValue("Hidden",true,$osm));
//Launch the desktop
$oDesktop = $osm->createInstance("com.sun.star.frame.Desktop");
//Load the .doc file, and pass in the "Hidden" property from above
$oWriterDoc = $oDesktop->loadComponentFromURL($doc_url,"_blank", 0, $args);
//Set up the arguments for the PDF output
$export_args = array(MakePropertyValue("FilterName","writer_pdf_Export",$osm));
//print_r($export_args);
//Write out the PDF
$oWriterDoc->storeToURL($output_url,$export_args);
$oWriterDoc->close(true);
}
$output_dir = "C:/wamp/www/projectfolder/";
$doc_file = "C:/wamp/www/projectfolder/wordfile.docx";
$pdf_file = "outputfile_name.pdf";
$output_file = $output_dir . $pdf_file;
$doc_file = "file:///" . $doc_file;
$output_file = "file:///" . $output_file;
word2pdf($doc_file,$output_file);
?>
Run Code Online (Sandbox Code Playgroud)
我成功地在我的主机的web服务器上放了一个可移植版本的libreoffice,我用PHP调用它来执行从.docx等到pdf的命令行转换.在飞行中.我在主持人的网络服务器上没有管理员权限.这是我做的博客文章:
好极了!使用PHP与LibreOffice(OpenOffice的后继者)直接从.docx或.odt转换为.pdf!
基于 Open Office / LibreOffice 的解决方案会做的不错,但如果 PDF 是在 MS-Office 中创建的,则不要指望它们与源文件相似。看起来与原始文件 90% 相似的 PDF 在许多领域被认为是不可接受的。
确保您的 PDF 看起来与原件完全一样的唯一方法是使用一种在幕后使用官方 MS-Office DLL 的解决方案。如果您在非基于 Windows 的服务器上运行 PHP 解决方案,则需要额外的 Windows Server。这可能是一个亮点,但如果您真的关心 PDF 的外观和感觉,您可能没有选择。
看看这篇博文。它展示了如何使用 PHP 以高保真度转换 MS-Office 文件。
免责声明:我写了这篇博文并致力于相关的商业产品,所以认为我有偏见。但是,对于与我一起工作的 PHP 人员来说,它似乎是一个很好的解决方案。
| 归档时间: |
|
| 查看次数: |
122974 次 |
| 最近记录: |