Cambia il Font solo per i caratteri Unicode specifici durante il salvataggio in PDF
Alcuni caratteri Unicode non possono essere visualizzati dal font specificato dall’utente. Uno di questi caratteri Unicode è Trattino Non-Rotoso (U+2011) e il suo numero Unicode è 8209. Questo carattere non può essere visualizzato con Times New Roman, ma può essere visualizzato con altri font come Arial Unicode MS.
Quando un tale carattere compare all’interno di una parola o di una frase che è in un font specifico come Times New Roman, Aspose.Cells cambia il font dell’intera parola o frase in un font che può visualizzare questo carattere come Arial Unicode to MS.
Tuttavia, questo comportamento è indesiderato per alcuni utenti e vogliono solo che il font del carattere specifico venga cambiato invece di cambiare il font dell’intera parola o frase.
Per affrontare questo problema, Aspose.Cells fornisce la proprietà PdfSaveOptions.setFontSubstitutionCharGranularity() che dovrebbe essere impostata su true in modo che venga cambiato solo il font del carattere specifico che non è visualizzabile e il font per il resto della parola o della frase rimanga lo stesso.
Esempio
La schermata seguente confronta i due PDF di output generati dal codice di esempio qui sotto. Uno è stato generato senza impostare la proprietà PdfSaveOptions.setFontSubstitutionCharGranularity() e l’altro è stato generato dopo aver impostato la proprietà PdfSaveOptions.setFontSubstitutionCharGranularity() su true. Come si può vedere nel primo PDF, il font dell’intera frase è cambiato da Times New Roman a Arial Unicode MS a causa del Trattino Non-Rotoso. Mentre nel secondo PDF, solo il font del Trattino Non-Rotoso è cambiato.
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
// The path to the documents directory. | |
String dataDir = Utils.getDataDir(ChangeFontonspecificUnicodecharacters.class); | |
// Create workbook object | |
Workbook workbook = new Workbook(); | |
// Access the first worksheet | |
Worksheet worksheet = workbook.getWorksheets().get(0); | |
// Access cells | |
Cell cell1 = worksheet.getCells().get("A1"); | |
Cell cell2 = worksheet.getCells().get("B1"); | |
// Set the styles of both cells to Times New Roman | |
Style style = cell1.getStyle(); | |
style.getFont().setName("Times New Roman"); | |
cell1.setStyle(style); | |
cell2.setStyle(style); | |
// Put the values inside the cell | |
cell1.putValue("Hello without Non-Breaking Hyphen"); | |
cell2.putValue("Hello" + (char) (8209) + " with Non-Breaking Hyphen"); | |
// Autofit the columns | |
worksheet.autoFitColumns(); | |
// Save to Pdf without setting PdfSaveOptions.IsFontSubstitutionCharGranularity | |
workbook.save(dataDir + "output.pdf"); | |
// Save to Pdf after setting PdfSaveOptions.IsFontSubstitutionCharGranularity to true | |
PdfSaveOptions opts = new PdfSaveOptions(); | |
opts.setFontSubstitutionCharGranularity(true); | |
workbook.save(dataDir + "output2.pdf", opts); | |