Panoramica
Molti formati di documento sono strettamente legati ai caratteri. Per esempio, quando un utente aggiunge del testo a un documento DOCX, quel testo ha sempre un carattere definito. Alcuni formati di documento solitamente memorizzano i dati del carattere incorporati nel file stesso, come il PDF. Altri, invece, come i formati della famiglia Office, di solito si affidano ai caratteri installati nel sistema operativo.
Esistono anche numerosi formati di carattere. Per esempio, la maggior parte dei caratteri installati è presentata nei formati TTF (TrueType) e OTF (OpenType). I documenti Office Open XML lavorano anche con il formato EOT (Embedded OpenType). Sul web, invece, i formati più usati sono WOFF e WOFF2.
Indice dei contenuti
- Panoramica
- Ottenere tutti i caratteri usati
- Elaborare i caratteri mancanti
- Specificare il carattere mancante
- Sostituire il carattere mancante
- Escludere i caratteri per HTML
- Conclusione
- Vedi anche
- Ottieni una prova gratuita
Ottenere tutti i caratteri usati
La funzionalità più utile nel contesto dei caratteri è elencarli e restituirli. GroupDocs.Viewer fornisce un metodo speciale GetAllFonts() — quando il documento è caricato in un’istanza della classe Viewer, chiamate questo metodo per ottenere un elenco di tutti i caratteri usati in quel documento. Nell’elenco restituito ogni carattere è rappresentato come un’istanza del tipo che implementa l’interfaccia IFontInfo. Questa interfaccia contiene le proprietà comuni a tutti i possibili caratteri: nome della famiglia, stile, formato e contenuto binario.
Famiglie specifiche di formati, come WordProcessing, Spreadsheet, Presentation e PDF, hanno implementazioni specializzate di IFontInfo; queste implementazioni forniscono dati aggiuntivi specifici per la particolare famiglia di formati. Per esempio, i tipi WordProcessingFontInfo, PresentationFontInfo e PdfFontInfo contengono la proprietà booleana IsEmbedded — un flag che indica dove è memorizzato quel carattere (incorporato nel corpo del documento caricato o installato nel sistema operativo). Il tipo SpreadsheetFontInfo contiene molti dati specifici per i fogli di calcolo: colore, se è sottolineato o barrato. WordProcessingFontInfo può contenere il nome alternativo della famiglia. E così via.
Un breve esempio è il seguente:
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);
}
}
Si noti che l’estrazione dei caratteri è supportata solo per le famiglie di formati WordProcessing, Spreadsheet, Presentation e PDF; per tutti gli altri formati di documento il metodo GetAllFonts() restituisce un array vuoto.
Elaborare i caratteri mancanti
La situazione in cui un documento è stato creato sulla macchina dell’autore e utilizza un carattere “AAA”, per poi essere elaborato con GroupDocs.Viewer su una macchina del client dove il carattere “AAA” è assente, è tipica. In tal caso GroupDocs.Viewer tenta di sostituire questo carattere usando regole complesse di sostituzione: analizza i metadati del documento, i nomi alternativi del carattere mancante, le impostazioni del documento, le impostazioni del sistema operativo, l’elenco di tutti i caratteri disponibili installati nel sistema e così via. Infine, se per qualche motivo il sistema operativo è “pulito”, cioè non ha alcun carattere installato, GroupDocs.Viewer sostituirà il carattere mancante con quello incorporato nell’assembly (DLL) di GroupDocs.Viewer; questo carattere funge da “ultima risorsa” nel caso in cui non siano disponibili altri caratteri. Per esempio, per i formati della famiglia WordProcessing, GroupDocs.Viewer memorizza internamente il carattere gratuito “Fanwood”.
Al momento GroupDocs.Viewer esegue l’operazione di sostituzione dei caratteri in modo silenzioso durante il rendering del documento (quando viene invocato il metodo Viewer.View()) — non vi sono messaggi o eventi che indichino l’attivazione del meccanismo di sostituzione, quale carattere è mancante e con quale viene sostituito, né per quale documento specifico. Questa funzionalità è difficile da implementare perché è poco chiaro quale notifica debba essere emessa, in che forma e come il client possa utilizzarla.
Tuttavia, GroupDocs.Viewer offre due modalità per risolvere la situazione: specificare manualmente il carattere mancante e sostituire manualmente il carattere mancante.
Specificare il carattere mancante
Quando l’utente sa inizialmente che un documento utilizza il carattere “AAA”, e sa anche che tale carattere “AAA” non è installato sulla macchina di destinazione dove il documento deve essere renderizzato, e dispone del contenuto binario di quel carattere “AAA”, può specificarlo prima di chiamare il metodo Viewer.View().
Per specificare uno o più caratteri personalizzati, non installati nel sistema operativo di destinazione, l’utente deve aggiungere sorgenti di caratteri personalizzate. Una sorgente di caratteri è in realtà una cartella in cui sono presenti uno o più caratteri. È rappresentata dalla classe FolderFontSource. La classe FontSettings dispone del metodo SetFontSources() per aggiungere le sorgenti di caratteri a GroupDocs.Viewer.
Il codice seguente dimostra il procedimento. Supponiamo che il documento “sample.docx” utilizzi un carattere raro “AAA.ttf”, non installato sul sistema operativo di destinazione. L’utente copia il file “AAA.ttf” nella cartella "C:\custom_fonts" e crea un’istanza della classe FolderFontSource che punta a tale cartella. Tale istanza viene poi passata alla classe statica FontSettings, e infine il file “sample.docx” viene renderizzato in formato HTML. Come risultato, il carattere “AAA” verrà utilizzato nel documento HTML di 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);
}
Sostituire il carattere mancante
Quando l’utente sa inizialmente che un documento utilizza il carattere “AAA”, e sa anche che tale carattere “AAA” non è installato sulla macchina di destinazione, ma non ha accesso al contenuto binario di quel carattere, può specificare un altro carattere “BBB”, da usare al posto del “AAA” mancante. Diversamente dal caso precedente, ciò deve essere impostato tramite le opzioni di visualizzazione, che vengono poi passate al metodo Viewer.View().
Questa opzione è chiamata “DefaultFontName”, è una proprietà di tipo string, dichiarata nella classe astratta BaseViewOptions, quindi è comune a tutte le opzioni di rendering: HtmlViewerOptions, PdfViewOptions, PngViewOptions, e JpgViewOptions.
Quando questa opzione è specificata, GroupDocs.Viewer utilizza il carattere indicato durante il rendering al posto di qualsiasi carattere non disponibile. Per esempio, se il documento contiene un carattere con caratteri non inglesi, impostare il nome del carattere predefinito assicura che GroupDocs.Viewer sostituisca qualsiasi carattere mancante con uno che possieda lo stesso set di caratteri. Naturalmente, il carattere il cui nome è specificato nella proprietà DefaultFontName deve essere installato sul sistema operativo su cui GroupDocs.Viewer esegue il rendering del documento.
Il frammento di codice seguente mostra come impostare il nome del carattere predefinito:
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);
}
Escludere i caratteri per HTML
Durante il rendering dei documenti in formato HTML, GroupDocs.Viewer per impostazione predefinita esporta tutti i caratteri usati nel documento HTML. Ciò garantisce una visualizzazione corretta indipendentemente dalla presenza dei caratteri richiesti sul dispositivo di visualizzazione. I caratteri possono essere memorizzati nel documento HTML risultante come risorse esterne (HtmlViewOptions.ForExternalResources) oppure incorporati direttamente nel markup HTML tramite lo schema data URI usando la codifica base64 (HtmlViewOptions.ForEmbeddedResources). L’esportazione dei caratteri in formato HTML è supportata quasi da tutti i formati di documento che supportano i caratteri: Microsoft Office (eccetto Excel), formati OpenDocument, email, PDF, eBook e così via.
Tuttavia, a volte questa funzionalità è indesiderata. Quando i caratteri sono inclusi, aumentano notevolmente le dimensioni del documento HTML generato. Quindi, se la macchina o il dispositivo di destinazione, dove il documento HTML verrà visualizzato, dispone già di tutti i caratteri necessari installati, il browser può utilizzare tali caratteri di sistema.
Per soddisfare queste esigenze GroupDocs.Viewer offre la possibilità di escludere i caratteri dal documento HTML prodotto, operazione che può essere effettuata in due modi: escludere tutti i caratteri oppure escludere solo caratteri specifici.
Entrambe le opzioni sono rappresentate nella classe HtmlViewOptions come proprietà diverse:
ExcludeFontsè un flag che disabilita l’esportazione di tutti i caratteri usati nel documento HTML prodotto, quando è impostato atrue. Per impostazione predefinita questa opzione è disabilitata (false).FontsToExcludeè una lista di stringhe, ciascuna rappresentante il nome di un carattere da escludere dal documento HTML prodotto. Per impostazione predefinita la lista è vuota — nessun carattere è escluso. Si noti che questa opzione funziona solo se la proprietàExcludeFontsè disabilitata (false).
I due frammenti di codice seguenti dimostrano entrambe le possibilità: il primo mostra l’uso di ExcludeFonts, il secondo — 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);
}
Conclusione
GroupDocs.Viewer è principalmente incentrato sul rendering di documenti di diversi formati nei più diffusi formati “visualizzabili” — HTML, PDF, JPEG e PNG. Nell’ultimo periodo, però, abbiamo aggiunto diverse funzionalità utili relative all’elaborazione dei caratteri, che consentono di esaminare i caratteri usati, regolarne l’esportazione e gestire la sostituzione dei caratteri.
Vedi anche
- Ottenere tutti i caratteri usati nel documento caricato
- Impostare caratteri personalizzati
- Sostituire il carattere mancante
- Escludere i caratteri durante il rendering in HTML
Ottieni una prova gratuita
È possibile scaricare una versione di prova gratuita di GroupDocs.Viewer per .NET da releases.groupdocs.com. È inoltre possibile ottenere una licenza temporanea per provare tutte le funzionalità senza restrizioni da qui.