 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
tronxx Lt JG


Registrado: 30 May 2003Mensajes: 56Ubicación: Merida, Yucatan, Mexico
|
Publicado: Mar 11 Sep, 2012 4:54 pm Asunto: guardar en word como pdf |
|
|
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 |
|
 |
tronxx Lt JG


Registrado: 30 May 2003Mensajes: 56Ubicación: Merida, Yucatan, Mexico
|
Publicado: Mie 12 Sep, 2012 5:50 pm Asunto: Grabar archivo word como pdf |
|
|
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 |
|
 |
tronxx Lt JG


Registrado: 30 May 2003Mensajes: 56Ubicación: Merida, Yucatan, Mexico
|
Publicado: Mie 12 Sep, 2012 5:50 pm Asunto: Grabar archivo word como pdf |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|