Bagikan melalui


Mengemas Font dengan Aplikasi

Topik ini memberikan gambaran umum tentang cara mengemas font dengan aplikasi Windows Presentation Foundation (WPF) Anda.

Catatan

Seperti kebanyakan jenis perangkat lunak, file font dilisensikan, bukan dijual. Lisensi yang mengatur penggunaan font bervariasi dari vendor ke vendor tetapi secara umum sebagian besar lisensi, termasuk yang mencakup font yang disediakan Microsoft dengan aplikasi dan Windows, tidak mengizinkan font disematkan dalam aplikasi atau didistribusikan ulang. Oleh karena itu, sebagai pengembang, Anda bertanggung jawab untuk memastikan bahwa Anda memiliki hak lisensi yang diperlukan untuk font apa pun yang Anda sematkan dalam aplikasi atau mendistribusikan ulang.

Pengantar Font Kemasan

Anda dapat dengan mudah mengemas font sebagai sumber daya dalam aplikasi WPF Anda untuk menampilkan teks antarmuka pengguna dan jenis konten berbasis teks lainnya. Font dapat dipisahkan dari atau disematkan dalam file rakitan aplikasi. Anda juga dapat membuat pustaka font khusus sumber daya, yang dapat dirujuk oleh aplikasi Anda.

Font OpenType dan TrueType® berisi bendera jenis, fsType, yang menunjukkan hak lisensi penyematan font untuk font. Namun, bendera jenis ini hanya mengacu pada font tersemat yang disimpan dalam dokumen-itu tidak merujuk ke font yang disematkan dalam aplikasi. Anda dapat mengambil hak penyematan font untuk font dengan membuat GlyphTypeface objek dan mereferensikan propertinya EmbeddingRights . Lihat bagian "METRIK OS/2 dan Windows" dari Spesifikasi OpenType untuk informasi selengkapnya tentang bendera fsType.

Situs Web Tipografi Microsoft menyertakan informasi kontak yang dapat membantu Anda menemukan vendor font tertentu atau menemukan vendor font untuk pekerjaan kustom.

Menambahkan Font sebagai Item Isi

Anda dapat menambahkan font ke aplikasi Anda sebagai item konten proyek yang terpisah dari file rakitan aplikasi. Ini berarti bahwa item konten tidak disematkan sebagai sumber daya dalam rakitan. Contoh file proyek berikut menunjukkan cara menentukan item konten.

<Project DefaultTargets="Build"  
                xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <!-- Other project build settings ... -->  
  
  <ItemGroup>  
    <Content Include="Peric.ttf" />  
    <Content Include="Pericl.ttf" />  
  </ItemGroup>  
</Project>  

Untuk memastikan bahwa aplikasi dapat menggunakan font pada waktu proses, font harus dapat diakses dalam direktori penyebaran aplikasi. Elemen <CopyToOutputDirectory> dalam file proyek aplikasi memungkinkan Anda menyalin font secara otomatis ke direktori penyebaran aplikasi selama proses build. Contoh file proyek berikut menunjukkan cara menyalin font ke direktori penyebaran.

<ItemGroup>  
  <Content Include="Peric.ttf">  
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>  
  </Content>  
  <Content Include="Pericl.ttf">  
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>  
  </Content>  
</ItemGroup>  

Contoh kode berikut menunjukkan cara mereferensikan font aplikasi sebagai item konten—item konten yang direferensikan harus berada di direktori yang sama dengan file rakitan aplikasi.

<TextBlock FontFamily="./#Pericles Light">
  Aegean Sea
</TextBlock>

Menambahkan Font sebagai Item Sumber Daya

Anda dapat menambahkan font ke aplikasi Anda sebagai item sumber daya proyek yang disematkan dalam file rakitan aplikasi. Menggunakan subdirektori terpisah untuk sumber daya membantu mengatur file proyek aplikasi. Contoh file proyek berikut menunjukkan cara menentukan font sebagai item sumber daya dalam subdirektori terpisah.

