Gambaran Umum

Banyak format dokumen terikat erat dengan font. Misalnya, ketika pengguna menambahkan teks ke dokumen DOCX, teks tersebut selalu memiliki font yang sudah ditentukan. Beberapa format dokumen biasanya menyimpan data font yang tersemat di dalam berkas dokumen itu sendiri, seperti PDF. Tetapi format lain, seperti format keluarga Office, biasanya bergantung pada font yang terpasang di sistem operasi.

Ada juga banyak format font. Misalnya, kebanyakan font yang terpasang disajikan dalam format TTF (TrueType) dan OTF (OpenType) . Dokumen Office Open XML juga menggunakan format EOT (Embedded OpenType) . Di web, bagaimanapun, WOFF dan WOFF2 adalah format yang paling banyak digunakan.

Daftar Isi

Mendapatkan Semua Font yang Digunakan

Fitur paling berguna dalam konteks font adalah untuk mencantumkan dan mengembalikannya. GroupDocs.Viewer menyediakan metode khusus GetAllFonts() — ketika dokumen dimuat ke dalam instance kelas Viewer , panggil metode ini untuk memperoleh daftar semua font yang digunakan dalam dokumen tersebut. Dalam daftar yang dikembalikan, setiap font akan disajikan sebagai instance dari tipe yang mengimplementasikan antarmuka IFontInfo . Antarmuka ini berisi properti umum untuk setiap font yang mungkin: nama keluarga, gaya, format, dan konten biner.

Keluarga format khusus, seperti WordProcessing, Spreadsheet, Presentation, dan PDF, memiliki implementasi khusus dari IFontInfo ; implementasi ini menyediakan data lebih yang spesifik untuk masing‑masing keluarga format. Misalnya, tipe WordProcessingFontInfo, PresentationFontInfo, dan PdfFontInfo memiliki properti boolean IsEmbedded — sebuah penanda yang menunjukkan di mana font ini disimpan (apakah tersemat dalam isi dokumen yang dimuat atau terpasang di OS). Tipe SpreadsheetFontInfo berisi banyak data font khusus Spreadsheet: warnanya, apakah bergaris bawah atau dicoret. WordProcessingFontInfo dapat berisi nama keluarga alternatif. Dan sebagainya.

Contoh singkat di bawah ini:

using GroupDocs.Viewer;
// ...

const string filename = "sample.docx";
string inputPath = "\full\path\" + filename;

using (Viewer viewer = new Viewer(inputPath))
{
    Fonts.IFontInfo[] allFonts = viewer.GetAllFonts();
    Console.WriteLine("{0} fonts found in the '{1}' document", allFonts.Length, filename);
    foreach (Fonts.IFontInfo font in allFonts)
    {
        Console.WriteLine("Font '{0}' of '{1}' style has {2} bytes and is of '{3}' format",
            font.FamilyName,
            font.Style,
            font.Content.Length,
            font.Format);
    }
}

Harap dicatat bahwa ekstraksi font hanya didukung untuk keluarga format WordProcessing, Spreadsheet, Presentation, dan PDF; untuk semua format dokumen lainnya, metode GetAllFonts() mengembalikan array kosong.

Memproses Font yang Hilang

Situasi ketika sebuah dokumen dibuat pada mesin penulis dan menggunakan font “AAA”, kemudian diproses menggunakan GroupDocs.Viewer pada mesin klien dimana font “AAA” tidak ada, adalah hal yang umum. Dalam kasus seperti itu, GroupDocs.Viewer berusaha mengganti font ini menggunakan aturan substitusi font yang kompleks: ia menganalisis metadata dokumen, nama alternatif font yang hilang, pengaturan dokumen, pengaturan OS, daftar semua font yang tersedia, yang terpasang di OS, dan sebagainya. Akhirnya, jika karena suatu alasan OS “bersih”, yaitu tidak memiliki font yang terpasang sama sekali, maka GroupDocs.Viewer akan menggantikan font yang hilang dengan font yang tersemat di dalam assembly GroupDocs.Viewer (DLL); font ini berfungsi sebagai “pilihan terakhir” bila tidak ada font lain yang tersedia. Misalnya, untuk format keluarga WordProcessing, GroupDocs.Viewer secara internal menyimpan font gratis “Fanwood”.

