' ######################################################################################## ' File: cPDFFonts.bi ' Contents: PDF Font Metrics ' Version: 1.0 ' Compiler: FreeBasic 32 & 64-bit ' Copyright (c) 2026 Rick Kelly ' Released into the public domain for private and public use without restriction ' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER ' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF ' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE. ' ######################################################################################## #INCLUDE ONCE "AfxNova\CDicObj.inc" #INCLUDE ONCE "AfxNova\AfxArrays.inc" #INCLUDE ONCE "AfxNova\AfxStr.inc" ' ######################################################################################## ' cPDFFonts Class ' ######################################################################################## Type cPDFFonts Extends Object Private: Type FontDescriptor FontName As WSTRING * 30 FontID As Long FontStyle As Long FontReferenced As Long FontAscent As Long FontCapHeight As Long FontDescent As Long FontFlags As Long FontRectLeft As Long FontRectTop As Long FontRectRight As Long FontRectBottom As Long FontItalicAngle As Double FontStemV As Long FontWeight As Long FontUnderlineThickness As Long FontUnderlinePosition As Long FontObject As Long FontWidthObject As Long FontDescriptorObject As Long End Type FontList As CDicObj FontWidths As CDicObj ' Supported Font Families FONT_ARIAL as Long = 1 FONT_TIMESNEWROMAN as Long = 2 FONT_VERDANA as Long = 3 FONT_TREBUCHET as Long = 4 ' Font Attributes PDF_FONT_NORMAL as Long = 1 PDF_FONT_BOLD as Long = 2 PDF_FONT_ITALIC as Long = 3 PDF_FONT_BOLDITALIC as Long = 4 FONT_UNDERLINE as Long = 1 DECLARE SUB CreateArialFont() DECLARE SUB CreateTimesNewRomanFont() DECLARE SUB CreateVerdanaFont() DECLARE SUB CreateTrebuchetFont() Public: Declare Constructor Declare Destructor DECLARE SUB GetFont(BYVAL nIndex AS LONG, BYREF sFontID AS DWSTRING, BYREF dvFont AS DVARIANT, BYREF sWidth AS DWSTRING) DECLARE PROPERTY TotalFonts() As Long End Type Constructor cPDFFonts CreateArialFont() CreateTimesNewRomanFont() CreateVerdanaFont() CreateTrebuchetFont() End Constructor Destructor cPDFFonts End Destructor ' ===================================================================================== ' Total number of fonts created (usually normal,bold,italic,bold italic per family) ' ===================================================================================== Property cPDFFonts.TotalFonts() As Long Property = FontList.Count End Property ' ===================================================================================== ' Retrieve requested font descriptor and character widths ' ===================================================================================== Private Sub cPDFFonts.GetFont(BYVAL nIndex AS LONG, BYREF sFontID AS DWSTRING, BYREF dvFont AS DVARIANT, BYREF sWidth AS DWSTRING) sFontID = "F" + STR(nIndex) dvFont = FontList.Item(sFontID) sWidth = FontWidths.Item(sFontID) End Sub ' ===================================================================================== ' Create all supported font families ' ===================================================================================== ' ===================================================================================== ' Create Font Class Arial ' ===================================================================================== Private Sub cPDFFonts.CreateArialFont() DIM uDescriptor AS FontDescriptor DIM sFontKey AS DWSTRING DIM dv AS DVARIANT DIM sWidthList AS DWSTRING ' Arial Normal uDescriptor.FontName = "Arial" uDescriptor.FontID = FONT_ARIAL uDescriptor.FontStyle = PDF_FONT_NORMAL uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 905 uDescriptor.FontCapHeight = 728 uDescriptor.FontDescent = -210 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -666 uDescriptor.FontRectTop = -210 uDescriptor.FontRectRight = 2000 uDescriptor.FontRectBottom = 728 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 44 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 73 uDescriptor.FontUnderlinePosition = -106 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",278,278,368,556,556,889,667,204,333,333,389,584,278,333,278,278" _ + ",556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556" _ + ",1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778" _ + ",667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556" _ + ",333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556" _ + ",556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,750" _ + ",601,750,222,590,348,1000,575,577,381,1042,675,333,1028,750,646,750" _ + ",750,225,222,354,348,361,614,1060,390,1000,521,333,967,750,539,719" _ + ",278,333,565,588,576,613,260,570,364,798,411,556,588,362,798,627" _ + ",400,571,376,375,349,576,601,278,333,333,402,556,879,876,879,611" _ + ",728,728,728,728,728,728,1005,743,673,673,673,673,278,309,353,336" _ + ",729,722,793,793,793,793,793,584,801,722,722,722,722,719,684,640" _ + ",574,574,574,574,574,574,908,551,574,574,574,574,278,332,361,338" _ + ",576,556,579,579,579,579,579,571,611,556,556,556,556,551,576,551," FontWidths.Add sFontKey, sWidthList ' Arial Bold uDescriptor.FontName = "Arial,Bold" uDescriptor.FontID = FONT_ARIAL uDescriptor.FontStyle = PDF_FONT_BOLD uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 905 uDescriptor.FontCapHeight = 728 uDescriptor.FontDescent = -210 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -628 uDescriptor.FontRectTop = -210 uDescriptor.FontRectRight = 2000 uDescriptor.FontRectBottom = 728 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 47 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 105 uDescriptor.FontUnderlinePosition = -106 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",278,333,484,556,556,889,722,254,333,333,389,584,278,333,278,278" _ + ",556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611" _ + ",975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778" _ + ",667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556" _ + ",333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611" _ + ",611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,750" _ + ",585,750,278,618,500,1000,577,577,392,1060,678,359,1029,750,652,750" _ + ",750,283,278,502,500,381,614,1060,392,1000,568,359,963,750,539,728" _ + ",278,333,590,601,591,611,280,581,391,804,406,560,602,361,804,621" _ + ",414,585,369,373,373,586,611,278,345,333,412,565,884,869,884,623" _ + ",778,778,778,778,778,778,1012,731,677,677,677,677,278,333,370,366" _ + ",733,722,798,798,798,798,798,590,810,722,722,722,722,728,681,636" _ + ",582,582,582,582,582,582,902,591,576,576,576,576,278,343,366,365" _ + ",634,611,635,635,635,635,635,584,638,611,611,611,611,600,634,600," FontWidths.Add sFontKey, sWidthList ' Arial Italic uDescriptor.FontName = "Arial,Italic" uDescriptor.FontID = FONT_ARIAL uDescriptor.FontStyle = PDF_FONT_ITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 905 uDescriptor.FontCapHeight = 728 uDescriptor.FontDescent = -208 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -517 uDescriptor.FontRectTop = -208 uDescriptor.FontRectRight = 1359 uDescriptor.FontRectBottom = 728 uDescriptor.FontItalicAngle = -12 uDescriptor.FontStemV = 44 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 73 uDescriptor.FontUnderlinePosition = -106 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",278,278,450,556,556,889,667,280,333,333,389,584,278,333,278,278" _ + ",556,556,556,556,556,556,556,556,556,556,278,278,584,584,584,556" _ + ",1015,667,667,722,722,667,611,778,722,278,500,667,556,833,722,778" _ + ",667,778,722,667,611,722,667,944,667,667,611,278,278,278,469,556" _ + ",333,556,556,500,556,556,278,556,556,222,222,500,222,833,556,556" _ + ",556,556,333,500,278,556,500,722,500,500,500,334,260,334,584,750" _ + ",666,750,222,556,333,1000,604,609,409,1024,692,335,1065,750,658,750" _ + ",750,302,298,434,438,350,575,1021,445,1000,525,333,944,750,533,794" _ + ",278,333,556,628,556,688,260,576,430,759,430,558,584,355,759,588" _ + ",400,549,422,421,393,593,630,278,333,375,433,556,872,848,886,611" _ + ",667,667,667,667,667,667,1064,751,732,732,732,732,361,410,428,435" _ + ",733,778,793,793,793,793,793,584,797,775,775,775,775,794,688,611" _ + ",556,556,556,562,556,556,889,532,556,556,556,556,331,370,393,399" _ + ",567,556,561,561,561,561,561,549,611,579,579,579,579,582,556,582," FontWidths.Add sFontKey, sWidthList ' Arial Bold Italic uDescriptor.FontName = "Arial,BoldItalic" uDescriptor.FontID = FONT_ARIAL uDescriptor.FontStyle = PDF_FONT_BOLDITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 905 uDescriptor.FontCapHeight = 728 uDescriptor.FontDescent = -212 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -560 uDescriptor.FontRectTop = -210 uDescriptor.FontRectRight = 1390 uDescriptor.FontRectBottom = 728 uDescriptor.FontItalicAngle = -12 uDescriptor.FontStemV = 47 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 105 uDescriptor.FontUnderlinePosition = -106 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750" _ + ",278,333,450,556,556,889,722,280,333,333,389,584,278,333,278,278" _ + ",556,556,556,556,556,556,556,556,556,556,333,333,584,584,584,611" _ + ",975,722,722,722,722,667,611,778,722,278,556,722,611,833,722,778" _ + ",667,778,722,667,611,722,667,944,667,667,611,333,278,333,584,556" _ + ",333,556,611,556,611,556,333,611,611,278,278,556,278,889,611,611" _ + ",611,611,389,556,333,611,556,778,556,556,500,389,280,389,584,750" _ + ",666,750,222,556,333,1000,604,609,409,1024,692,335,1065,750,658,750" _ + ",750,302,298,434,438,350,575,1021,445,1000,525,333,944,750,533,794" _ + ",278,333,556,628,556,688,260,576,430,759,430,558,584,355,759,588" _ + ",400,549,422,421,393,593,630,278,333,375,433,556,872,848,886,611" _ + ",667,667,667,667,667,667,1064,751,732,732,732,732,361,410,428,435" _ + ",733,778,793,793,793,793,793,584,797,775,775,775,775,794,688,611" _ + ",556,556,556,562,556,556,889,532,556,556,556,556,331,370,393,399" _ + ",567,556,561,561,561,561,561,549,611,579,579,579,579,582,556,582," FontWidths.Add sFontKey, sWidthList End Sub ' ===================================================================================== ' Create Font Class Times New Roman ' ===================================================================================== Private Sub cPDFFonts.CreateTimesNewRomanFont() DIM uDescriptor AS FontDescriptor DIM sFontKey AS DWSTRING DIM dv AS DVARIANT DIM sWidthList AS DWSTRING ' Times New Roman Normal uDescriptor.FontName = "Times#20New#20Roman" uDescriptor.FontID = FONT_TIMESNEWROMAN uDescriptor.FontStyle = PDF_FONT_NORMAL uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 891 uDescriptor.FontCapHeight = 693 uDescriptor.FontDescent = -216 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -568 uDescriptor.FontRectTop = -216 uDescriptor.FontRectRight = 2000 uDescriptor.FontRectBottom = 693 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 40 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 49 uDescriptor.FontUnderlinePosition = -109 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",250,333,408,500,500,833,778,180,333,333,500,564,250,333,250,278" _ + ",500,500,500,500,500,500,500,500,500,500,278,278,564,564,564,444" _ + ",921,722,667,667,722,611,556,722,722,333,389,722,611,889,722,722" _ + ",556,722,667,556,611,722,722,944,722,722,611,333,278,333,469,500" _ + ",333,444,500,444,500,444,333,500,500,278,278,500,278,778,500,500" _ + ",500,500,333,389,278,500,500,722,500,500,444,480,200,480,541,778" _ + ",503,778,333,509,444,1000,500,500,333,1000,556,333,889,778,611,778" _ + ",778,333,333,444,444,350,529,1030,344,984,389,333,722,778,449,729" _ + ",250,333,500,500,507,521,200,500,333,760,295,500,566,333,760,530" _ + ",400,559,302,300,333,576,476,250,333,300,319,500,754,750,754,444" _ + ",732,732,732,732,732,732,889,667,611,611,611,611,333,333,333,333" _ + ",722,729,722,722,722,722,722,564,722,732,732,732,732,729,556,500" _ + ",463,463,463,463,463,463,667,444,444,444,444,444,278,278,302,300" _ + ",500,517,500,500,500,500,500,559,502,520,520,520,520,515,500,515," FontWidths.Add sFontKey, sWidthList ' Times New Roman Bold uDescriptor.FontName = "Times#20New#20Roman,Bold" uDescriptor.FontID = FONT_TIMESNEWROMAN uDescriptor.FontStyle = PDF_FONT_BOLD uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 891 uDescriptor.FontCapHeight = 677 uDescriptor.FontDescent = -216 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -558 uDescriptor.FontRectTop = -216 uDescriptor.FontRectRight = 2000 uDescriptor.FontRectBottom = 677 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 42 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 95 uDescriptor.FontUnderlinePosition = -109 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",250,333,555,500,500,1000,833,278,333,333,500,570,250,333,250,278" _ + ",500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500" _ + ",930,722,667,722,722,667,611,778,778,389,500,778,667,944,722,778" _ + ",611,778,722,556,667,722,722,1000,722,722,667,333,278,333,581,500" _ + ",333,500,556,444,556,444,333,500,556,278,333,556,278,833,556,500" _ + ",556,556,444,389,333,556,500,722,500,500,444,394,220,394,520,778" _ + ",521,778,333,537,500,1000,500,500,361,1008,556,333,1000,778,686,778" _ + ",778,333,333,500,500,353,545,1046,362,1042,391,333,731,778,465,748" _ + ",250,333,500,516,528,536,220,500,360,759,345,519,591,346,759,546" _ + ",404,579,313,308,352,596,579,250,333,300,343,520,767,762,767,500" _ + ",748,748,748,748,748,748,1000,722,667,667,667,667,403,403,403,403" _ + ",722,736,779,779,779,779,779,570,779,742,742,742,742,748,614,556" _ + ",520,520,520,520,520,520,730,458,457,457,457,457,304,326,333,335" _ + ",501,564,501,501,501,501,501,579,504,561,561,561,561,528,556,528," FontWidths.Add sFontKey, sWidthList ' Times New Roman Italic uDescriptor.FontName = "Times#20New#20Roman,Italic" uDescriptor.FontID = FONT_TIMESNEWROMAN uDescriptor.FontStyle = PDF_FONT_ITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 891 uDescriptor.FontCapHeight = 694 uDescriptor.FontDescent = -216 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -498 uDescriptor.FontRectTop = -216 uDescriptor.FontRectRight = 1333 uDescriptor.FontRectBottom = 694 uDescriptor.FontItalicAngle = -16.4 uDescriptor.FontStemV = 40 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 49 uDescriptor.FontUnderlinePosition = -109 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",250,333,473,500,500,833,778,282,333,333,500,675,250,333,250,278" _ + ",500,500,500,500,500,500,500,500,500,500,333,333,675,675,675,500" _ + ",920,611,611,667,722,611,611,722,722,333,444,667,556,833,667,722" _ + ",611,722,611,500,556,722,611,833,611,556,556,389,278,389,422,500" _ + ",333,500,500,444,500,444,278,500,500,278,278,444,278,722,500,500" _ + ",500,500,389,389,278,500,444,667,444,444,389,400,275,400,541,778" _ + ",607,778,333,509,556,889,542,525,407,1007,567,333,990,778,632,778" _ + ",778,376,360,580,570,350,529,919,429,984,433,333,669,778,433,688" _ + ",250,389,500,545,507,644,275,531,430,760,397,503,675,333,760,530" _ + ",400,559,354,345,381,576,523,250,333,325,414,500,750,750,750,500" _ + ",611,639,642,688,690,627,930,725,653,653,653,653,431,431,442,467" _ + ",732,783,739,739,739,739,739,675,758,835,835,835,835,688,626,519" _ + ",500,500,500,512,515,500,673,449,451,451,464,489,297,355,363,388" _ + ",502,512,500,500,500,512,515,559,510,500,500,500,503,461,500,471," FontWidths.Add sFontKey, sWidthList ' Times New Roman Bold Italic uDescriptor.FontName = "Times#20New#20Roman,BoldItalic" uDescriptor.FontID = FONT_TIMESNEWROMAN uDescriptor.FontStyle = PDF_FONT_BOLDITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 891 uDescriptor.FontCapHeight = 677 uDescriptor.FontDescent = -216 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -547 uDescriptor.FontRectTop = -216 uDescriptor.FontRectRight = 1401 uDescriptor.FontRectBottom = 677 uDescriptor.FontItalicAngle = -16.4 uDescriptor.FontStemV = 41 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 95 uDescriptor.FontUnderlinePosition = -109 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778" _ + ",250,389,580,500,500,833,778,335,333,333,500,570,250,333,250,278" _ + ",500,500,500,500,500,500,500,500,500,500,333,333,570,570,570,500" _ + ",832,667,667,667,722,667,667,722,778,389,500,667,611,889,722,722" _ + ",611,722,667,556,611,722,667,889,667,611,611,333,278,333,570,500" _ + ",333,500,500,444,500,444,333,500,556,278,278,500,278,778,556,500" _ + ",500,500,389,389,278,556,444,667,500,444,389,348,220,348,570,778" _ + ",620,778,333,521,500,1000,531,529,405,1003,604,333,979,778,700,778" _ + ",778,367,369,560,560,350,530,1030,419,1026,424,333,738,778,439,738" _ + ",250,389,500,546,512,635,220,551,422,747,388,514,606,343,747,665" _ + ",447,563,365,357,426,576,563,257,333,344,396,500,750,750,750,500" _ + ",667,758,706,728,742,678,979,742,701,701,701,701,488,547,489,507" _ + ",729,832,739,739,739,739,739,570,748,830,830,830,830,738,624,527" _ + ",500,504,500,502,507,500,737,459,463,557,463,481,292,382,361,380" _ + ",507,556,500,522,500,502,507,563,506,556,556,556,556,489,500,465," FontWidths.Add sFontKey, sWidthList End Sub ' ===================================================================================== ' Create Font Class Verdana ' ===================================================================================== Private Sub cPDFFonts.CreateVerdanaFont() DIM uDescriptor AS FontDescriptor DIM sFontKey AS DWSTRING DIM dv AS DVARIANT DIM sWidthList AS DWSTRING ' Verdana Normal uDescriptor.FontName = "Verdana" uDescriptor.FontID = FONT_VERDANA uDescriptor.FontStyle = PDF_FONT_NORMAL uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 917 uDescriptor.FontCapHeight = 765 uDescriptor.FontDescent = -219 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -173 uDescriptor.FontRectTop = -217 uDescriptor.FontRectRight = 1167 uDescriptor.FontRectBottom = 912 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 50 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 49 uDescriptor.FontUnderlinePosition = -88 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",241,331,412,643,610,817,748,215,380,375,472,643,270,374,270,469" _ + ",614,433,559,552,567,528,566,540,596,566,313,313,643,643,643,479" _ + ",929,732,654,667,749,668,623,756,815,390,529,758,642,927,797,744" _ + ",616,744,761,561,649,787,725,1028,749,680,631,380,483,375,643,684" _ + ",500,529,562,490,601,501,432,528,596,307,292,583,299,898,605,542" _ + ",574,601,442,433,371,589,549,790,537,545,455,435,375,433,643,1000" _ + ",667,1000,227,553,410,807,472,472,500,1206,561,415,1013,1000,631,1000" _ + ",1000,227,227,410,410,393,643,857,500,944,433,415,834,1000,455,680" _ + ",241,331,555,622,571,664,375,500,500,942,500,581,643,374,942,684" _ + ",419,643,500,500,500,591,526,279,500,500,500,581,1050,1050,1053,479" _ + ",732,732,732,732,732,732,986,667,668,668,668,668,390,390,392,395" _ + ",749,797,744,744,744,744,744,643,744,787,787,787,787,680,619,548" _ + ",529,529,529,529,529,529,755,490,501,501,501,501,307,307,311,314" _ + ",533,605,542,542,542,542,542,643,542,589,589,589,589,545,561,545," FontWidths.Add sFontKey, sWidthList ' Verdana Bold uDescriptor.FontName = "Verdana,Bold" uDescriptor.FontID = FONT_VERDANA uDescriptor.FontStyle = PDF_FONT_BOLD uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 1005 uDescriptor.FontCapHeight = 765 uDescriptor.FontDescent = -210 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -453 uDescriptor.FontRectTop = -207 uDescriptor.FontRectRight = 1461 uDescriptor.FontRectBottom = 765 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 56 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 103 uDescriptor.FontUnderlinePosition = -68 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",342,402,587,867,711,1272,862,332,543,543,711,867,361,480,361,689" _ + ",711,711,711,711,711,711,711,711,711,711,402,402,867,867,867,617" _ + ",964,776,762,724,830,683,650,811,837,546,555,771,637,948,847,850" _ + ",733,850,782,710,682,812,764,1128,764,737,692,543,689,543,867,711" _ + ",711,668,699,588,699,664,422,699,712,342,403,671,342,1058,712,687" _ + ",699,699,497,593,456,712,650,979,669,651,597,711,543,711,867,1000" _ + ",728,1000,342,734,608,1049,711,711,711,1777,735,543,1135,1000,715,1000" _ + ",1000,332,376,587,642,711,711,1000,711,964,620,543,1087,1000,616,792" _ + ",342,402,711,711,711,746,543,711,711,964,598,850,867,486,964,779" _ + ",587,867,598,598,711,721,711,361,711,598,598,850,1182,1182,1188,617" _ + ",825,825,825,825,825,825,1094,739,683,683,683,683,546,546,551,546" _ + ",840,847,860,860,860,860,860,867,860,812,812,812,812,792,753,734" _ + ",668,668,668,668,668,668,1037,615,683,683,683,683,349,403,408,411" _ + ",693,712,704,704,704,704,704,867,704,712,712,712,712,696,715,696," FontWidths.Add sFontKey, sWidthList ' Verdana Italic uDescriptor.FontName = "Verdana,Italic" uDescriptor.FontID = FONT_VERDANA uDescriptor.FontStyle = PDF_FONT_ITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 1005 uDescriptor.FontCapHeight = 765 uDescriptor.FontDescent = -207 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -453 uDescriptor.FontRectTop = -207 uDescriptor.FontRectRight = 1461 uDescriptor.FontRectBottom = 765 uDescriptor.FontItalicAngle = -13 uDescriptor.FontStemV = 50 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 59 uDescriptor.FontUnderlinePosition = -88 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",352,394,551,818,636,1076,727,362,454,454,636,818,364,454,364,454" _ + ",636,636,636,636,636,636,636,636,636,636,454,454,818,818,818,545" _ + ",1000,683,686,698,766,632,575,775,751,421,455,693,557,843,748,787" _ + ",603,787,695,684,616,732,683,990,685,615,685,454,454,454,818,636" _ + ",636,601,623,521,623,596,352,622,633,274,344,587,274,973,633,607" _ + ",623,623,427,521,394,633,591,818,592,591,525,635,454,635,818,1000" _ + ",735,1000,269,697,459,818,672,674,636,1521,742,484,1179,1000,781,1000" _ + ",1000,299,452,494,642,545,641,1005,644,989,598,454,1008,1000,598,774" _ + ",352,412,657,712,651,744,454,670,636,1003,595,682,818,460,1003,837" _ + ",585,818,564,569,636,672,702,364,636,542,596,645,1000,1018,1001,545" _ + ",683,683,683,722,684,696,1098,798,741,741,741,741,519,561,555,571" _ + ",802,818,823,823,823,823,823,818,839,810,810,810,810,774,663,653" _ + ",604,609,604,633,604,604,982,599,623,623,623,623,339,454,410,423" _ + ",633,657,623,623,623,644,623,818,652,665,665,665,665,677,642,677," FontWidths.Add sFontKey, sWidthList ' Verdana Bold Italic uDescriptor.FontName = "Verdana,BoldItalic" uDescriptor.FontID = FONT_VERDANA uDescriptor.FontStyle = PDF_FONT_BOLDITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 1005 uDescriptor.FontCapHeight = 765 uDescriptor.FontDescent = -207 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -537 uDescriptor.FontRectTop = -207 uDescriptor.FontRectRight = 1705 uDescriptor.FontRectBottom = 765 uDescriptor.FontItalicAngle = -13 uDescriptor.FontStemV = 56 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 103 uDescriptor.FontUnderlinePosition = -68 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000" _ + ",342,402,669,867,711,1272,862,414,543,543,711,867,361,480,361,689" _ + ",711,711,711,711,711,711,711,711,711,711,402,402,867,867,867,617" _ + ",964,776,762,724,830,683,650,811,837,546,555,771,637,948,847,850" _ + ",733,850,782,710,682,812,764,1128,764,737,692,543,689,543,867,711" _ + ",711,668,699,588,699,664,422,699,712,342,403,671,342,1058,712,686" _ + ",699,699,497,593,456,712,649,979,669,651,597,711,543,711,867,1000" _ + ",817,1000,332,759,588,1049,716,718,711,1777,790,543,1236,1000,799,1000" _ + ",1000,337,508,610,764,711,725,1014,711,994,685,543,1107,1000,688,897" _ + ",342,464,738,772,711,845,543,740,711,985,636,850,867,514,985,922" _ + ",613,867,598,607,711,762,775,365,711,598,641,850,1182,1182,1182,617" _ + ",776,776,776,790,785,776,1194,830,784,784,784,784,650,684,665,687" _ + ",872,919,893,893,893,893,893,867,944,895,895,895,895,897,787,753" _ + ",679,713,679,706,695,679,1051,672,701,701,701,701,399,518,490,521" _ + ",716,731,712,712,712,712,712,867,768,753,753,753,753,760,727,760," FontWidths.Add sFontKey, sWidthList End Sub ' ===================================================================================== ' Create Font Class Trebuchet ' ===================================================================================== Private Sub cPDFFonts.CreateTrebuchetFont() DIM uDescriptor AS FontDescriptor DIM sFontKey AS DWSTRING DIM dv AS DVARIANT DIM sWidthList AS DWSTRING ' Trebuchet Normal uDescriptor.FontName = "Trebuchet#20MS" uDescriptor.FontID = FONT_TREBUCHET uDescriptor.FontStyle = PDF_FONT_NORMAL uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 939 uDescriptor.FontCapHeight = 737 uDescriptor.FontDescent = -205 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -86 uDescriptor.FontRectTop = -205 uDescriptor.FontRectRight = 1082 uDescriptor.FontRectBottom = 737 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 45 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 62 uDescriptor.FontUnderlinePosition = -127 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",1500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",301,367,346,524,524,600,706,185,367,367,367,524,367,367,367,524" _ + ",524,524,524,524,524,524,524,524,524,524,367,367,524,524,524,367" _ + ",771,590,566,598,613,536,525,676,654,278,477,576,506,709,638,674" _ + ",558,676,582,481,581,648,587,852,557,570,550,367,355,367,524,524" _ + ",524,525,557,495,557,545,370,502,546,285,367,504,295,830,546,537" _ + ",557,557,389,405,396,546,490,744,501,493,475,367,524,367,524,500" _ + ",574,500,367,469,526,746,507,507,524,943,501,367,1018,500,561,500" _ + ",500,367,367,524,526,524,367,745,524,719,433,367,947,500,515,624" _ + ",301,367,524,559,557,618,524,475,524,770,395,524,529,367,770,586" _ + ",524,529,451,454,524,546,524,367,524,451,397,524,814,824,814,397" _ + ",648,648,648,648,648,648,892,619,560,560,560,560,289,342,368,386" _ + ",634,638,695,695,695,695,695,529,688,648,648,648,648,624,579,567" _ + ",546,546,546,546,546,546,895,523,574,574,574,574,285,324,373,372" _ + ",563,546,565,565,565,565,565,529,563,546,546,546,546,547,581,547," FontWidths.Add sFontKey, sWidthList ' Trebuchet Bold uDescriptor.FontName = "Trebuchet#20MS,Bold" uDescriptor.FontID = FONT_TREBUCHET uDescriptor.FontStyle = PDF_FONT_BOLD uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 939 uDescriptor.FontCapHeight = 737 uDescriptor.FontDescent = -205 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -101 uDescriptor.FontRectTop = -205 uDescriptor.FontRectRight = 1130 uDescriptor.FontRectBottom = 737 uDescriptor.FontItalicAngle = 0 uDescriptor.FontStemV = 47 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 98 uDescriptor.FontUnderlinePosition = -127 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",301,367,401,586,586,684,706,240,367,367,432,586,367,367,367,390" _ + ",586,586,586,586,586,586,586,586,586,586,367,367,586,586,586,438" _ + ",771,633,595,612,643,569,583,671,684,278,533,617,553,745,667,703" _ + ",587,709,611,511,612,678,622,884,601,613,560,402,355,402,586,586" _ + ",586,533,582,512,581,575,370,502,593,298,367,548,295,859,590,566" _ + ",583,584,427,431,396,591,527,784,552,534,528,434,586,434,586,500" _ + ",622,500,367,487,527,746,512,512,586,1070,532,367,1034,500,581,500" _ + ",500,367,367,586,586,524,374,759,586,736,497,367,964,500,557,671" _ + ",301,367,586,578,604,649,586,490,586,785,432,586,586,372,785,649" _ + ",586,586,451,454,586,563,524,367,586,451,429,586,827,845,844,461" _ + ",691,691,691,691,691,691,966,643,590,590,590,590,280,339,402,431" _ + ",664,667,724,724,724,724,724,586,714,678,678,678,678,671,593,582" _ + ",569,569,569,569,569,569,906,540,603,603,603,603,305,330,422,426" _ + ",594,590,594,594,594,594,594,586,594,591,591,591,591,586,601,586," FontWidths.Add sFontKey, sWidthList ' Trebuchet Italic uDescriptor.FontName = "Trebuchet#20MS,Italic" uDescriptor.FontID = FONT_TREBUCHET uDescriptor.FontStyle = PDF_FONT_ITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 939 uDescriptor.FontCapHeight = 737 uDescriptor.FontDescent = -205 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -110 uDescriptor.FontRectTop = -205 uDescriptor.FontRectRight = 1108 uDescriptor.FontRectBottom = 737 uDescriptor.FontItalicAngle = -10 uDescriptor.FontStemV = 45 uDescriptor.FontWeight = 400 uDescriptor.FontUnderlineThickness = 62 uDescriptor.FontUnderlinePosition = -127 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",301,367,387,524,481,600,706,226,367,367,367,524,367,367,367,524" _ + ",524,524,524,524,524,524,524,524,524,524,367,367,524,524,524,367" _ + ",771,611,566,598,613,536,525,676,654,278,477,576,506,761,638,674" _ + ",543,674,582,481,581,648,587,852,557,570,550,367,355,367,524,524" _ + ",524,525,557,460,557,537,401,502,557,307,367,504,320,830,546,537" _ + ",557,557,417,405,420,557,490,744,501,493,475,367,524,367,524,500" _ + ",601,500,367,478,524,734,522,515,524,913,530,367,1042,500,599,500" _ + ",500,367,367,550,547,524,367,734,525,680,507,367,895,500,534,669" _ + ",301,367,524,550,542,669,524,480,546,731,475,524,524,367,731,547" _ + ",524,524,451,451,524,557,625,367,524,451,495,524,814,814,814,367" _ + ",611,611,611,611,611,611,930,609,603,603,603,603,284,387,418,417" _ + ",630,668,691,691,691,691,698,524,771,681,681,681,681,669,567,548" _ + ",535,535,541,551,548,535,858,474,541,541,541,546,307,320,435,429" _ + ",549,546,543,543,543,543,543,524,603,567,567,567,567,556,559,556," FontWidths.Add sFontKey, sWidthList ' Trebuchet Bold Italic uDescriptor.FontName = "Trebuchet#20MS,BoldItalic" uDescriptor.FontID = FONT_TREBUCHET uDescriptor.FontStyle = PDF_FONT_BOLDITALIC uDescriptor.FontReferenced = 0 uDescriptor.FontAscent = 939 uDescriptor.FontCapHeight = 737 uDescriptor.FontDescent = -205 uDescriptor.FontFlags = 32 uDescriptor.FontRectLeft = -108 uDescriptor.FontRectTop = -205 uDescriptor.FontRectRight = 1156 uDescriptor.FontRectBottom = 737 uDescriptor.FontItalicAngle = -10 uDescriptor.FontStemV = 48 uDescriptor.FontWeight = 700 uDescriptor.FontUnderlineThickness = 98 uDescriptor.FontUnderlinePosition = -127 dv.PutBuffer(@uDescriptor, SIZEOF(uDescriptor)) ' Add to font list sFontKey = "F" + STR(FontList.Count + 1) FontList.Add sFontKey, dv ' Add the character widths sWidthList = ",500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500" _ + ",301,367,453,586,586,732,706,308,367,367,432,586,367,367,367,397" _ + ",586,586,586,586,586,586,586,586,586,586,367,367,586,586,586,397" _ + ",771,614,590,613,632,593,585,676,678,278,499,650,528,786,660,702" _ + ",583,770,624,501,685,662,683,926,657,684,611,485,478,485,586,586" _ + ",586,593,593,493,593,552,410,535,562,327,388,540,320,830,562,570" _ + ",599,599,447,459,438,557,552,773,576,564,533,485,586,485,586,500" _ + ",598,500,367,616,586,734,521,522,586,1042,591,367,1099,500,647,500" _ + ",500,367,367,586,586,524,367,734,590,697,534,367,936,500,564,749" _ + ",301,367,586,588,586,698,586,586,586,746,429,524,586,367,746,610" _ + ",586,586,465,463,586,572,595,367,586,479,456,524,877,877,877,367" _ + ",614,614,618,614,626,614,1000,625,634,634,634,634,313,408,462,456" _ + ",654,698,712,712,712,712,712,586,738,707,707,707,707,749,597,577" _ + ",593,593,593,593,593,593,904,499,560,560,594,560,327,410,453,431" _ + ",571,562,572,572,572,572,572,586,600,572,572,572,572,599,599,599," FontWidths.Add sFontKey, sWidthList End Sub