Manipulação de Arquivos .DOC e .RTF

Oi Pessoal

O SC possui alguma biblioteca que permita abrir e manipular documentos .DOC e .RTF ?

Eu gostaria, por exemplo, de abrir um modelo de documento e preencher alguns campos do documento antes de enviar para o usuario, como por exemplo, um contrato.

Agradeço a atenção.

O Navegador precisa ter a extensão para isso.

Olá Haroldo

Mas eu nao quero mexer nos arquivos usando o navegador.

Eu quero apenas abrir um arquivo via php e alterar alguma coisa dentro dele, e depois colocar um link par ao usuario baixar o arquivo.

Exemplo de como usar RTF
em anexo
modelo do contrato
contrato preenchido
blank_contrato
é só adaptar

criar o blank_contrato

// Check for record
$check_sql = “SELECT numero,nome,morada01, morada02,numeroconta,iban,representante_nome,representante_cargo”
. " FROM empresa"
. " WHERE numero = 1";
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]})) // Row found
{
$xnomeempresa= {rs[0][1]};
$xmorada01empresa = {rs[0][2]};
$xmorada02empresa = {rs[0][3]};
$xnumerocontaempresa = {rs[0][4]};
$xrepresentaempresa = {rs[0][6]};
$xrepresentacargo = {rs[0][7]};
sc_set_global($xrepresentaempresa);
}
//[xnficha_contrato]

// Check for record
$check_2sql = “SELECT numero,numero_interno,data_contrato,cliente_nome,cliente_zona,cliente_cidade,cliente_morada,cliente_n_porta, representa_cliente_nome, representa_cliente_cargo, representa_cliente_telefone, area_estabelecimento, valor_servico_mensal, banco, iban, dia_pagamento_limite, juros_adicionais_fora_prazo, validade,letras,ncliente "
. " FROM contratos”
. " WHERE numero_interno=".[xninterno_contrato]." and numero=".[xnficha_contrato]." and ncliente=".[xncliente_contrato]."";

//antes . " WHERE numero_interno=".[xninterno_contrato]." and numero=".[xnficha_contrato]." and ncliente=".[xncliente_contrato]."";

sc_lookup(r2s, $check_2sql);

if (isset({rs[0][0]})) // Row found
{

$xumero_interno= {r2s[0][1]};
$xnumero_porta=(string){r2s[0][7]};
$xletras={r2s[0][18]};

$xdata_contrato = {r2s[0][2]};
$xcliente_nome = {r2s[0][3]};
$xcliente_zona = {r2s[0][4]};
$xcliente_cidade = {r2s[0][5]};
$xcliente_morada= {r2s[0][6]};
$xcliente_n_porta= $xnumero_porta." ".$xletras;
$xrepresenta_cliente_nome= {r2s[0][8]};
$xrepresenta_cliente_cargo= {r2s[0][9]};
$xrepresenta_cliente_telefone= {r2s[0][10]};
$xarea_estabelecimento= {r2s[0][11]};
$xvalor_servico_mensal= {r2s[0][12]};
$xbancoempresa={r2s[0][13]};

$xiban= {r2s[0][14]};
$xdia_pagamento_limite= {r2s[0][15]};

$xjuros_adicionais_fora_prazo= {r2s[0][16]};

$xvalidade= {r2s[0][17]};
sc_set_global($xrepresenta_cliente_nome);

}

// PA
//$pa_numero = substr({numero_interno}, 0, -4).’/’.substr({numero_interno}, -4);
//$ncontrato={numero_interno};
//$pa_numero = (string) $ncontrato ;
$contratonumero = ‘Contrato:’.substr($xumero_interno, 0, 10);
$wcontratonumero = ‘Contrato’.substr($xumero_interno, 0, 10);
// FORMATAR A DATA
$wdia= date( ‘d’, strtotime( $xdata_contrato ) );
$wmes= date( ‘m’, strtotime( $xdata_contrato ) );
$wano = date( ‘Y’, strtotime( $xdata_contrato ) );