Saat ini GroupDocs.Viewer melakukan operasi substitusi font secara “senyap” selama proses rendering dokumen (ketika metode Viewer.View() dipanggil) — tidak ada pesan atau peristiwa yang menandakan bahwa mekanisme substitusi font diaktifkan, font mana yang hilang, dan font apa yang menggantikannya, serta untuk dokumen mana. Fitur semacam ini sulit diimplementasikan karena tidak jelas, samar, dan ambigu jenis notifikasi apa yang harus dikeluarkan, dalam bentuk apa, dan bagaimana cara menggunakannya di sisi klien.

Namun, GroupDocs.Viewer menyediakan dua cara bagi pengguna untuk menyelesaikan situasi tersebut: secara manual menentukan font yang hilang dan secara manual mengganti font yang hilang.

Menentukan Font yang Hilang

Ketika pengguna pada awalnya mengetahui bahwa sebuah dokumen menggunakan font “AAA”, dan juga mengetahui bahwa font “AAA” tersebut tidak terpasang di mesin target tempat dokumen akan dirender, dan pengguna memiliki konten biner dari font “AAA” tersebut, ia dapat menentukan font itu sebelum memanggil metode Viewer.View().

Untuk menentukan satu atau banyak font khusus yang tidak terpasang di sistem operasi target, pengguna harus menambahkan sumber font khusus. Sumber font sebenarnya adalah folder tempat satu atau banyak font berada. Sumber ini direpresentasikan oleh kelas FolderFontSource . Dan kelas FontSettings memiliki metode SetFontSources() untuk menambahkan sumber font ke GroupDocs.Viewer.

Cuplikan kode berikut mendemonstrasikan hal ini. Misalkan dokumen “sample.docx” menggunakan font langka “AAA.ttf” yang tidak terpasang di sistem operasi target. Kemudian pengguna menempatkan berkas “AAA.ttf” ke folder "C:\custom_fonts" dan membuat instance kelas FolderFontSource yang mengarah ke folder tersebut. Instance ini kemudian diberikan ke kelas statis FontSettings , dan selanjutnya berkas “sample.docx” dirender ke format HTML. Sebagai hasilnya, font “AAA” akan digunakan dalam dokumen HTML output.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
using GroupDocs.Viewer.Fonts;
// ...

// Specify the font source.
FolderFontSource fontSource = 
    new FolderFontSource(@"C:\custom_fonts", SearchOption.TopFolderOnly);
FontSettings.SetFontSources(fontSource);

using (Viewer viewer = new Viewer("sample.docx"))
{
    // Create an HTML file.
    HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
    viewer.View(viewOptions);
}

Mengganti Font yang Hilang

Ketika pengguna pada awalnya mengetahui bahwa sebuah dokumen menggunakan font “AAA”, dan juga mengetahui bahwa font “AAA” tersebut tidak terpasang di mesin target tempat dokumen akan dirender, tetapi pengguna tidak memiliki akses ke konten biner font “AAA” tersebut, ia dapat menentukan font lain “BBB” yang akan digunakan sebagai gantinya font “AAA” yang hilang. Tidak seperti kasus sebelumnya, ini harus dilakukan melalui opsi tampilan (view options) yang kemudian diberikan ke metode Viewer.View().

Opsi ini disebut sebuah “DefaultFontName”, yaitu properti tipe string yang dideklarasikan dalam kelas abstrak BaseViewOptions, sehingga umum untuk semua opsi rendering: HtmlViewerOptions, PdfViewOptions, PngViewOptions, dan JpgViewOptions .

Ketika opsi ini ditentukan, GroupDocs.Viewer akan menggunakan font tersebut selama proses rendering alih-alih font yang tidak tersedia. Misalnya, jika dokumen menyertakan font yang mengandung karakter non‑Inggris, tentukan nama font default untuk memastikan bahwa GroupDocs.Viewer menggantikan font yang hilang dengan font yang memiliki set karakter yang sama. Tentu saja, font yang namanya ditentukan dalam properti DefaultFontName harus terpasang di sistem operasi tempat GroupDocs.Viewer merender dokumen.

Cuplikan kode berikut menunjukkan cara menetapkan nama font default:

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

