word中px,pt,dpi,in,em,twip,emu之间的关系

inch英寸

英寸是使用于联合王国(UK,即英国()及其前)的,英文简写in,1in=2.54cm,12英寸为1,36英寸为1。英寸的符号为"

pt

point,磅,是一个物理长度单位,指的是72分之一英寸

1inch = 72pt,1pt = 1/72inch

px

pixel,像素,是一个虚拟长度单位,是计算机系统的数字化图像长度单位,如果px要换算成物理长度,需要指定DPI(Dots Per Inch,每英寸像素数),在扫描打印时一般都有DPI可选。windows系统默认是96dpi,Apple系统默认是72dpi。

dpi

DPI(Dots Per Inch,每英寸像素数),在扫描打印时一般都有DPI可选。windows系统默认是96dpi,Apple系统默认是72dpi。

em

相对长度单位,相当于当前对象内文本的字体尺寸,最初是指字母M的宽度,故名em。现指的是字符宽度的倍数,用法类似百分比,如:0.8em,1.2em,2em等。通常1em=16px

字号:

是中文字库中特有的一种单位,以中文代号表示特定的磅值pt,便于记忆、表述。

TWIP

word中xml中的长度单位.

1pt=20twip

1px=15twip

1inch=1440twip

不同字体对应大小:

"初号" = 42磅 = 840缇

"小初" = 36磅 = 720

"一号" = 26磅 = 520

"小一" = 24磅 = 480

"二号" = 22磅 = 440

"小二" = 18磅 = 360

"三号" = 16磅 = 320

"小三" = 15磅 = 300

"四号" = 14磅 = 280

"小四" = 12磅 = 240

"五号" = 10.5磅 = 210

"小五" = 9磅 = 180

"六号" = 7.5磅 = 150

"小六" = 6.5磅 = 130

"七号" = 5.5磅 =110

"八号" = 5磅 = 100

emu

100mm=360emu (100mm是一毫米放大一百倍,该单位是uno层的单位)

1磅=12700emu(emu一般是形状锚点里面的单位,xml文件中如果有很大的数字,第一眼可以猜测就是emu)

换算关系

在windows下96dpi来计算,1pt=96/72px=4/3px

字号 pt px em 初号 42pt 56px 3.5em 小初 36pt 48px 3em 34pt 45px 2.75em 32pt 42px 2.55em 30pt 40px 2.45em 29pt 38px 2.35em 28pt 37px 2.3em 27pt 36px 2.25em 一号 26pt 35px 2.2em 25pt 34px 2.125em 小一 24pt 32px 2em 二号 22pt 29px 1.8em 20pt 26px 1.6em 小二 18pt 24px 1.5em 17pt 23px 1.45em 三号 16pt 22px 1.4em 小三 15pt 21px 1.3em 14.5pt 20px 1.25em 四号 14pt 19px 1.2em 13.5pt 18px 1.125em 13pt 17px 1.05em 小四 12pt 16px 1em 11pt 15px 0.95em 五号 10.5pt 14px 0.875em 10pt 13px 0.8em 小五 9pt 12px 0.75em 8pt 11px 0.7em 六号 7.5pt 10px 0.625em 7pt 9px 0.55em 小六 6.5pt 8px 0.5em 七号 5.5pt 7px 0.4375em 八号 5pt 6px 0.375em

获取DPI

#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;

// 1毫米=0.039370078740157英寸 
#define INCH 0.03937

float GetDPI()
{
    HDC hdcScreen;
    hdcScreen = CreateDC(L"DISPLAY", NULL, NULL, NULL);

    int iX = GetDeviceCaps(hdcScreen, HORZRES);    // pixel
    int iY = GetDeviceCaps(hdcScreen, VERTRES);    // pixel
    int iPhsX = GetDeviceCaps(hdcScreen, HORZSIZE);    // mm
    int iPhsY = GetDeviceCaps(hdcScreen, VERTSIZE);    // mm

    if (NULL != hdcScreen)
    {
        DeleteDC(hdcScreen);
    }
    float iTemp = iPhsX * iPhsX + iPhsY * iPhsY;
    float fInch = sqrt(iTemp) * INCH;
    iTemp = iX * iX + iY * iY;
    float fPixel = sqrt(iTemp);

    float iDPI = fPixel / fInch;    // dpi pixel/inch
    cout << "DPI:" << iDPI << endl;
    return iDPI;
}

int main()
{
    GetDPI();
    system("pause");
    return 0;
}
经验分享 程序员 微信小程序 职场和发展