Two Pilots™    Home  |  Navigation  |  Site Map  |  Products  |  Download  |  Prices  |  For Partners  |  Support


All forums · Statistics · Search ·

Two Pilots forum / For software developers / Metafile scaling
Author Message
joe
Member
# Posted: 10 Dec 2004 19:46


Hi,
When I convert an emf with our image2pdf tool, the result is perfect. ie, the image fills the 8 1/2x 11 page... But when playing the metafile with PDFPAGE_PlayMetafileFromFilename function, the resulting image is way too big and doesn't fit in the PDF page. I can I calculate the scaling ratio needed?

Thanks,
joe.

Anonymous
# Posted: 16 Dec 2004 14:49


Hello?
Can anyone help me out? If I can play my metafles properly, then this is the tool I'm going to buy. Please let me know.

joe.

Natalia
Member
# Posted: 16 Dec 2004 15:16


Joe, sorry fot the delay with the answer. We would suggest the following:

//This variable will be used later to render EMF file
double xyScale = 0;
//Before start new document you need to set up document resolution
//using resolution of the first of your EMF files
piPDFdocument->Resolution = YOUR_FILE_RESOLUTION;
//Begin PDF document (don't forget to setup document name)
piPDFdocument->BeginDoc();
//Now set document page dimensions using EMF file size (in pixels)
piPDFdocument->PDFPAGE_Height = SomeValueY;//(height of your EMF
//file - suppose, 800 pixels)

//And also width - also in pixels
piPDFdocument->PDFPAGE_Width = SomeValueX;

// Now you need to get document used DC resolution
HDC hDocumentDC;
piPDFdocument->get_HDC((unsigned long *)&hDocumentDC);
// API call - GDI
int iResolution = GetDeviceCaps(hDocumentDC,LOGPIXELSX);
long lDocumentPageResolution = (long)iResolution;

// Now you need to calculate scale ratio to render EMF properly
xyScale = (double)((double)lDocumentPageResolution/(double)YOUR_FILE_RESOLUTION) ;

// Now play your EMF ! API call also
HENHMETAFILE hEmf = GetEnhMetaFile(m_CurentJob.szSourceFileName);
RECT rc = {0,0,(LONG)(SomeValueX*iResolution/YOUR_FILE_RESOLUTION),
(LONG)(SomeValueY*iResolution/YOUR_FILE_RESOLUTION)};
// API call
PlayEnhMetaFile(hDocumentDC,hEmf,&rc);
// API call
DeleteEnhMetaFile(hEmf);

//That's all !

In case you are using other language than C++, you can use usual
WinAPI wrappers that are used in your language.

 

 

Powered by miniBB 2.0 RC7 © 2001-2004 Page creation time (sec.): 0.013

 

Page top