تغيير الخط فقط في الأحرف اليونيكود المحددة أثناء الحفظ إلى PDF
بعض الأحرف اليونيكود غير قابلة للعرض بواسطة الخط المحدد من قبل المستخدم. أحد الأحرف اليونيكود هو الشرطة الغير قابلة للانفصال (U+2011) ورقمه اليونيكود هو 8209. هذا الحرف لا يمكن عرضه باستخدام الخط تايمز نيو رومان, ولكن يمكن عرضه بالخطوط الأخرى مثل أريال يونيكود ام اس.
عند حدوث هذا الحرف داخل كلمة أو جملة معينة في خطوط معينة مثل تايمز نيو رومان, فإن Aspose.Cells يغير خط الكلمة أو الجملة بأكملها إلى الخط الذي يمكن عرض هذا الحرف مثل أريال يونيكود ام اس.
ومع ذلك، هذا سلوك غير مرغوب فيه بالنسبة لبعض المستخدمين ويرغبون في تغيير خط الحرف المحدد فقط بدلاً من تغيير خط الكلمة أو الجملة بأكملها.
للتعامل مع هذه المشكلة، يوفر Aspose.Cells خاصية PdfSaveOptions.setFontSubstitutionCharGranularity() يجب ضبطها على صحيح حتى يتم تغيير خط الحرف المحدد الذي لا يمكن عرضه فقط ويبقى خط بقية الكلمة أو الجملة على حاله.
مثال
يقارن اللقطة الملتقطة التالية بين اثنين من ملفات PDF الناتجة المولَّدة بواسطة الرمز البرمجي عينة أدناه. تم إنشاء أحدهما دون ضبط PdfSaveOptions.setFontSubstitutionCharGranularity() والآخر تم إنشاؤه بعد ضبط خاصية PdfSaveOptions.setFontSubstitutionCharGranularity() على صحيح. كما يمكنك رؤية في الملف الأول من عينات 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); | |