Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Danv

Salvar como ".doc"

Recommended Posts

Ola pessoal,

 

Estou atras de alguma dica ou algo semelhante que faça o seguinte, converta uma pagina (na verdade php) para .doc (do Word)...

 

No aplicativo que desenvolvi é gerado uma ficha do funcionário, gostaria de fornecer a opção para "Salvar como" .... clicando, a ficha é convertida para .doc e a pessoa escolhe onde salvar.

 

Alguem conhece algo semelhante?

 

Bom, encontrei este código.... segue abaixo:

 

[index.php]

<html><head><title>Exemplo - Gerar Documento em Doc/RTF</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link rel="stylesheet" href="class.css" type="text/css"></head><body bgcolor="#FFFFFF" text="#000000"><table border="0" align="center" width="400" bgcolor="#CCCCCC">  <tr>    <td bgcolor="#EEEEEE">       <form name="form1" method="post" action="geradoc.php">        <p align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><b><font color="#666666"><br>          EXEMPLO - GERAR DOC/RTF 1.1</font></b></font></p>        <table width="75%" border="0" cellspacing="0" cellpadding="0" align="center">          <tr>             <td width="23%" nowrap><font class="texto">Empresa:</font></td>            <td width="70%">               <input type="text" name="empresa" class="form_campos" size="35" maxlength="40">            </td>          </tr>          <tr>             <td width="24%"><font class="texto">Nome:</font></td>            <td width="70%">               <input type="text" name="nome" class="form_campos" size="35" maxlength="40">            </td>          </tr>          <tr>             <td width="24%"><font class="texto">Endereço:</font></td>            <td width="70%">               <input type="text" name="endereco" class="form_campos" size="30" maxlength="50">            </td>          </tr>          <tr>             <td width="24%"><font class="texto">Telefone:</font></td>            <td width="70%">               <input type="text" name="telefone" class="form_campos" size="20">            </td>          </tr>          <tr>             <td width="24%"><font class="texto">Email:</font></td>            <td width="70%">               <input type="text" name="email" class="form_campos" size="30" maxlength="50">            </td>          </tr>          <tr>             <td width="24%"><font class="texto">Site:</font></td>            <td width="70%">               <input type="text" name="site" class="form_campos" size="30" maxlength="50">            </td>          </tr>          <tr>            <td width="24%"><font class="texto">Template.<b>rtf</b>:</font></td>            <td width="70%">              <input type="text" size=30 name="file" class="form_campos">            </td>          </tr>        </table>        <p align="center">          <input type="submit" name="Submit" value="Gerar Documento" class="form_botao">          <input type="reset" name="Submit2" value="Limpar" class="form_botao">        </p>        </form>    </td>  </tr></table><p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="leiame.txt" target="_blank">leiame.txt</a>   </font></p><p align="center"><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Exemplo   criado por: <a href="http://www.phpbrasil.com/profile.php/id/282" target="_blank">Apoena   Machado Cunha</a></font><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><br>  </font></p></body></html>

[geradoc.php]

 

