Изменение шрифта только для определенных символов Unicode при сохранении в PDF
Некоторые символы Unicode не могут быть отображены заданным пользователем шрифтом. Один из таких символов Unicode - это Неразрывный дефис (U+2011) и его Unicode-номер 8209. Этот символ не может быть отображен шрифтом Times New Roman, но его можно отобразить другими шрифтами, такими как Arial Unicode MS.
Когда такой символ встречается внутри слова или предложения, который находится в определенном шрифте, например Times New Roman, то Aspose.Cells изменяет шрифт всего слова или предложения на шрифт, который может отобразить этот символ, например Arial Unicode MS.
Однако это нежелательное поведение для некоторых пользователей и они хотят, чтобы шрифт только конкретного символа был изменен, а не весь шрифт слова или предложения.
Чтобы решить эту проблему, Aspose.Cells предоставляет свойство PdfSaveOptions.setFontSubstitutionCharGranularity(), которое должно быть установлено на true, чтобы изменить только шрифт конкретного символа, который не отображается, остальной текст оставался с тем же шрифтом.
Пример
Следующий снимок экрана сравнивает два сгенерированных PDF, сгенерированных образцовым кодом ниже. Один был сгенерирован без установки свойства PdfSaveOptions.setFontSubstitutionCharGranularity(), а другой был сгенерирован после установки свойства PdfSaveOptions.setFontSubstitutionCharGranularity() в true. Как видно на первом PDF, шрифт всего предложения изменился с Times New Roman на Arial Unicode MS из-за Неразрывного дефиса. В то время как на втором PDF, изменен только шрифт неразрывного дефиса.
// 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); | |