Generar PDF desde C++

Hola amigos de Identi hoy les traigo un programita que permite crear un archivo PDF con cualquier texto que se ingrese en el programa el cual esta elaborado en C++

REQUISITOS





Lo que necesitamos es el Rad Studio XE2 que lo pueden descargar desde el siguiente enlace

DESCARGAR

(los links no son mios asi que no puedo asegurar cuanto tiempo esten disponibles)



tambien necesitamos una impresora virtual que es la que nos va a generar el PDF si no tienen una pueden descargar una desde el siguiente link

http://download.cnet.com/PrimoPDF/3000-18497_4-10264577.html?part=dl-10264577&subj=dl&tag=button

ahora si el programa

aqui esta el codigo fuente
#include <windows.h>
#include <winspool.h>
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <conio.h>

int main()
{
HDC imprDC; // Handle a DC de impresora
DOCINFO docinfo; // Estructura con información del documento
LPSTR nombre; // Nombre impresora predeterminada
DWORD tamNombre; // Num. bytes que ocupará nombre de impresora predet.
char mensaje[90], nombreArchivo[20], cons[20];

int resp;
SIZE tamTexto;
int x, y; // Coordenadas del texto a imprimir

//inicia el Programa
cout<<"*********************************************************"<<endl;
cout<<"ingrese un texto a imprimir en PDF "<<endl<<endl;
cin.getline(mensaje,90);
cout<<endl<<endl<<"*********************************************************"<<endl;
cout<<"Escribe 1 para imprimir. Cualquier otro numero para salir. "<<endl;
cin>>resp;
if (resp == 1) {
cout<<endl<<endl<<"*********************************************************"<<endl;
cout<<"Con que nombre desea guardar su archivo? "<<endl;
cin>>nombreArchivo;
}

if (resp!=1)
return 0;

//Configuracion de impresora
// Obtener num de bytes de nombre
GetDefaultPrinter(NULL, &tamNombre);
// Reservar espacio para nombre
nombre = (LPSTR)malloc(tamNombre);
// Ahora sí, obtener nombre
GetDefaultPrinter(nombre, &tamNombre);


// Datos inicializar docinfo
docinfo.cbSize = sizeof(DOCINFO);
docinfo.fwType = NULL;
docinfo.lpszDatatype = NULL;
docinfo.lpszOutput = NULL;
docinfo.lpszDocName = nombreArchivo;

// Crer DC de impresora
imprDC = CreateDC("WINSPOOL", nombre, NULL, NULL);

// Ya no necesitamos el nombre. Liberar su memoria
free(nombre);

/* Convertimos unidades lógicas a .01 mm
  En este modo, el eje Y aumenta hacia arriba*/
SetMapMode(imprDC,MM_LOMETRIC);

// Obtener las dimensiones del mensaje a imprimir
GetTextExtentPoint(imprDC, mensaje, strlen(mensaje), &tamTexto);

// Iniciamos el documento
StartDoc(imprDC, &docinfo);
// Iniciamos página
StartPage(imprDC);

/* Coordenadas iniciales: (50, 50)
   Es decir, 5 mm, 5 mm*/
x=50;
y=-50; // Negativo porque Y aumenta hacia arriba

// Imprimimos los mensajes
TextOut(imprDC, x, y, "Identi.li---jul357", strlen("
Identi.li---jul357
"));
// Calculamos posicion y del siguiente mensaje
y-=tamTexto.cy;
TextOut(imprDC, x, y, "", strlen(""));
// Calculamos posicion y del siguiente mensaje
y-=tamTexto.cy;
TextOut(imprDC, x, y, "", strlen(""));
// Calculamos posicion y del siguiente mensaje
y-=tamTexto.cy;
TextOut(imprDC, x, y, mensaje, strlen(mensaje));

// Finalizamos página
EndPage(imprDC);

// Terminamos el documento (la impresión);
EndDoc(imprDC);

// Liberamos el DC de impresora
DeleteDC(imprDC);

return 0;
}

NOTA:
La impresora virtual tiene que estar como predeterminada

aqui algunas capturas



eso es todo espero que les sea de utilidad


Generar PDF desde C++
0 Puntos Score: 0/10
Visitas: 1838 Favoritos: 5
4 Comentarios Generar PDF desde C++
Muy bueno   Como no agradecer ! Thank's
muchisimas gracias por tu comentario @Javo21
muy bueno, gracias...
Para dejar un comentario Registrate! o.. eres ya usuario? Accede!