berkowitz 2 Denunciar post Postado Agosto 22, 2006 Pessoal, olá.Tenho um site que é todo dinâmico (em php). Agora preciso criar um esquema pra gerar uma versão WORD desse site. Alguém faz idéia de como faz isso pra poder me ajudar por favor?Encontrei um CLASS na net, mas ele só gera 1 página por vez e só gera DOC a partir de uma página HTML. Quando a página é PHP não da certo......Valew!!!!!!!! Compartilhar este post Link para o post Compartilhar em outros sites
berkowitz 2 Denunciar post Postado Agosto 22, 2006 O CLASS que eu tenho é o seguinte: <?php /** * Convert HTML to MS Word file * @author Harish Chauhan * @version 1.0.0 * @name HTML_TO_DOC */ class HTML_TO_DOC { var $docFile=""; var $title=""; var $htmlHead=""; var $htmlBody=""; /** * Constructor * * @return void */ function HTML_TO_DOC() { $this->title="Untitled Document"; $this->htmlHead=""; $this->htmlBody=""; } /** * Set the document file name * * @param String $docfile */ function setDocFileName($docfile) { $this->docFile=$docfile; if(!preg_match("/\.doc$/i",$this->docFile)) $this->docFile.=".doc"; return; } function setTitle($title) { $this->title=$title; } /** * Return header of MS Doc * * @return String */ function getHeader() { $return = <<<EOH <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv=Content-Type content="text/html; charset=utf-8"> <meta name=ProgId content=Word.Document> <meta name=Generator content="Microsoft Word 9"> <meta name=Originator content="Microsoft Word 9"> <!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--> <title>$this->title</title> <!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Print</w:View> <w:DoNotHyphenateCaps/> <w:PunctuationKerning/> <w:DrawingGridHorizontalSpacing>9.35 pt</w:DrawingGridHorizontalSpacing> <w:DrawingGridVerticalSpacing>9.35 pt</w:DrawingGridVerticalSpacing> </w:WordDocument> </xml><![endif]--> <style> <!-- /* Font Definitions */ @font-face {font-family:Verdana; panose-1:2 11 6 4 3 5 4 4 2 4; mso-font-charset:0; mso-generic-font-family:swiss; mso-font-pitch:variable; mso-font-signature:536871559 0 0 0 415 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:7.5pt; mso-bidi-font-size:8.0pt; font-family:"Verdana"; mso-fareast-font-family:"Verdana";} p.small {mso-style-parent:""; margin:0in; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:1.0pt; mso-bidi-font-size:1.0pt; font-family:"Verdana"; mso-fareast-font-family:"Verdana";} @page Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in; mso-header-margin:.5in; mso-footer-margin:.5in; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 9]><xml> <o:shapedefaults v:ext="edit" spidmax="1032"> <o:colormenu v:ext="edit" strokecolor="none"/> </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext="edit"> <o:idmap v:ext="edit" data="1"/> </o:shapelayout></xml><![endif]--> $this->htmlHead </head> <body>EOH; return $return; } /** * Return Document footer * * @return String */ function getFotter() { return "</body></html>"; } /** * Create The MS Word Document from given HTML * * @param String $html :: URL Name like http://www.example.com * @param String $file :: Document File Name * @param Boolean $download :: Wheather to download the file or save the file * @return boolean */ function createDocFromURL($url,$file,$download=false) { if(!preg_match("/^http:/",$url)) $url="http://".$url; $html=@file_get_contents($url); return $this->createDoc($html,$file,$download); } /** * Create The MS Word Document from given HTML * * @param String $html :: HTML Content or HTML File Name like path/to/html/file.html * @param String $file :: Document File Name * @param Boolean $download :: Wheather to download the file or save the file * @return boolean */ function createDoc($html,$file,$download=false) { if(is_file($html)) $html=@file_get_contents($html); $this->_parseHtml($html); $this->setDocFileName($file); $doc=$this->getHeader(); $doc.=$this->htmlBody; $doc.=$this->getFotter(); if($download) { @header("Cache-Control: ");// leave blank to avoid IE errors @header("Pragma: ");// leave blank to avoid IE errors @header("Content-type: application/octet-stream"); @header("Content-Disposition: attachment; filename=\"$this->docFile\""); echo $doc; return true; } else { return $this->write_file($this->docFile,$doc); } } /** * Parse the html and remove <head></head> part if present into html * * @param String $html * @return void * @access Private */ function _parseHtml($html) { $html=preg_replace("/<!DOCTYPE((.|\n)*?)>/ims","",$html); $html=preg_replace("/<script((.|\n)*?)>((.|\n)*?)<\/script>/ims","",$html); preg_match("/<head>((.|\n)*?)<\/head>/ims",$html,$matches); $head=$matches[1]; preg_match("/<title>((.|\n)*?)<\/title>/ims",$head,$matches); $this->title = $matches[1]; $html=preg_replace("/<head>((.|\n)*?)<\/head>/ims","",$html); $head=preg_replace("/<title>((.|\n)*?)<\/title>/ims","",$head); $head=preg_replace("/<\/?head>/ims","",$head); $html=preg_replace("/<\/?body((.|\n)*?)>/ims","",$html); $this->htmlHead=$head; $this->htmlBody=$html; return; } /** * Write the content int file * * @param String $file :: File name to be save * @param String $content :: Content to be write * @param [Optional] String $mode :: Write Mode * @return void * @access boolean True on success else false */ function write_file($file,$content,$mode="w") { $fp=@fopen($file,$mode); if(!is_resource($fp)) return false; fwrite($fp,$content); fclose($fp); return true; } }?> Compartilhar este post Link para o post Compartilhar em outros sites
Edivaldo_Reis 0 Denunciar post Postado Agosto 23, 2006 Posta um exemplo de uso dessa classe. Assim fica mais fácil pra ajudar você. Compartilhar este post Link para o post Compartilhar em outros sites
ignorante 0 Denunciar post Postado Agosto 23, 2006 Se você precisa fazer uma mala direta ou algum tipo de documento no qual você só precisa substituir variáveis, existe um jeito um pouco mais simples.1. Crie um documento no Word;2. Coloque algumas variáveis, tipo <<NOME>> <<ENDEREÇO>>, etc..;3. Salve como RTF (o formato RTF é um texto formatado mas em plain text);4. Abra o RTF e substitua as variáveis usando o PHP (fopen e strtr);5. Salve o arquivo;6. Dê 3 pulinhos com o dedo indicador no topo da cabeça; Compartilhar este post Link para o post Compartilhar em outros sites
berkowitz 2 Denunciar post Postado Agosto 25, 2006 Entendi galera, graças a 6ª regra! huaahuHUAHUAUHAA....Agora uma coisa importante:O site inteiro vai virar um documento do Word, mas não para mala direta. Esse documento vai ficar no link EDIÇÕES ANTERIORES, para download. Com esse exemplo que vocês me indicaram ele transforma o site inteiro?Valew galera! E viva a 6ª regra! uhaAUHahuuha...Pessoal, só mais uma coisa:O site não tem nenhum dado que venha de algum banco, nem variáveis para o conteúdo. O conteúdo está na própria página. Esse é o problema, entenderam? Aí que to rachando o coco!Valew! Compartilhar este post Link para o post Compartilhar em outros sites
Void : 0 Denunciar post Postado Agosto 26, 2006 estou com um pouco de sono, acabei de voltar da facul, pode ser que isso tenha atrapalhado meu entedimento da sua ultima dúvida. mas, para contribuir, tente fazer assim: header( "Content-type: application/msword" );header( "Content-Disposition: inline, filename=$file");$file="teste.rtf";print file_get_contents($file); não sei se é esse o resultado que você deseja obter ... qq é só postar ... fuiiiiiiiiiiiiii!!! Compartilhar este post Link para o post Compartilhar em outros sites
Edivaldo_Reis 0 Denunciar post Postado Setembro 19, 2006 A geração de arquivos rtf está funcionando muito bem.Minha dúvida é em relação aos parágrafos.Como adicionar espaços entre parágrafos no arquivo do word exatamente como o usuário digitou ??? Se fosse um arquivo html bastaria usar a função nl2br. Mas nesse caso não sei como proceder porque trata-se de um arquivo do Word em formato rtf. Compartilhar este post Link para o post Compartilhar em outros sites
ignorante 0 Denunciar post Postado Setembro 19, 2006 Substitua \n por \parNo RTF \par indica uma nova linha.Acho q você não seguiu todos os passos. Atente à 6ª regra! Compartilhar este post Link para o post Compartilhar em outros sites
Edivaldo_Reis 0 Denunciar post Postado Setembro 19, 2006 Caro ignorante, o uso do \par deve ser feito com a função wordwrap ??? Fiz o teste aqui e não funcionou ...:( Compartilhar este post Link para o post Compartilhar em outros sites
Edivaldo_Reis 0 Denunciar post Postado Setembro 19, 2006 Afinal, é possível inserir quebras de linha em arquivos rtf e doc ???? Como citei antes, a função nl2br não funciona nesse caso. Tentei desta forma: $texto = wordwrap($texto, 20, "\par"); e também não funcionou. Alguém tem alguma idéia ???? :o Compartilhar este post Link para o post Compartilhar em outros sites
Edivaldo_Reis 0 Denunciar post Postado Setembro 20, 2006 Ei galera !!!!!!! Alguém tem alguma idéia !!!!! ????????!! Compartilhar este post Link para o post Compartilhar em outros sites
Edivaldo_Reis 0 Denunciar post Postado Setembro 20, 2006 Ainda não encontrei nenhuma função para inserir \par na formatação de arquivos rtf e doc. Compartilhar este post Link para o post Compartilhar em outros sites
ignorante 0 Denunciar post Postado Setembro 20, 2006 Não sei se entendi o q você está querendo fazer, mas imagino q você tenha um textarea e quer colocar o conteúdo desse textarea em um RTF mantendo as quebras de linha. Se for isso, faça assim: str_replace($textarea,"\\n","\\par");Não testei, mas acho q precisa escapar a "\", por isso coloquei "\\". Abra o arquivo RTF gerado em um editor de texto (aka notepad) e verifique se os "\n" foram substituídos por \par. Compartilhar este post Link para o post Compartilhar em outros sites
Edivaldo_Reis 0 Denunciar post Postado Setembro 20, 2006 Obrigado ignorante. Sua ajuda foi muito útil p/ eu terminar o script. Fiz assim: $texto = nl2br($_POST["texto"]);$texto = str_replace("<br />","\\par",$texto);Funcionou legal !!!! Compartilhar este post Link para o post Compartilhar em outros sites
ignorante 0 Denunciar post Postado Setembro 20, 2006 Bom saber q fui útil. Mas você precisa ser um pouco mais paciente, sem ficar floodando o topico. E não me olha com essa cara.... Compartilhar este post Link para o post Compartilhar em outros sites
adonaicruz 0 Denunciar post Postado Julho 25, 2007 pessoal, quando eu inicio uma sessão ele da erro no internet explorerveja o exemplo:<? header( "Content-type: application/msword" );header( "Content-Disposition: inline, filename=teste");require("include/class.carrinho.php");session_start();$arquivo = "teste.rtf";$fp = fopen ( $arquivo, "r" );$output = fread( $fp, filesize( $arquivo ) );fclose ( $fp );$nome = $_SESSION['CARRINHO']->Cliente['NOME'];$data = "teste01";$end = "teste02";$output = str_replace( "<nome>", $nome, $output );$output = str_replace( "<data>", $data, $output );$output = str_replace( "<end>", $end, $output );echo $output;?> Compartilhar este post Link para o post Compartilhar em outros sites
adonaicruz 0 Denunciar post Postado Julho 25, 2007 resolvi o meu problema usando o seguinte headerheader("Pragma: public");header("Expires: 0");header("Cache-Control: must-revalidate, post-check=0, pre-check=0");header("Cache-Control: public", false);header("Content-Description: File Transfer");header( "Content-type: application/msword" );header("Content-Disposition: attachment; filename=\"orcamento.doc\";");vou deixar aqui para caso alguem tenha o mesmo problemaabraço Compartilhar este post Link para o post Compartilhar em outros sites
zeke 0 Denunciar post Postado Novembro 12, 2012 Ta td funcionando, mas quando ele vai gerar o arquivo em .doc ele substitui a acentuação por caracteres espciais Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Novembro 12, 2012 Já tentou PHPWord? Eu acho bem interessante. @braços Compartilhar este post Link para o post Compartilhar em outros sites
zeke 0 Denunciar post Postado Novembro 12, 2012 Mais alguém com alguma sugestão ?? Compartilhar este post Link para o post Compartilhar em outros sites