Xojo Developer Conference
25/27th April 2018 in Denver.
MBS Xojo Conference
6/7th September 2018 in Munich, Germany.

DynaPDF Manual - Page 489

Previous Page 488   Index   Next Page 490

Function Reference
Page 489 of 750
The header files pshpack2.h and poppack.h are available in Visual Studio and Embarcadeo's C++
Builder; they are used to declare a packed structure. Fill the structure TPORT_METAHEADER now
with values:
fread(&wmf, 1, sizeof(wmf), f);
if (wmf.Key != 0x9AC6CDD7) // Is this a portable WMF file?
return -2;
Now we can calculate the size of the metafile picture:
if (!wmf.Inch) wmf.Inch = 96;
pict.xExt = (wmf.BBox.Right - wmf.BBox.Left) * 2540 / wmf.Inch;
pict.yExt = (wmf.BBox.Bottom - wmf.BBox.Top) * 2400 / wmf.Inch;
As you can see above, the y-axis is not calculated with 2540 pixels per inch. DynaPDF uses 2400
pixels instead. I don't know why it must be 2400 pixels in most cases, but the y-axis is often stretched
otherwise. This value can be adjusted in the range 2000 to 3000 with the property WMFPixelPerInch.
This property changes the value of the y-axis only; the value of the x-axis is always 2540.
Notice: The adjustment above is maybe not required. The value 2400 pixels per inch was determined
via trial and error.
ROP Codes (Raster Operation Codes)
EMF files are mostly created for a raster device like a monitor or printer. Because of this, metafiles
use often ROP codes which combine fore- and background colors to achieve transparency or other
color effects. Such ROP codes are meaningful on a raster device but not on a vector device like PDF.
Because no raster image is created during conversion, it is not possible to use ROP codes which
combine fore- and background colors.
The function checks for unsupported ROP codes during conversion. If unsupported ROP codes will
be used then the EMF file will be rendered to an image by default. The problem with ROP codes is
that the result depends mainly on the background. Many unsupported ROP codes have no effect if
the background is empty. In most cases it is better to disable the rasterizer with the flag
mfDisableRasterEMF and to enable it only if the output is wrong. See SetMetaConvFlags() for further
When an EMF file is rendered to an image then it will be rendered in the resolution that was set
with SetResolution(). The default resolution is 150 DPI which is usually too low to achieve good
results. For good results the resolution should be set to 300 or 600 DPI.

Previous topic: Portable WMF files

Next topic: Compatibility Note: