Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

guardar en word como pdf

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: guardar en word como pdf Responder citando

Hola amigos, hace un tiempo publicaron un forma de imprimir a través de word, grabo mi archivo con otro nombre (guardar como) todo lo manipulo desde mi programa de builder, pero ahora necesito guardarlo como pdf, ya descargué un filtro para grabralo como pdf, pero me falt saber como elegir el tipo de archivo, alguien sabe como se le pasa el dato al word desde el builder ?
Código:


void __fastcall TForm_hazfacma::manda_a_word(TStringList *campos_z, TStringList *valores_z)
{
  Variant vWord, vDocumentos, vDocumento, vSeleccion, vBuscar;
  int ii_z=0;
  String arch_z, sPath, sFicheroPlantilla, sFicheroGenerado;
  arch_z = formatofact_z;
  sPath = ExtractFilePath( Application->ExeName );
  sFicheroPlantilla = arch_z;
  sFicheroGenerado  = sPath + "factura2.doc";
  ///-------> Area de llamado a Word <vWord>Checked );
    vWord.OlePropertySet( "Visible", false);
    //--- Abre el documento que usaremos como plantilla
    vDocumentos = vWord.OlePropertyGet( "Documents" );
    vDocumento = vDocumentos.OleFunction( "Open",
          sFicheroPlantilla.c_str(),  // Documento
          false,                      // Confirmar conversiones
          true,                       // Modo se solo lectura
          false,                      // Añadir al menu de ficheros recientes
          ""                          // Clave del documento
    );
    //--- Selecciona todo el documento para reemplazar
    vSeleccion = vWord.OlePropertyGet( "Selection" );
    vSeleccion.OlePropertyGet( "Range" ).OleProcedure( "SetRange", 0, 0 );
    vBuscar = vSeleccion.OlePropertyGet( "Find" );
    vBuscar.OleProcedure( "ClearFormatting" );
    vBuscar.OlePropertyGet( "Replacement" ).OleProcedure( "ClearFormatting" );
    //--- sustituimos una palabra
    // Aqui podemos meter el bucle que va a ir reemplanzando palabras
    for( ii_z = 0; ii_z <campos_z>Count; ii_z++) {
       //vSeleccion.OleProcedure("HomeKey", 6,0); // 6=wdStory 0=wdMode //principio documento        vSeleccion = vWord.OlePropertyGet( "Selection" );
       //vSeleccion= vWord.OlePropertyGet( "Selection" );
       //vSeleccion.OlePropertyGet( "Range" ).OleProcedure( "SetRange", 0, 0 );
       vBuscar.Exec( Procedure( "Execute" )
          <<campos_z>Strings[ii_z]+"}}"               // Texto a buscar
          << VT_EMPTY                   // Coincidir mayusculas y minusculas
          << VT_EMPTY                   // Solo palabras completas
          << VT_EMPTY                   // Usar caracteres comodin
          << VT_EMPTY                   // Suena como
          << VT_EMPTY                   // Todas las formas de la palabra
          << true                       // Hacia adelante
          << VT_EMPTY                   // Wrap
          << VT_EMPTY                   // Format
          <<valores_z>Strings[ii_z].Trim().c_str()   // Reemplazar con...
          << 2                          // 2 = reemplazar todo
       );
    }
    //--- salvamos automaticamente si procede y cerramos Word
    try {
      vDocumento.OleProcedure( "SaveAs", sFicheroGenerado.c_str() );
      Variant np = Variant::NoParam();
      vWord.OleProcedure("PrintOut", np, np, np, np, np, np, np, ncopias_z );
      vDocumento.OleProcedure( "Save");
      vDocumento.OleProcedure( "Close", 0xFFFFFFFF);
      vWord.OleProcedure( "Quit" );
      //IOleMessageFilter::Revoke();
    } catch(...) {
      vWord.OlePropertySet("Visible", true);  //aqui lo vemos para imprimir
    }
    //KillTask("winword.exe");
    vWord = vDocumentos = vDocumento = vSeleccion = vBuscar = Unassigned;
}
//---------------------------------------------------------------------------


en la línea

Código:

   vDocumento.OleProcedure( "SaveAs", sFicheroGenerado.c_str() );


es donde debe estar el truco, pero lo desconozco, alguien sabe como hacerlo ?
_________________
La caja decía, requiere Win95 o superior así que instalé Linux.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Grabar archivo word como pdf Responder citando

Hola amigos, pues estuve batallando hasta que encontré la respuesta. aquí les dejo el resultado de mi experiencia, esperando que sea de utilidad para alguien más.

1.- Descargar el filtro que permite guardar como pdf desde office (word, excel, etc) desde este enlace:

http://www.microsoft.com/es-es/download/confirmation.aspx?id=7

2.- Al grabar el archivo (la forma ya está en el post anterior)
sólo hay que modificar el dato que indica que debe grabar como PDF
Código:


      vDocumento.OleProcedure( "SaveAs", sFicheroGenerado.c_str(), wdFormatPDF);


donde wdFormatPDF es una constante entera
Código:


const int wdFormatPDF = 17;


por último, aunque lo hayas grabado como pdf para word le parece que no lo has grabado y al cerrar word te sale el diálogo preguntando si deseas grabarlo, obvio que eso es algo que el usuario final no tiene que ver, por lo tanto hay que poner la siguiente línea para que cierre el archivo sin tener que grabarlo y que no salga el diálogo:

Código:

     vDocumento.OleProcedure( "Close", false);
      vWord.OleProcedure( "Quit" );


como pueden ver, al código del post anterior anterior sólo tuvimos que cambiar el saveAs y el Close

Esperando que a alguien le sea de utilidad la información anterior.

Gracias
_________________
La caja decía, requiere Win95 o superior así que instalé Linux.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Grabar archivo word como pdf Responder citando

Hola amigos, pues estuve batallando hasta que encontré la respuesta. aquí les dejo el resultado de mi experiencia, esperando que sea de utilidad para alguien más.

1.- Descargar el filtro que permite guardar como pdf desde office (word, excel, etc) desde este enlace:

Complemento de Microsoft Office 2007: Guardar como PDF o XPS de Microsoft

http://www.microsoft.com/es-es/download/confirmation.aspx?id=7

2.- Al grabar el archivo (la forma ya está en el post anterior)
sólo hay que modificar el dato que indica que debe grabar como PDF
Código:


      vDocumento.OleProcedure( "SaveAs", sFicheroGenerado.c_str(), wdFormatPDF);


donde wdFormatPDF es una constante entera
Código:


const int wdFormatPDF = 17;


por último, aunque lo hayas grabado como pdf para word le parece que no lo has grabado y al cerrar word te sale el diálogo preguntando si deseas grabarlo, obvio que eso es algo que el usuario final no tiene que ver, por lo tanto hay que poner la siguiente línea para que cierre el archivo sin tener que grabarlo y que no salga el diálogo:

Código:

     vDocumento.OleProcedure( "Close", false);
      vWord.OleProcedure( "Quit" );


como pueden ver, al código del post anterior anterior sólo tuvimos que cambiar el saveAs y el Close

Esperando que a alguien le sea de utilidad la información anterior.

Gracias
_________________
La caja decía, requiere Win95 o superior así que instalé Linux.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.