PHP_PHP チュートリアルで Web ページを Word ファイルとして保存する 3 つの方法
1. PHP で単語を生成するための 2 つのアイデアまたは原則
1. Windows で com コンポーネントを使用します
2. PHP を使用してコンテンツを doc ファイルに書き込みます
具体的な実装方法は次のとおりです。
2. Windows で com コンポーネントを使用します
原則: com は PHP の拡張クラスであり、office がインストールされているサーバーは自動的に word.application の com を呼び出し、PHP 公式ドキュメント マニュアル: http://www.php.net/manual/en/ を自動的に生成します。クラス.com.php
公式の例を使用してください:
$word = new COM("word.application") or die("Unable to instantiate Word");
echo "Loaded Word, version {$word->Version}n";
//前面に表示
$word->Visible = 1;
//空の文書を開きます
$word->ドキュメント->Add();
//何か奇妙なことをしてください
$word->Selection->TypeText("これはテストです...");
$word->Documents[1]- >SaveAs( "Useless test.doc");
//単語を閉じる
$word->Quit();
//オブジェクトを解放する
$word = null;
?>
個人的な提案: com インスタンス以降 このメソッドの意味を知るには公式ドキュメントを参照する必要がありますが、エディターにはコード プロンプトがないため、非常に不便です 。
3. PHPを使用してコンテンツをdocファイルに書き込みます
この方法は2つの方法に分けられます
1. mht 形式 (HTML に非常に似ています) を生成し、Word に書き込みます
2. 純粋な HTML 形式を Word に書き込みます
1)、mht 形式 (HTML に非常に似ています) を生成し、Word に書き込みます
* HTML コードに基づいて Word ドキュメントのコンテンツを取得します
* 本質的に mht であるドキュメントを作成します この関数は、ファイルのコンテンツを分析し、リモートの場所からページ内の画像リソースをダウンロードします
* この関数はクラス MhtFileMaker に依存します
*この関数は img タグを解析し、src の属性値を抽出します。ただし、src の属性値は引用符で囲む必要があります。そうしないと抽出できません
*
* @param string $content HTML コンテンツ
* @param string $absolutePath Web ページの絶対パス。 HTML コンテンツ内の画像パスが相対パスの場合、関数によって絶対パスが自動的に入力されるように、このパラメータを入力する必要があります。このパラメータは /
で終わる必要があります * @param bool $isEraseLink HTML コンテンツ内のリンクを削除するかどうか
*/
function getWordDocument( $content , $absolutePath = "" , $isEraseLink = true )
{
$mht = new MhtFileMaker();
if ($isEraseLink)
$content = preg_replace( '/
$images = array ( );
$files = array();
$matches = array();
//このアルゴリズムでは、src の後の属性値を引用符で囲む必要があります
if ( preg_match_all('/
;
if ( $imgPath ! = "")
//絶対リンク、プレフィックスなし
elles $ mht-> addcontents( "tmp.html"、$ mht-> getmimeType( "tmp.html")、$ content); $i=0;$i
$image = $images[$i];
if ( @ fopen($image, 'r') )
$imgcontent = mht- >GetMimeType ($image),$imgcontent);
Return $mht->GetFile ();
}
この関数の主な機能は、実際には、HTML コード内のすべての画像アドレスを分析し、それらを 1 つずつダウンロードすることです。画像のコンテンツを取得した後、MhtFileMaker クラスを呼び出して、画像を mht ファイルに追加します。追加の具体的な詳細は MhtFileMaker クラスにカプセル化されます。
利用方法1:リモート呼び出し
$content = file_get_contents($url);
$fileContent = getWordDocument($content,"http://www.yoursite.com/Music/etc/");
$fp = fopen("test.doc", 'w');
fwrite($fp , $fileContent) ;
fclose($fp);
このうち、$content 変数は HTML ソース コードである必要があり、次のリンクは HTML コード内の画像の相対パスを記入できる URL アドレスである必要があります
このうち、$content変数はHTMLソースコードである必要があり、次のリンクはHTMLコード内の画像の相対パスを埋めることができるURLアドレスである必要があります
使用方法 2: ローカルで生成された呼び出し
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no -cache") ;
$wordStr = 'PHP チュートリアル Web サイト--jb51.net';
$fileContent = getWordDocument($wordStr);
$fileName = iconv("utf-8", "GBK", 'PHP チュートリアル' . '_' . $intro . rand(100, 999));
header("Content-Disposition: 添付ファイル名 = . ".doc ");
この関数を使用する前に、MhtFileMaker クラスを含める必要があることに注意してください。このクラスは Mht ドキュメントの生成に役立ちます。
クラス: Mht File Maker
バージョン: 1.2 beta
日付: 2007/02/11
作成者: Wudi
説明: クラスは .mht ファイルを作成できます。
************************************** ********************************/
class MhtFileMaker{
var $config = array();
var $headers = array();
var $headers_exists = array();
var $files = array();
var $boundary;
var $dir_base;
var $page_first;
function MhtFile($config = array()){
}
function SetHeader($header){
$this- > ;headers[] = $header;
$key = strto lower(substr($header, 0, strpos($header, ':')));
$this->headers_exists[$key] = TRUE;
}
function SetFrom($from){
$this->SetHeader("From: $from");
}
function SetSubject($subject){
$this->SetHeader("Subject: $subject") ;
}
関数 SetDate($date = NULL, $istimestamp = FALSE){
if ($date == NULL) {
$date = time();
}
if ($istimestamp = = 本当) {
$date = date('D, d M Y H:i:s O', $date);
}
$this->SetHeader("Date: $date");
}
function SetBoundary($boundary = NULL) ){
if ($boundary == NULL) {
$this->boundary = '--' 。 strtoupper(md5(mt_rand())) 。 '_MULTIPART_MIXED';
} else {
$this->boundary = $boundary;
}
}
関数 SetBaseDir($dir){
$this->dir _base = str_replace("\", "/", realpath($dir));
}
function SetFirstPage($filename){
$this->page_first = str_replace("\", "/", realpath("{$this->dir_base}/$filename "));
}
function AutoAddFiles(){
if (!isset($this->page_first)) {
exit ('最初のページを設定しません。');
$filepath = str_replace($ this->dir_base, '', $this->page_first);
$filepath = 'http://mhtfile' 。 $filepath;
$this->AddFile($this->page_first, $filepath, NULL);
$this->AddDir($this->dir_base);
}
関数 AddDir($dir) {
$handle_dir = opendir($dir);
while ($filename = readdir($handle_dir)) {
if (($filename!='.') && ($filename!='..') && (" $dir/$filename"!=$this->page_first)) {
if (is_dir("$dir/$filename")) {
$this->AddDir("$dir/$filename");
}elseif (is_file("$dir/$filename")) {
$filepath = str_replace($this->dir_base, '', "$dir/$filename");
$filepath = 'http://mhtfile' 。 $filepath;
$this->AddFile("$dir/$filename", $filepath, NULL);
}
}
closedir( $handle_dir);
}
function AddFile($filename, $filepath = NULL, $encoding = NULL){
if ($filepath == NULL) {
$filepath = $filename;
}
$mimetype = $this->GetMimeType($filename);
$filecont = file _get_contents($ filename);
$this->AddContents($filepath, $mimetype, $filecont, $encoding);
}
function AddContents($filepath, $mimetype, $filecont, $encoding = NULL){
if ($ encoding == NULL) {
$filecont = chunk_split(base64_encode($filecont), 76);
$encoding = 'base64';
}
$this->files[] = array('filepath' $ファイルパス,
$mimetype,
'filecont' => 'encoding' => $encoding);
}
関数 CheckHeaders(){
if (!array_key_exists('date ', $this->headers_exists)) {
$this->SetDate(NULL, TRUE);
}
if ($this->boundary == NULL) {
$this->SetBoundary() ;
}
}
function CheckFiles(){
if (count($this->files) == 0) {
return FALSE;
} else {
return TRUE;
}
}
関数 GetFile() {
$this->CheckHeaders();
if (!$this->CheckFiles()) {
exit ('ファイルは追加されませんでした。');
}
$contents = implode("rn", $ this->headers);
$contents .= "rn";
$contents .= "MIME-Version: 1.0rn";
$contents .= "Content-Type: multipart/popular;rn";
$contents .= "tboundary="{$this->境界}";rn";
$contents .= "ttype="" . $this->files[0]['mimetype'] . ""rn";
$contents .= "X-MimeOLE: Mht ファイルによって生成Maker v1.0 betarn";
$contents .= "rn";
$contents .= "これは MIME 形式のマルチパート メッセージです。rn";
$contents .= "rn";
foreach ($this ->ファイルを $file として) {
$contents .= "--{$this->boundary}rn";
$contents .= "Content-Type: $file[mimetype]rn";
$contents 。 = "Content-Transfer-Encoding: $file[encoding]rn";
$contents .= "Content-Location: $file[filepath]rn";
$contents .= "rn";
$contents .= $file ['filecont'];
$contents .= "rn";
}
$contents .= "--{$this->boundary}--rn";
return $contents;
}
関数ファイル( $filename){
$contents = $this->GetFile();
$fp = fopen($filename, 'w');
fwrite($fp, $contents);
fclose($fp);
}
関数 GetMimeType($filename){
$pathinfo = pathinfo($filename);
switch ($pathinfo['extension']) {
case 'htm': $mimetype = 'text/html'; Break;
case 'html': $mimetype = 'text/html'; Break;
case 'txt': $mimetype = 'text/plain'; Break;
case 'cgi': $mimetype = 'text/plain'; Break;
case 'php': $mimetype = 'text/plain'; Break;
case 'css': $mimetype = 'text/css'; Break;
case 'jpg': $mimetype = 'image/jpeg'; Break;
case 'jpeg': $mimetype = 'image/jpeg'; Break;
case 'jpe': $mimetype = 'image/jpeg'; Break;
case 'gif': $mimetype = 'image/gif'; Break;
case 'png': $mimetype = 'image/png'; Break;
デフォルト: $mimetype = 'application/octet-stream'; Break;
}
return $mimetype;
}
}
?>
ポイント评:この方法の欠点は、承認量生成のダウンロードをサポートしていないため、1 つのヘッダーが 1 つあるためです(無论远程使用は本件で承認されており、ヘッダー面のみを出力できます)、循環生成の場合、結果も 1 つだけです単語生成(もちろん上面を修正できる方法で来实现)
2.纯HTML格式写入word
原理:
ob_start を利用して html 页面先存储起来(解决一下页面多个ヘッダー、大量生成可能)、その後、doc 文档コンテンツの書き込みに利用
代記入:
{
function start()
{
ob_start();
echo ' xmlns:w= "urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">';
}
関数 save($path)
{
echo "";
$data = ob_get_contents();
ob_end_clean();
$this->wirtefile ($path,$data);
}
function wirtefile ($fn,$data) )
{
$fp=fopen($fn,"wb");
fwrite($fp,$data);
fclose($fp);
}
}
PHP10086 | http://www.jb51.net |
PHP10086 | http://www.jb51.net |