рдХрд╛рд░реНрдп:
iText рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛
рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдкреАрдбреАрдПрдл рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдПрдБред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд▓реЛрдЧреЛрдВ рд╕реЗ, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдлреЛрдВрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЯреНрд░реВ рдЯрд╛рдЗрдк рдФрд░ рдЯрд╛рдЗрдк 1 рдЬреИрд╕реЗ рдлреЙрдиреНрдЯред
IText рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ FontFactory рд╕рд┐рд╕реНрдЯрдо рдлреЛрдВрдЯ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдлрд╝реЙрдиреНрдЯ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдкрд░, рдЖрдкрдХреЛ рдЗрд╕рдХреА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣реАрдВ рд╕реЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЦрдбрд╝реА рд╣реБрдИрдВред TT рдФрд░ T1 рдХреЗ рд▓рд┐рдП, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рдФрд░ .NET рдореЗрдВ T1 рд╕реЗ TT рдлрд╝реЙрдиреНрдЯ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдирдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реИрдВред
рдлрд╝реЙрдиреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЛ TEXTMETRIC рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ tmPitchAndFamily рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ GD32.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ GetTextMetrics рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ:
namespace SYS_TEXT {
using System;
using System.Drawing;
using System.Runtime.InteropServices;
/// <summary> Access to system fon metric class. </summary>
static class METRIC {
public static byte TMPF_TRUETYPE = 0x4;
#region Native structs
[StructLayout( LayoutKind.Sequential )]
internal struct TEXTMETRIC {
public int tmHeight;
public int tmAscent;
public int tmDescent;
public int tmInternalLeading;
public int tmExternalLeading;
public int tmAveCharWidth;
public int tmMaxCharWidth;
public int tmWeight;
public int tmOverhang;
public int tmDigitizedAspectX;
public int tmDigitizedAspectY;
public char tmFirstChar;
public char tmLastChar;
public char tmDefaultChar;
public char tmBreakChar;
public byte tmItalic;
public byte tmUnderlined;
public byte tmStruckOut;
public byte tmPitchAndFamily;
public byte tmCharSet;
}
#endregion // Native structs
/// <summary> Verify is font TrueType </summary>
/// <param name="font">Font</param>
/// <returns>Font is TrueType</returns>
public static bool FontIsTrueType( Font font ) {
TEXTMETRIC tm;
GetFontMetrics( font, out tm );
return ( tm.tmPitchAndFamily & TMPF_TRUETYPE ) != 0;
}
/// <summary> Get font metrics </summary>
/// <param name="font">Font</param>
/// <param name="tm">Text metrics</param>
public static void GetFontMetrics( Font font, out TEXTMETRIC tm ) {
TEXTMETRIC tmRet = new TEXTMETRIC();
IntPtr hdc = GetDC( IntPtr .Zero );
IntPtr hfnt = font.ToHfont();
// Select in DC new font
IntPtr hFontPrevious = SelectObject( hdc, hfnt );
GetTextMetrics( hdc, ref tmRet );
SelectObject( hdc, hFontPrevious );
ReleaseDC( IntPtr .Zero, hdc );
tm = tmRet;
}
[DllImport( "Gdi32.dll" )]
private static extern IntPtr SelectObject( IntPtr hdc, IntPtr hgdiobj );
[DllImport( "Gdi32.dll" )]
private static extern bool GetTextMetrics( IntPtr hdc, ref TEXTMETRIC lptm );
[DllImport( "user32.dll" , CharSet = CharSet.Auto )]
static private extern IntPtr GetDC( IntPtr hWnd );
[DllImport( "user32.dll" , CharSet = CharSet.Auto )]
static private extern int ReleaseDC( IntPtr hWnd, IntPtr hDC );
} // METRIC
} // SYS_TEXT
* This source code was highlighted with Source Code Highlighter .
рддреЛ, рдлрд╝реЙрдиреНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдм рд╕рд╣реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗрдЯ рдХрд░реЗрдВ:
рдЯреНрд░реВ рдЯрд╛рдЗрдк - BaseFont.IDENTITY_H,
рдЯрд╛рдЗрдк 1 - "Cp1251"ред
рд╡рд╛рдВрдЫрд┐рдд рдлреЛрдВрдЯ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рдЖрд╡рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдХреИрд╢рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдЦрд╛рдиреЗ рд╕реЗ рдлрд╝реЙрдиреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИред
namespace iText_font_test {
using System;
using System.Collections;
using iTextSharp.text;
using iTextSharp.text.pdf;
using SYS_TEXT;
/// <summary> Helpers for iTextSharp library </summary>
public static class ITEXT_HLP {
#region Properties
/// <summary> Font cache </summary>
private static Hashtable __cache_fonts;
#endregion // Properties
#region Methods
/// <summary> Get font from system fonts </summary>
/// <param name="font_nm">Font name</param>
/// <returns>BaseFont</returns>
public static BaseFont font_sys_get( string font_nm ) {
// Create font cache if not exist
if ( null == __cache_fonts )
__cache_fonts = new Hashtable ();
// Try get font from cache
if ( __cache_fonts.Contains( font_nm ) )
return (BaseFont) __cache_fonts[ font_nm ];
BaseFont result_font;
// Try get font from system
try {
var sf = new System.Drawing. Font ( font_nm, 8f );
var enc = METRIC.FontIsTrueType( sf ) ? BaseFont.IDENTITY_H : "Cp1251" ;
FontFactory.RegisterDirectories();
var font = FontFactory.GetFont( font_nm, enc, true );
result_font = font.GetCalculatedBaseFont( true );
} catch ( Exception ) {
return null ;
}
// Save font in cache
if ( null != result_font )
__cache_fonts[ font_nm ] = result_font;
return result_font;
} // font_sys_get
#endregion // Methods
} // ITEXT_HLP
} // iText_font_test
* This source code was highlighted with Source Code Highlighter .
рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace iText_font_test {
class Program {
static void Main( string [] args ) {
// Create new PDF document
Rectangle pagesize = new Rectangle( 600f, 300f );
Document document = new Document( pagesize, 0f, 0f, 0f, 0f );
PdfWriter wr_pdf = PdfWriter.GetInstance( document, new FileStream ( "font_test.pdf" , FileMode .Create ) );
document.Open();
PdfContentByte canvas = wr_pdf.DirectContent;
// Draw text
canvas.BeginText();
BaseFont font = ITEXT_HLP.font_sys_get( "arial" );
canvas.SetFontAndSize( font, 24f );
canvas.ShowTextAligned( PdfContentByte.ALIGN_LEFT, ", !" , 100f, 200f, 0f );
canvas.EndText();
// Close document
document.Close();
}
}
}
* This source code was highlighted with Source Code Highlighter .
рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдирдП рдмрд╣реБрднрд╛рд╖реА рдФрд░ рдкреБрд░рд╛рдиреЗ рдЯреНрд░реВ рдЯрд╛рдЗрдк рдФрд░ рдкреБрд░рд╛рдиреЗ рдЯрд╛рдЗрдк 1 рдлреЛрдВрдЯ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рдмрд╣реБрднрд╛рд╖реА рдЯрд╛рдЗрдк 1 рдлрд╝реЙрдиреНрдЯ рд╣реИрдВ, рддреЛ рдореИрдВ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд╕рд╛рдордирд╛ рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рдХреЛрдИ рдпрд╣ рдЬрд╛рди рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдЯреАрдЯреА рдХреЛ рдЯреАрдЯреА рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдП?