昨年、百度図書館の機能と同様に、ワンクリックで文書をアップロードし、オンラインでプレビューできるOAシステムが開発された。
動作環境:CentOs5.5
使用したツール: Openoffice 3、Pdf2Swf ツール、Jodconverter、FlexPaper
インターネットで情報を検索したところ、そのような機能はすでに実装されていることがわかりましたが、PHP については見つかりませんでした。
オンライン情報をもとに運用体験を実施します。
記録して要約します:
全体的なアイデアは次のとおりです:
実装手順: 1. DOC をアップロード 2. DOC を PDF に変換 3. PDF を SWF に変換 4.
を表示
Linux 環境への openoffice sdk + pdf2swf ツールの導入に基づいて、最初に openoffice sdk を使用してドキュメントを pdf に均一に変換し、次に pdf2swf ツールを使用して pdf を swf に変換します
。
実装プロセス
DOC を PDF に変換するには、LINUX で Openoffice を使用できます。
したがって、最初に必要なのは Openoffice をインストールすることです。
1. openoffice3 をインストールします。私は複数のサーバーにインストールしたため、さまざまな問題が発生しました。問題が発生した場合は、openoffice のインストールに関する前の記事を参照してください。
tar zxvf OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_zh-CN.tar.gz
cd RPEM
rpm -ivh *.rpm --nodeps –force
インストール後のデフォルトのディレクトリは /opt/ ディレクトリ
の下にあります。
サービスの開始:
/opt/openoffice.org3/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &
CentOs では Hengti と Songti が不足します。Windows でフォント ディレクトリを直接見つけて、Hengti と Songti をディレクトリ
にコピーします。
/opt/openoffice.org/basis3.3/share/fonts/truetype/
再起動後に有効になります
2. OpenOffice SDK3.3
をインストールします
tar zxvf OOo-SDK_3.3.0_Linux_x86-64_install-rpm_en-US.tar.gz
cd OOO330_m20_native_packed-1_en-US.9567/RPMS/
rpm -vih *.rpm
3. jodconverter.2.2.2 をインストールします。これをインストールすると、すでに DOC を PDF に変換できます。
インストールは非常に簡単で、Web サイトにアクセスしてこれをダウンロードするだけです。
これを解凍してディレクトリにコピーすると、その中の /lib/jodconverter-cli-2.2.2.jar を呼び出すだけで、コマンド test を直接実行できます。
java -jar /usr/local/wenku/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar /tmp/1.doc /tmp/1.pdf
4. swftools をインストールします
中国語サポートのインストール:
mkdir –p /usr/share/xpdf
cd /usr/share/xpdf/
中国語サポートとフォント ライブラリをダウンロード
wget ftp://ftp.foolabs.com/pub/xpdf/xpdf-chinese-simplified.tar.gz
wget http://www.nginxs.com/download/font.zip
tar zxvf xpdf-chinese-simplified.tar.gz
font.zip を解凍します
mv Gbsn00lp.ttf gkai00mp.ttf xpdf-簡体字中国語/CMap/ cd /usr/share/xpdf/xpdf-簡体字中国語
新しいフォントを編集して追加します
vim add-to-xpdfrc
内容は以下の通りです:
cidToUnicodeAdobe-GB1/usr/share/xpdf/簡体字中国語/Adobe-GB1.cidToUnicode
unicodeMapISO-2022-CN/usr/share/xpdf/簡体字中国語/ISO-2022-CN.unicodeMap
unicodeMapEUC-CN/usr/share/xpdf/簡体字中国語/EUC-CN.unicodeMap
unicodeMapGBK/usr/share/xpdf/簡体字中国語/GBK.unicodeMap
cMapDirAdobe-GB1/usr/share/xpdf/簡体字/CMap toUnicodeDir/usr/share/xpdf/簡体字/CMap
displayCIDFontTT Adobe-GB1 /usr/share/xpdf/簡体字中国語/CMap/gkai00mp.ttf
保存して終了
SwfTool のインストール:
cd /usr/local/wenku
wget http://www.swftools.org/swftools-0.9.1.tar.gz
tar zxvf swftools-0.9.1.tar.gz
cd swftools-0.9.1
./configure 6) make
インストールを行う
動作するかテストします
pdf2swf -o /usr/output.swf -T -z -t -f /usr/test1.pdf -s languagedir=/usr/local/share/xpdf/簡体字中国語 -s flashversion=9
テストが成功した場合は、半分以上は OK であり、表示の問題です。
5. FlexPaper を使用してオンライン プレビューを実装します
これはインターネットからダウンロードできます。デモを見て JS を変更するだけです。これは SWF のパスを読み取るために使用されます。これは簡単なので、詳細は説明しません。
PHP が変換を実装するために LINUX コマンドを呼び出すと、PHP に実行権限がないという問題が発生する場合があります。PHP のユーザー権限をユーザー none の権限に変更することに注意してください。
以下は私自身が書いたコードであり、PHP の学習を始めたばかりで、十分に簡潔ではありません。
Yiiフレームワークのファイル変換機能、DOCからSWFへ
/**
ファイル変換
オスカー 2011-11-25 jincan.liu@gmail.com
*/
クラスコンバータはCWidgetを拡張します{
パブリック関数 run($file)
{
$filesArr = array('pdf','doc','docx','xls','xlsx','ppt','pptx','txt');
//ファイルのアップロードと変換
if($_FILES["ファイル"] && $_FILES["ファイル"]["エラー"] <=0 ){
$fileName = iconv('UTF-8','gb2312',$_FILES["ファイル"]["名前"]);
$types =explode('.',$fileName);
$typesIf = $types[1];
//変更名は時間です
$types[0] = 時間();
$fileName = $types[0].'.'.$types[1];
$filetype = $typesIf;
// 制限上ダウンロード类型
if(!in_array($typesIf,$filesArr)){
echo '';
}その他{
move_uploaded_file($_FILES["file"]["tmp_name"], $path.$fileName);
//変数パス
$docpath = '/data/oa/frontend/www/converter/files/doc/';
$pdfpath = '/data/oa/frontend/www/converter/files/pdf/';
$swfpath = '/data/oa/frontend/www/converter/files/swf/';
if (file_exists($path . $fileName)){
//执行转换
if($typesIf=='pdf'){ //PDF 转SWF
$pdf = $ファイル名;
$swf = str_replace('pdf','swf',$pdf);
exec('/usr/local/wenku/swftools/bin/pdf2swf -o '.$swfpath.$swf.' -T -z -t -f '.$pdfpath.$pdf.' -s languagedir=/usr/ share/xpdf/xpdf-chinese-simplified -s flashversion=9');
$path2 = $pdfpath.$pdf;
$path3 = $swfpath.$swf;
}else{ //ドキュメント转 PDF
$doc = $fileName;
$format =explode('.',$fileName);
$formatName = $format[0].'.pdf';
$command = 'java -jar /usr/local/wenku/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar '.$docpath.$doc.' '.$pdfpath.$formatName;
exec($command);
$path1 = $docpath.$doc;
$path2 = $pdfpath.$formatName;
if(file_exists( $pdfpath.$formatName)){
$pdf = $formatName;
$swf = str_replace('pdf','swf',$pdf);
$swfcommand = '/usr/local/wenku/swftools/bin/pdf2swf -o '.$swfpath.$swf.' -T -z -t -f '.$pdfpath.$pdf.' -s languagedir=/usr/share/xpdf/xpdf-chinese-simplified -s flashversion=9';
exec($swfcommand);
$path3 = $swfpath.$swf;
}
}
}
}
// print_r($_FILES["file"]);
$filetype = isset($filetype) ? $ファイルタイプ: '';
$path1 = isset($path1) ? str_replace('/data/oa/frontend/www','',$path1) : '';
$path2 = isset($path2) ? str_replace('/data/oa/frontend/www','',$path2) : '';
$path3 = isset($path3) ? str_replace('/data/oa/frontend/www','',$path3) : '';
$reArr = array('filetype' => $filetype,'path1'=>$path1,'path2'=>$path2,'path3'=>$path3);
$reArr を返します;
}
// php100.com php100中文网
}
//删除文件
パブリック関数 DelFile($path,$pdfpath,$swfpath){
$pathcommand = 'rm -rf /data/oa/frontend/www'.$path;
exec($pathcommand);
$pdfpathcommand = 'rm -rf /data/oa/frontend/www'.$pdfpath;
exec($pdfpathcommand);
$swfpathcommand = 'rm -rf /data/oa/frontend/www'.$swfpath;
exec($swfpathcommand);
}
}