<?if($file =="" || $file == "none")	{	echo "<center><a href=\"javascript:window.history.go(-1)\" class=\"links\">";	echo "Você precisa selecionar um <b>Template</b>.";	echo "</a></center>";	}else	{    header( "Content-type: application/msword" );    header( "Content-Disposition: inline, filename=$file");    // Abre seu template    $arquivo = "$file";    $fp = fopen ( $arquivo, "r" );    //Le o template na variavel    $output = fread( $fp, filesize( $arquivo ) );      fclose ( $fp );      //Substitui as tags pelas variáveis    $output = str_replace( "<<empresa>>", $empresa, $output );    $output = str_replace( "<<nome>>", $nome, $output );    $output = str_replace( "<<endereco>>", $endereco, $output );    $output = str_replace( "<<telefone>>", $telefone, $output );    $output = str_replace( "<<email>>", $email, $output );	$output = str_replace( "<<site>>", $site, $output );    //Envia documento para o browser    echo $output;	}	?>

Bom, como veem, funciona por formulário.... mas acho que vai ficar extremamente complexo realizar do...whiles... (imagino eu)...

 

Interessante o código acima, funciona com templates doc/rtf.

 

 

Na verdade, se eu abrir uma pagina Salvar como (htm).... abrir o Word, abrir este arquivo htm no Word, Salvar como (doc)... fica perfeito.... exatamente como gostaria que fosse...

Mas uma função seria ótima...

 

Bom, se alguem souber de alguma forma prática para desenvolver esta função...

 

Valeu pessoal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal, achei algo semelhante, só que mais interessante....

 

Segue o codigo;

 

<?//#################################################################################################//        RELATÓRIOS EM RTF PARA INTRANET/INTERNET////        Desenvolvido por: Renê Roberto Stzutski//        mail: roberto@nutecs.com//////   	 PLATAFORMA: WIN/LINUX//   	 PROGRAMAÇÃO: HTML - PHP - JAVASCRIPT//   	 BANCO DE DADOS: MYSQL//   	 AMBIENTE: INTERNET/INTRANET//#################################################################################################//ARQUIVO - INDEX.PHP//FUNÇÃO: ROTINA DE GERAÇÃO DE RELATÓRIOS EM RFT//PERTENCE A: //DATA INI: 04/02/03 REVISADO EM: 20/04/2003 AS 14:06:30//VERSÃO: 0.02//#################################################################################################////	ORIGINALMENTE ENCONTREI A BASE PARA ESTE SCRIPT EM UM SITE AMERICANO VOLTADO PARA PROGRAMAÇÃO EM "CFML"//	DEPOIS DE QUEBRAR UM POUCO A CABEÇA A FUNÇÃO FICOU MELHOR E MAIS FUNCIONAL SERVINDO TAMBÉM PARA O PHP.//	//	INFELIZMENTE O SCRIPT ORIGINAL NÃO ESTAVA ASSINADO.////	ESTE SCRIPT É PARA USO LIVRE, MODIFIQUE-O SE NECESSÁRIO A SUA VONTADE MAS POR FAVOR//	SE POSSÍVEL MANTENHA OS CRÉDITOS//// COLOQUEI AQUI ALGUNS DOS COMANDOS PARA GERAÇÃO DE UM ARQUIVO EM RTF DO PADRÃO MSoft SE você QUISER UTILIZA-LOS// BASTA INSERÍ-LOS NO MOMENTO DA CRIAÇÃO DAS LINHAS QUE SERÃO IMPRESSAS//$tab = "\t "; // => TAB$ret = "\par "; // => ENTER$spa = " "; // => TAB$sp = "\~"; // => MONO ESPAÇO$bli = "\b ";  // => NEGRITO INÍCIO$blf = "\b0 ";  // => NEGRITO FIM$page ="\page "; // => QUEBRA DE PÁGINA// COMPLETE COM OS SEUS DADOS(endereco,usuario,senha)$conexaoMY = mysql_connect("localhost","usuario","senha");$sql = "SELECT * FROM clientes ORDER BY nome";$res = mysql_db_query("teste","$sql",$conexaoMY);// AQUI ACONTECE A MONTAGEM DAS LINHAS QUE DEVERÃO SER IMPRESSAS NO DOCUMENTO RTF// OBSERVEM QUE EU UTILIZEI O COMANDO "\b" e "\b0" QUE ESTÃO ARMAZENADOS EM DUAS VARIÁVEIS ($bli e $blf) PARA SER // MAIS FÁCIL DE MANIPULAR ASSIM PUDE DEIXAR O NOME DO CLIENTE EM NEGRITO //// EXISTEM OUTRAS CENTENAS DE COMANDOS PARA MANIPULAR DIRETAMENTE OS ARQUIVOS "RTF" ACESSE //// www.biblioscape.com/rtf15_spec.htm    OU   www.tug.org/tex-archive/obsolete/info/RTF/RTF-Spec.rtf //// PARA PODER VER A LISTA COMPLETA....//   //     +----------variável do início do trecho em negrito//     |            //            |          + variável do final do trecho em negrito//        |          |//     |    |    +variável de tabulação (obs: o doc. já foi criado com uma tabulação para este salto)//     |    |   |//     |       |    |     +variável do fim da linha (return) representa o enter no fim da linha//            |          |    |     |//            V          V    V              V// $linha = $bli.$nome.$blf.$tab.$telefone.$ret;//    |            |      |//    |            |      +variável que contem o telefone do cliente vindo do DB//    |            |//    |            +variável que contem o nome do cliente vindo do DB//    |//   +variável responsável pelo armazenamento do texto a ser impresso$i = 0; // CONTADOR PARA CONTROLEwhile($press = mysql_fetch_array($res)){$nome = $press["nome"];$telefone = $press["telefone"];	if($i == 0){$linha = $bli.$nome.$blf.$tab.$telefone.$ret;}	else	{$linha = $linha.$bli.$nome.$blf.$tab.$telefone.$ret;}	$i++;}$arquivo = "agenda.rtf"; // SELECIONA O ARQUIVO "agenda.rtf" PARA UTILIZAÇÃOheader( "Content-type: application/msword" );    //}             	 //} - ENVIA OS TIPOS/FORMATOS DE CABEÇALHOS A SEREM UTILIZADOSheader( "Content-Disposition: inline, filename=$arquivo");	//}    $fp = fopen ( $arquivo, "r" ); // Abre arquivo "agenda.rtf" somente para leitura    $conteudo = fread( $fp, filesize( $arquivo ) ); //Armazena o arquivo conteúdo do arquivo "agenda.rtf" na variavel "$conteúdo"  fclose ( $fp ); // fecha a conexão com o arquivo "agenda.rtf"//PROCURA O TRECHO DO ARQUIVO QUE CONTENHA O ÍNDICE ("<<INICIO>>") PARA QUE POSSA SER SUBSTITUIDO PELAS NOVAS LINHAS$conteudo = str_replace( "<<INICIO>>", $linha, $conteudo );    //IMPRIME O DOCUMENTO NO BROWSERecho $conteudo;?>

Pega direto de uma consulta....

 

Mas nossa.... ta complicado esses codigos rtf.....

 

$tab = "\t "; // => TAB

$ret = "\par "; // => ENTER

$spa = " "; // => TAB

$sp = "\~"; // => MONO ESPAÇO

$bli = "\b "; // => NEGRITO INÍCIO

$blf = "\b0 "; // => NEGRITO FIM

$page ="\page "; // => QUEBRA DE PÁGINA

 

esses beleza, não compreensiveis...... mas to apanhando um monte para fazer (ainda nao consegui) um while para repetir linhas de uma tabela....

 

Acho que é isso mesmo.... nao tem historia.... vou ter que rachar o coco aqui..... (mais ainda eheheh) para ver se consigo fazer o while da linha de uma tabela...

 

Se alguem tiver alguma experiencia nisso e puder trocar uma ideia....

 

valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal, achei algo semelhante, só que mais interessante....

 

Segue o codigo;

 

<?
//################################################################################
#################
//        RELATÓRIOS EM RTF PARA INTRANET/INTERNET
//
//        Desenvolvido por: Renê Roberto Stzutski
//        mail: roberto@nutecs.com
//
//
//   	 PLATAFORMA: WIN/LINUX
//   	 PROGRAMAÇÃO: HTML - PHP - JAVASCRIPT
//   	 BANCO DE DADOS: MYSQL
//   	 AMBIENTE: INTERNET/INTRANET
//################################################################################
#################
//ARQUIVO - INDEX.PHP
//FUNÇÃO: ROTINA DE GERAÇÃO DE RELATÓRIOS EM RFT
//PERTENCE A: 
//DATA INI: 04/02/03 REVISADO EM: 20/04/2003 AS 14:06:30
//VERSÃO: 0.02
//################################################################################
#################
//
//	ORIGINALMENTE ENCONTREI A BASE PARA ESTE SCRIPT EM UM SITE AMERICANO VOLTADO PARA PROGRAMAÇÃO EM "CFML"
//	DEPOIS DE QUEBRAR UM POUCO A CABEÇA A FUNÇÃO FICOU MELHOR E MAIS FUNCIONAL SERVINDO TAMBÉM PARA O PHP.
//	
//	INFELIZMENTE O SCRIPT ORIGINAL NÃO ESTAVA ASSINADO.
//
//	ESTE SCRIPT É PARA USO LIVRE, MODIFIQUE-O SE NECESSÁRIO A SUA VONTADE MAS POR FAVOR
//	SE POSSÍVEL MANTENHA OS CRÉDITOS
//
// COLOQUEI AQUI ALGUNS DOS COMANDOS PARA GERAÇÃO DE UM ARQUIVO EM RTF DO PADRÃO MSoft SE você QUISER UTILIZA-LOS
// BASTA INSERÍ-LOS NO MOMENTO DA CRIAÇÃO DAS LINHAS QUE SERÃO IMPRESSAS
//

$tab = "\t "; // => TAB
$ret = "\par "; // => ENTER
$spa = " "; // => TAB
$sp = "\~"; // => MONO ESPAÇO
$bli = "\b ";  // => NEGRITO INÍCIO
$blf = "\b0 ";  // => NEGRITO FIM
$page ="\page "; // => QUEBRA DE PÁGINA


// COMPLETE COM OS SEUS DADOS(endereco,usuario,senha)

$conexaoMY = mysql_connect("localhost","usuario","senha");
$sql = "SELECT * FROM clientes ORDER BY nome";
$res = mysql_db_query("teste","$sql",$conexaoMY);


// AQUI ACONTECE A MONTAGEM DAS LINHAS QUE DEVERÃO SER IMPRESSAS NO DOCUMENTO RTF
// OBSERVEM QUE EU UTILIZEI O COMANDO "\b" e "\b0" QUE ESTÃO ARMAZENADOS EM DUAS VARIÁVEIS ($bli e $blf) PARA SER 
// MAIS FÁCIL DE MANIPULAR ASSIM PUDE DEIXAR O NOME DO CLIENTE EM NEGRITO 
//
// EXISTEM OUTRAS CENTENAS DE COMANDOS PARA MANIPULAR DIRETAMENTE OS ARQUIVOS "RTF" ACESSE 
//
// www.biblioscape.com/rtf15_spec.htm    OU   www.tug.org/tex-archive/obsolete/info/RTF/RTF-Spec.rtf 
//
// PARA PODER VER A LISTA COMPLETA....
//   
//     +----------variável do início do trecho em negrito
//     |            
//            |          + variável do final do trecho em negrito
//        |          |
//     |    |    +variável de tabulação (obs: o doc. já foi criado com uma tabulação para este salto)
//     |    |   |
//     |       |    |     +variável do fim da linha (return) representa o enter no fim da linha
//            |          |    |     |
//            V          V    V              V
// $linha = $bli.$nome.$blf.$tab.$telefone.$ret;
//    |            |      |
//    |            |      +variável que contem o telefone do cliente vindo do DB
//    |            |
//    |            +variável que contem o nome do cliente vindo do DB
//    |
//   +variável responsável pelo armazenamento do texto a ser impresso


$i = 0; // CONTADOR PARA CONTROLE
while($press = mysql_fetch_array($res))
{
$nome = $press["nome"];
$telefone = $press["telefone"];

	if($i == 0){$linha = $bli.$nome.$blf.$tab.$telefone.$ret;}
	else
	{$linha = $linha.$bli.$nome.$blf.$tab.$telefone.$ret;}
	$i++;

}


$arquivo = "agenda.rtf"; // SELECIONA O ARQUIVO "agenda.rtf" PARA UTILIZAÇÃO

header( "Content-type: application/msword" );    //}
             	 //} - ENVIA OS TIPOS/FORMATOS DE CABEÇALHOS A SEREM UTILIZADOS
header( "Content-Disposition: inline, filename=$arquivo");	//}

    
$fp = fopen ( $arquivo, "r" ); // Abre arquivo "agenda.rtf" somente para leitura

    
$conteudo = fread( $fp, filesize( $arquivo ) ); //Armazena o arquivo conteúdo do arquivo "agenda.rtf" na variavel "$conteúdo"
  
fclose ( $fp ); // fecha a conexão com o arquivo "agenda.rtf"


//PROCURA O TRECHO DO ARQUIVO QUE CONTENHA O ÍNDICE ("<<INICIO>>") PARA QUE POSSA SER SUBSTITUIDO PELAS NOVAS LINHAS

$conteudo = str_replace( "<<INICIO>>", $linha, $conteudo );
    
//IMPRIME O DOCUMENTO NO BROWSER
echo $conteudo;

?>

Pega direto de uma consulta....

 

Mas nossa.... ta complicado esses codigos rtf.....

 

$tab = "\t "; // => TAB

$ret = "\par "; // => ENTER

$spa = " "; // => TAB

$sp = "\~"; // => MONO ESPAÇO

$bli = "\b "; // => NEGRITO INÍCIO

$blf = "\b0 "; // => NEGRITO FIM

$page ="\page "; // => QUEBRA DE PÁGINA

 

esses beleza, não compreensiveis...... mas to apanhando um monte para fazer (ainda nao consegui) um while para repetir linhas de uma tabela....

 

Acho que é isso mesmo.... nao tem historia.... vou ter que rachar o coco aqui..... (mais ainda eheheh) para ver se consigo fazer o while da linha de uma tabela...

 

Se alguem tiver alguma experiencia nisso e puder trocar uma ideia....

 

valeu.

 

 

Eu estou a tentar fazer algo do género, construir um tabela com os dados de uma consulta a base de dados através de php e dar a possibilidade de download da tabela num documento padrão do word.

Actualmente a minha aplicação apenas permite apenas o download da tabela num documento excel.

Não conheço o código rtf e por isso estou com bastantes dificuldades em construir a tabela.

 

Se poder postar mais algum código que entretanto tenha tomado conhecimento agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.