switch (date( ‘m’, strtotime( $xdata_contrato ) ))
{
case 1: $vmes = ‘Janeiro’; break;
case 2: $vmes = ‘Fevereiro’; break;
case 3: $vmes = ‘Março’; break;
case 4: $vmes = ‘Abril’; break;
case 5: $vmes = ‘Maio’; break;
case 6: $vmes = ‘Junho’; break;
case 7: $vmes = ‘Julho’; break;
case 8: $vmes = ‘Agosto’; break;
case 9: $vmes = ‘Setembro’; break;
case 10: $vmes = ‘Outubro’; break;
case 11: $vmes = ‘Novembro’; break;
case 12: $vmes = ‘Dezembro’; break;
}

$vdata = 'Luanda, ‘. $wdia.’ de ‘.$vmes.’ de '.$wano;

$vtipo =$wcontratonumero;

// INICIO FORMATA WORD
$arquivo = “…/_lib/templates/contrato_modelo.rtf”;

$arq = fopen($arquivo,‘r’);

// LER O ARQUIVO
$mensagem = fread($arq, filesize($arquivo));

// FECHA O ARQUIVO
fclose($arq);

// VALORES DOS CAMPOS
$mensagem = str_replace(‘cab01’, $contratonumero, $mensagem);
$mensagem = str_replace(‘campo01’, $xnomeempresa, $mensagem);
$mensagem = str_replace(‘campo02’, $xmorada01empresa, $mensagem);
$mensagem = str_replace(‘campo03’, $xmorada02empresa, $mensagem);
$mensagem = str_replace(‘campo04’, $xrepresentaempresa, $mensagem);
$mensagem = str_replace(‘campo05’, $xrepresentacargo, $mensagem);
$mensagem = str_replace(‘campo06’, $xcliente_nome, $mensagem);
$mensagem = str_replace(‘campo07’, $xcliente_zona, $mensagem);
$mensagem = str_replace(‘campo08’, $xcliente_cidade, $mensagem);
$mensagem = str_replace(‘campo09’, $xcliente_morada, $mensagem);
$mensagem = str_replace(‘campo10’, $xcliente_n_porta, $mensagem);
$mensagem = str_replace(‘campo11’, $xrepresenta_cliente_nome, $mensagem);
$mensagem = str_replace(‘campo12’, $xrepresenta_cliente_cargo, $mensagem);
$mensagem = str_replace(‘campo13’, $xrepresenta_cliente_telefone, $mensagem);
$mensagem = str_replace(‘campo14’, $xarea_estabelecimento, $mensagem);
$mensagem = str_replace(‘campo15’, $xvalor_servico_mensal, $mensagem);
$mensagem = str_replace(‘campo16’, $xnumerocontaempresa, $mensagem);
$mensagem = str_replace(‘campo17’, $xiban, $mensagem);
$mensagem = str_replace(‘campo18’, $xdia_pagamento_limite, $mensagem);
$mensagem = str_replace(‘campo19’, $xjuros_adicionais_fora_prazo, $mensagem);
$mensagem = str_replace(‘campo20’, $xvalidade, $mensagem);
$mensagem = str_replace(‘campodata’, $vdata, $mensagem);
$mensagem = str_replace(‘campo11’, [xrepresenta_cliente_nome], $mensagem);
$mensagem = str_replace(‘campo04’, [xrepresentaempresa], $mensagem);

//$mensagem = str_replace(‘campo05’, [var_usuario_nome], $mensagem);

// SALVA ARQUIVO
//$vtipo = strtr($vtipo, “áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ”, “aaaaeeiooouucAAAAEEIOOOUUC”);
$vtipo = strtolower($vtipo);
$vtipo = str_replace(’ ‘, ‘_’, $vtipo);
$vtipo = $vtipo.’.rtf’;