<Project DefaultTargets="Build"  
                xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <!-- Other project build settings ... -->  
  
  <ItemGroup>  
    <Resource Include="resources\Peric.ttf" />  
    <Resource Include="resources\Pericl.ttf" />  
  </ItemGroup>  
</Project>  

Catatan

Saat Anda menambahkan font sebagai sumber daya ke aplikasi, pastikan Anda mengatur <Resource> elemen, dan bukan <EmbeddedResource> elemen dalam file proyek aplikasi Anda. Elemen <EmbeddedResource> untuk tindakan build tidak didukung.

Contoh markup berikut menunjukkan cara mereferensikan sumber daya font aplikasi.

<TextBlock FontFamily="./resources/#Pericles Light">
  Aegean Sea
</TextBlock>

Mereferensikan Item Sumber Daya Font dari Kode

Untuk mereferensikan item sumber daya font dari kode, Anda harus menyediakan referensi sumber daya font dua bagian: pengidentifikasi sumber daya seragam dasar (URI); dan referensi lokasi font. Nilai-nilai ini digunakan sebagai parameter untuk metode .FontFamily Contoh kode berikut menunjukkan cara mereferensikan sumber daya font aplikasi di subdirektori proyek yang disebut resources.

// The font resource reference includes the base URI reference (application directory level),
// and a relative URI reference.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./resources/#Pericles Light");
' The font resource reference includes the base URI reference (application directory level),
' and a relative URI reference.
myTextBlock.FontFamily = New FontFamily(New Uri("pack://application:,,,/"), "./resources/#Pericles Light")

Pengidentifikasi sumber daya seragam dasar (URI) dapat menyertakan subdirektori aplikasi tempat sumber daya font berada. Dalam hal ini, referensi lokasi font tidak perlu menentukan direktori, tetapi harus menyertakan "./", yang menunjukkan sumber daya font berada dalam direktori yang sama yang ditentukan oleh pengidentifikasi sumber daya seragam dasar (URI). Contoh kode berikut menunjukkan cara alternatif untuk mereferensikan item sumber daya font—setara dengan contoh kode sebelumnya.

// The base URI reference can include an application subdirectory.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/resources/"), "./#Pericles Light");
' The base URI reference can include an application subdirectory.
myTextBlock.FontFamily = New FontFamily(New Uri("pack://application:,,,/resources/"), "./#Pericles Light")

Mereferensikan Font dari Subdirektori Aplikasi yang Sama

Anda dapat menempatkan konten aplikasi dan file sumber daya dalam subdirektori yang ditentukan pengguna yang sama dari proyek aplikasi Anda. Contoh file proyek berikut menunjukkan halaman konten dan sumber daya font yang ditentukan dalam subdirektori yang sama.

<ItemGroup>  
  <Page Include="pages\HomePage.xaml" />  
</ItemGroup>  
<ItemGroup>  
  <Resource Include="pages\Peric.ttf" />  
  <Resource Include="pages\Pericl.ttf" />  
</ItemGroup>  

Karena konten dan font aplikasi berada dalam subdirektori yang sama, referensi font relatif terhadap konten aplikasi. Contoh berikut menunjukkan cara mereferensikan sumber daya font aplikasi saat font berada di direktori yang sama dengan aplikasi.

<TextBlock FontFamily="./#Pericles Light">
  Aegean Sea
</TextBlock>
// The font resource reference includes the base Uri (application directory level),
// and the file resource location, which is relative to the base Uri.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "/pages/#Pericles Light");
' The font resource reference includes the base Uri (application directory level),
' and the file resource location, which is relative to the base Uri.
myTextBlock.FontFamily = New FontFamily(New Uri("pack://application:,,,/"), "/pages/#Pericles Light")

Menghitung Font dalam Aplikasi

Untuk menghitung font sebagai item sumber daya di aplikasi Anda, gunakan GetFontFamilies metode atau GetTypefaces . Contoh berikut menunjukkan cara menggunakan GetFontFamilies metode untuk mengembalikan kumpulan FontFamily objek dari lokasi font aplikasi. Dalam hal ini, aplikasi berisi subdirektori bernama "sumber daya".

foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}
For Each fontFamily As FontFamily In Fonts.GetFontFamilies(New Uri("pack://application:,,,/"), "./resources/")
    ' Perform action.
Next fontFamily

Contoh berikut menunjukkan cara menggunakan GetTypefaces metode untuk mengembalikan kumpulan Typeface objek dari lokasi font aplikasi. Dalam hal ini, aplikasi berisi subdirektori bernama "sumber daya".

foreach (Typeface typeface in Fonts.GetTypefaces(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}
For Each typeface As Typeface In Fonts.GetTypefaces(New Uri("pack://application:,,,/"), "./resources/")
    ' Perform action.
Next typeface

Membuat Pustaka Sumber Daya Font

Anda dapat membuat pustaka khusus sumber daya yang hanya berisi font—tidak ada kode yang merupakan bagian dari jenis proyek pustaka ini. Membuat pustaka khusus sumber daya adalah teknik umum untuk memisahkan sumber daya dari kode aplikasi yang menggunakannya. Ini juga memungkinkan perakitan pustaka disertakan dengan beberapa proyek aplikasi. Contoh file proyek berikut menunjukkan bagian utama dari proyek pustaka khusus sumber daya.

<PropertyGroup>  
  <AssemblyName>FontLibrary</AssemblyName>  
  <OutputType>library</OutputType>  
  ...  
</PropertyGroup>  
...
<ItemGroup>  
  <Resource Include="Kooten.ttf" />  
  <Resource Include="Pesca.ttf" />  
</ItemGroup  

Mereferensikan Font di Pustaka Sumber Daya

Untuk mereferensikan font di pustaka sumber daya dari aplikasi, Anda harus mengawali referensi font dengan nama rakitan pustaka. Dalam hal ini, rakitan sumber daya font adalah "FontLibrary". Untuk memisahkan nama rakitan dari referensi dalam rakitan, gunakan karakter ';'. Menambahkan kata kunci "Komponen" diikuti dengan referensi ke nama font menyelesaikan referensi lengkap ke sumber daya pustaka font. Contoh kode berikut menunjukkan cara mereferensikan font dalam rakitan pustaka sumber daya.

<Run FontFamily="/FontLibrary;Component/#Kootenay" FontSize="36">
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
</Run>

Catatan

SDK ini berisi sekumpulan contoh font OpenType yang dapat Anda gunakan dengan aplikasi WPF. Font ditentukan dalam pustaka khusus sumber daya. Untuk informasi selengkapnya, lihat Sampel Paket Font OpenType.

Batasan Penggunaan Font

Daftar berikut menjelaskan beberapa batasan pada kemasan dan penggunaan font dalam aplikasi WPF:

  • Bit izin penyematan font: Aplikasi WPF tidak memeriksa atau memberlakukan bit izin penyematan font apa pun. Lihat bagian font Introduction_to_Packing untuk informasi selengkapnya.

  • Situs font asal: Aplikasi WPF tidak mengizinkan referensi font ke pengidentifikasi sumber daya seragam http atau ftp (URI).

  • URI absolut menggunakan paket: notasi: Aplikasi WPF tidak memungkinkan Anda membuat FontFamily objek secara terprogram menggunakan "pack:" sebagai bagian dari referensi pengidentifikasi sumber daya seragam absolut (URI) ke font. Misalnya, "pack://application:,,,/resources/#Pericles Light" adalah referensi font yang tidak valid.

  • Penyematan font otomatis: Selama waktu desain, tidak ada dukungan untuk mencari penggunaan font aplikasi dan secara otomatis menyematkan font dalam sumber daya aplikasi.

  • Subset font: Aplikasi WPF tidak mendukung pembuatan subset font untuk dokumen yang tidak tetap.

  • Dalam kasus di mana ada referensi yang salah, aplikasi kembali menggunakan font yang tersedia.

Baca juga