using (Viewer viewer = new Viewer("sample.pptx"))
{
    // Create options for rendering HTML document with embedded resources
    HtmlViewOptions viewOptions = HtmlViewOptions.ForEmbeddedResources();
   
    // Specify a default font name is the options
    viewOptions.DefaultFontName = "Courier New";
    
    // Render input PPTX to output HTML
    viewer.View(viewOptions);
}          

Mengecualikan Font untuk HTML

Saat merender dokumen ke format HTML, GroupDocs.Viewer secara default mengekspor semua font yang digunakan ke dalam dokumen HTML. Ini memastikan tampilan yang tepat terlepas dari keberadaan font yang dibutuhkan pada perangkat pemirsa. Font dapat disimpan dalam dokumen HTML hasil sebagai sumber eksternal (HtmlViewOptions.ForExternalResources) atau disematkan langsung ke dalam markup HTML menggunakan skema data URI melalui enkoding base64 (HtmlViewOptions.ForEmbeddedResources). Ekspor font ke format HTML didukung oleh hampir semua format dokumen yang mendukung font: Microsoft Office (kecuali Excel), format OpenDocument, email, PDF, e‑Book, dan sebagainya.

Namun terkadang fitur ini tidak diinginkan. Saat font disertakan, ukuran dokumen HTML yang dihasilkan meningkat secara signifikan. Jadi ketika mesin atau perangkat target tempat dokumen HTML akan ditampilkan sudah memiliki semua font yang digunakan terpasang, browser dapat menggunakan font yang terpasang di sistem.

Untuk memenuhi kebutuhan tersebut, GroupDocs.Viewer memiliki kemampuan untuk mengecualikan font dari dokumen HTML yang dihasilkan, dan hal ini dapat dilakukan dalam dua cara: mengecualikan semua font dan mengecualikan font tertentu saja.

Kedua opsi ini diwakili dalam kelas HtmlViewOptions sebagai properti yang berbeda:

  • ExcludeFonts adalah bendera yang menonaktifkan ekspor semua font yang digunakan ke dokumen HTML yang dihasilkan, bila diaktifkan (true). Secara default opsi ini dinonaktifkan (false).
  • FontsToExclude adalah daftar string, masing‑masing mewakili satu nama font yang harus dikecualikan dari dokumen HTML yang dihasilkan. Secara default daftar ini kosong — tidak ada font yang dikecualikan. Harap dicatat bahwa opsi ini hanya berfungsi jika properti ExcludeFonts dinonaktifkan (false).

Dua cuplikan kode di bawah ini mendemonstrasikan kedua kemungkinan tersebut: yang pertama memperlihatkan penggunaan ExcludeFonts, sedangkan yang kedua — FontsToExclude.

using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

using (Viewer viewer = new Viewer("sample.docx"))
{
    // Create an HTML file.
    var viewOptions = HtmlViewOptions.ForEmbeddedResources();    
    viewOptions.ExcludeFonts = true;
    viewer.View(viewOptions);
}
using GroupDocs.Viewer;
using GroupDocs.Viewer.Options;
// ...

using (Viewer viewer = new Viewer("presentation.pptx"))
{
    // Create an HTML file.
    var viewOptions = HtmlViewOptions.ForEmbeddedResources();    
    viewOptions.FontsToExclude.Add("Times New Roman");// Exclude the Times New Roman font.
    viewOptions.FontsToExclude.Add("Arial");// Exclude the Arial font.
    viewer.View(viewOptions);
}

Kesimpulan

GroupDocs.Viewer terutama berfokus pada rendering dokumen dari berbagai format ke dalam format “yang dapat dilihat” yang umum — HTML, PDF, JPEG, dan PNG. Namun dalam beberapa waktu terakhir kami menambahkan beberapa fitur berguna terkait pemrosesan font yang memungkinkan untuk meninjau dan memeriksa font yang digunakan, menyesuaikan ekspor mereka, serta mengatur substitusi font.

Lihat Juga

Dapatkan Versi Percobaan Gratis

Anda dapat mengunduh versi percobaan gratis GroupDocs.Viewer untuk .NET dari releases.groupdocs.com. Anda juga dapat memperoleh lisensi sementara untuk mencoba semua fitur dan fungsionalitas tanpa batasan dari sini.