$arquivo2 = “…/_lib/templates/”.$vtipo;

$fp = fopen($arquivo2, ‘w’);
fwrite($fp, $mensagem);
fclose($fp);

//header(“Location: …/_lib/templates/”.$arquivo2);
header("Location: ".$arquivo2);


contrato_modelo_ALTERAR_para_extensao_RTF.doc (40 KB)

1 Curtida

Fiz esta logica e estou com um problema de cria no diretório “/file/doc/” o contrato mas quando vou la e clico para abrir da erro como esta protegido. Se tiver uma ideia de o que pode ser ? veja a linha que criei:

// PEGAR DADOS
$check_sql = “SELECT idalunos, nome, datanascimento FROM alunos
WHERE idalunos = 2109”;
sc_lookup(rs, $check_sql);

if (isset({rs[0][0]})) // Row found
{
$var_idalunos = {rs[0][0]};
$var_nomealuno = {rs[0][1]};
$var_datanascimento = {rs[0][2]};
// sc_set_global($xrepresentaempresa);

$contratonumero  = 'Contrato: ' . substr($var_idalunos, 0, 10);
$wcontratonumero = 'Contrato ' . substr($var_idalunos, 0, 10);
$var_datadia     = date('Y-m-d');

// FORMATAR A DATA
$wdia  = date('d', strtotime( $var_datadia ) );
$wmes  = date('m', strtotime( $var_datadia ) );
$wano  = date('Y', strtotime( $var_datadia ) );
switch (date( 'm', strtotime( $var_datadia ) ))
{
	case 1 : $vmes = 'Janeiro'; break;
	case 2 : $vmes = 'Fevereiro'; break;
	case 3 : $vmes = 'Março'; break;
	case 4 : $vmes = 'Abril'; break;
	case 5 : $vmes = 'Maio'; break;
	case 6 : $vmes = 'Junho'; break;
	case 7 : $vmes = 'Julho'; break;
	case 8 : $vmes = 'Agosto'; break;
	case 9 : $vmes = 'Setembro'; break;
	case 10: $vmes = 'Outubro'; break;
	case 11: $vmes = 'Novembro'; break;
	case 12: $vmes = '‘Dezembro'; break;
}

// $vdata = 'Luanda, ’ . $wdia . ’ de ’ . $vmes . ’ de '.$wano;
$vtipo = $wcontratonumero;

// INICIO FORMATA WORD
$arquivo  = $_SERVER['DOCUMENT_ROOT'] . '/scriptcase/file/doc/contrato.doc';
$arq      = fopen($arquivo, 'r');

// LER O ARQUIVO
$mensagem = fread($arq, filesize($arquivo));
// FECHA O ARQUIVO
fclose($arq);
// VALORES DOS CAMPOS
$mensagem = str_replace('cab01'  , $contratonumero, $mensagem);
$mensagem = str_replace('campo01', $var_idalunos, $mensagem);	
$mensagem = str_replace('campo02', $var_nomealuno, $mensagem);
$mensagem = str_replace('campo03', $var_datanascimento, $mensagem);

// SALVA ARQUIVO
$vtipo    = strtolower($vtipo);
$vtipo    = str_replace(' ', '_', $vtipo);
$vtipo    = $vtipo . '.rtf';

// $arquivo2 = $this->Ini->path_doc . “/”. $vtipo;
$arquivo2 = $_SERVER[‘DOCUMENT_ROOT’] . ‘/scriptcase/file/doc/’ . $vtipo;

// $arquivo2 = ‘…/temp/’.$vtipo;

$fp = fopen($arquivo2, 'w');
fwrite($fp, $mensagem);
fclose($fp);
//header(“Location: …/_lib/templates/”.$arquivo2);

// header("Location: ".$arquivo2);
}

Não esta trocando o campo01 para no codigo

Gostaria de saber se é possível, após manipular o RTF gerar um PDF.