|
Metrics for Portable Documents
The following table specifies the most important font metrics for applications
that require portable documents and the functions that allow an application to
retrieve them.
Function
| Metric
| Use
| EnumFontFamilies
| ntmSizeEM
| Retrieval of design metrics; conversion to device metrics
| GetCharABCWidths
| ABCWidths
| Accurate placement of characters at the start and end of margins, picture
boundaries, and other text breaks
| GetCharWidth32
| AdvanceWidths
| Placement of characters on a line
| GetOutlineTextMetrics
| otmfsType
| Font-embedding bits
|
| otmsCharSlopeRise
| Y-component for slope of cursor for italic fonts
|
| otmsCharSlopeRun
| X-component for slope of cursor for italic fonts
|
| otmAscent
| Line spacing
|
| otmDescent
| Line spacing
|
| otmLineGap
| Line spacing
|
| otmpFamilyName
| Font identification
|
| otmpStyleName
| Font identification
|
| otmpFullName
| Font identification (typically, family and style name)
|
The otmsCharSlopeRise, otmsCharSlopeRun, otmAscent, otmDescent, and otmLineGap members of the OUTLINETEXTMETRIC structure are scaled or transformed to correspond to the current device mode
and physical height (as given in the tmHeight member of the NEWTEXTMETRIC structure).
Font identification is important in those instances when an application must
select the same font for example, when a document is reopened or moved to a different operating
system. The font mapper always selects the correct font when an application
requests a font by full name. The family and style names provide input to the
standard font dialog box, which ensures that the selection bars are properly placed.
The otmsCharSlopeRise and otmsCharSlopeRun values are used to produce a close approximation of the main italic angle of
the font. For typical roman fonts, otmsCharSlopeRise is 1 and otmsCharSlopeRun is 0. For italic fonts, the values attempt to approximate the sine and cosine
of the main italic angle of the font (in counterclockwise degrees past
vertical); note that the italic angle for upright fonts is 0. Because these values are
not expressed in design units, they should not be converted into device units.
The character placement and line spacing metrics enable an application to
compute device-independent line breaks that are portable across screens, printers,
typesetters, and even platforms.
Device-independent page layout requires the following seven basic steps:
- Normalize all design metrics to a common ultra-high resolution (UHR) value
(for example, 65,536 DPI); this prevents round-off errors.
- Compute line breaks based on UHR metrics and physical page width; this yields
a starting point and an ending point of a line within the text stream.
- Compute the device page width in device units (for example, pixels).
- Fit each line of text into the device page width, using the line breaks
computed in step 2.
- Compute page breaks by using UHR metrics and the physical page length; this
yields the number of lines per page.
- Compute the line heights in device units.
- Fit the lines of text onto the page, using the lines per page from step 5 and
the line heights from step 6.
If all applications adopt these techniques, developers can virtually guarantee
that documents moved from one application to another will retain their
original appearance and format.
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|