Cấu hình thay thế phông chữ trong bản trình bày bằng JavaScript
Tổng quan
Thay thế phông chữ cho phép Aspose.Slides sử dụng một phông chữ có sẵn thay cho phông chữ không thể truy cập khi một bản trình bày được hiển thị hoặc chuyển đổi. Việc thay thế ảnh hưởng đến đầu ra đã được hiển thị; nó không thay đổi phông chữ được gán cho nội dung bản trình bày.
Bạn có thể xác định phông chữ sẽ dùng khi một phông chữ cụ thể không có sẵn và có thể kiểm tra các phép thay thế mà Aspose.Slides sẽ thực hiện trong quá trình hiển thị. Điều này giúp duy trì độ nhất quán của đầu ra trên các môi trường có các phông chữ đã cài đặt khác nhau.
Nếu một phông chữ có sẵn nhưng không có kiểu đậm riêng, xem Handle Fonts Without a Dedicated Bold Typeface. Phần đó giải thích cách raster hoá văn bản bị ảnh hưởng trong quá trình xuất PDF và các hậu quả đối với việc chọn văn bản, tìm kiếm và phóng to/thu nhỏ.
Lấy các phép thay thế phông chữ
Sử dụng phương thức FontsManager.getSubstitutions để xác định những phông chữ nào sẽ được thay thế khi bản trình bày được hiển thị. Phương thức trả về các đối tượng FontSubstitutionInfo mô tả tên phông chữ gốc và phông chữ đã được thay thế.
Ví dụ JavaScript dưới đây liệt kê tất cả các phép thay thế phông chữ cho một bản trình bày:
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("presentation.pptx");
try {
var substitutions = presentation.getFontsManager().getSubstitutions().iterator();
while (substitutions.hasNext()) {
var substitution = substitutions.next();
console.log(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
}
} finally {
presentation.dispose();
}
Lấy các phép thay thế phông chữ cho các slide đã chọn
Sử dụng phương thức overload của FontsManager.getSubstitutions với một mảng các chỉ số slide để chỉ kiểm tra các phép thay thế cần thiết cho việc hiển thị các slide cụ thể. Điều này hữu ích khi bạn đang hiển thị hoặc xuất một phần của bản trình bày, kiểm tra một bản trình bày lớn một cách tăng dần, xác định các slide phụ thuộc vào phông chữ không có sẵn, chuẩn bị một gói phông chữ tối thiểu cho máy chủ hoặc container, hoặc chẩn đoán sự khác nhau trong việc hiển thị mà không xử lý các slide không liên quan.
Overload này yêu cầu một primitive Java int[]. Tạo nó bằng java.newArray("int", [...]); một mảng JavaScript thông thường sẽ được chuyển thành Integer[] và không khớp với overload này.
Mảng chứa các chỉ số slide tính từ 1: 1 đại diện cho slide đầu tiên. Ngược lại, accessor bộ sưu tập Presentation.getSlides sử dụng chỉ số bắt đầu từ 0, vì vậy slide tương tự được truy cập bằng presentation.getSlides().get_Item(0). Hãy nhớ sự khác biệt này khi xây dựng mảng để tránh lỗi off-by-one.
Gọi overload thông qua Presentation.getFontsManager. Nó chỉ trả về các phép thay thế được xác định trong khi hiển thị các slide đã chọn. Mỗi kết quả là một đối tượng FontSubstitutionInfo chứa tên phông chữ gốc và phông chữ đã được thay thế. Kết quả phản ánh môi trường phông chữ hiện tại, các quy tắc fallback đã cấu hình, các quy tắc thay thế lưu trong một FontSubstRuleCollection, và các phông chữ được tải bên ngoài.
Một phép thay thế có thể được yêu cầu bởi nhiều slide đã chọn. Hãy loại bỏ trùng lặp kết quả khi bạn tạo bản kiểm kê phông chữ hoặc báo cáo preflight. Ví dụ dưới đây báo cáo mỗi phép thay thế được trả về và sau đó tạo một danh sách đã sắp xếp các ánh xạ phông chữ duy nhất:
var aspose = aspose || {};
const java = require("java");
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("presentation.pptx");
try {
var selectedSlides = java.newArray("int", [1, 3, 5]);
var substitutions = [];
var substitutionIterator = presentation.getFontsManager().getSubstitutions(selectedSlides).iterator();
while (substitutionIterator.hasNext()) {
substitutions.push(substitutionIterator.next());
}
console.log("Substitutions for the selected slides:");
substitutions.forEach(function (substitution) {
console.log(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
});
var preflightEntries = substitutions.map(function (substitution) {
return substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName();
});
var sortedPreflightEntries = Array.from(new Set(preflightEntries)).sort(function (first, second) {
return first.localeCompare(second, undefined, { sensitivity: "base" });
});
console.log("Deduplicated font preflight report:");
sortedPreflightEntries.forEach(function (entry) {
console.log(entry);
});
} finally {
presentation.dispose();
}
Lớp FontsManager cung cấp cả hai overload. Chọn một trong số chúng tùy theo phạm vi của hoạt động hiển thị:
| Overload | Khi nào sử dụng |
|---|---|
| getSubstitutions không có đối số | Bạn cần các phép thay thế cho toàn bộ bản trình bày. |
getSubstitutions với một int[] Java chứa các chỉ số slide |
Bạn cần các phép thay thế cho một phạm vi đã chọn, kiểm tra tăng dần, hoặc xuất một phần. |
Đặt quy tắc thay thế phông chữ
Để chỉ định phông chữ mà Aspose.Slides nên sử dụng khi một phông chữ nguồn không có sẵn:
- Tải bản trình bày.
- Tạo định nghĩa phông chữ cho phông chữ nguồn và phông chữ thay thế.
- Tạo một FontSubstRule với điều kiện WhenInaccessible.
- Thêm quy tắc vào một FontSubstRuleCollection.
- Gán bộ sưu tập bằng cách sử dụng phương thức FontsManager.setFontSubstRuleList.
- Hiển thị hoặc chuyển đổi bản trình bày.
Ví dụ JavaScript dưới đây thay thế Arial cho SomeRareFont khi SomeRareFont không có sẵn, và sau đó hiển thị slide đầu tiên để xác minh kết quả. Phông chữ thay thế phải có sẵn cho Aspose.Slides.
var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");
var presentation = new aspose.slides.Presentation("presentation.pptx");
try {
var sourceFont = new aspose.slides.FontData("SomeRareFont");
var substituteFont = new aspose.slides.FontData("Arial");
var substitutionRule = new aspose.slides.FontSubstRule(sourceFont, substituteFont, aspose.slides.FontSubstCondition.WhenInaccessible);
var substitutionRules = new aspose.slides.FontSubstRuleCollection();
substitutionRules.add(substitutionRule);
presentation.getFontsManager().setFontSubstRuleList(substitutionRules);
var image = presentation.getSlides().get_Item(0).getImage(1.0, 1.0);
try {
image.save("slide.jpg", aspose.slides.ImageFormat.Jpeg);
} finally {
image.dispose();
}
} finally {
presentation.dispose();
}
Note
Đối với việc thay đổi không điều kiện các phông chữ được sử dụng trong toàn bộ bản trình bày, xem Font Replacement.Hạn chế cho phông chữ công thức Toán học
Quy tắc thay thế phông chữ là một phần của quy trình chọn phông chữ chuẩn được sử dụng trong quá trình hiển thị và chuyển đổi. Chúng hoạt động cho văn bản thường khi Aspose.Slides có thể thay thế một phông chữ không truy cập được bằng phông chữ có sẵn được chỉ định trong quy tắc.
Các công thức Office Math có yêu cầu bổ sung. Nếu một công thức sử dụng Cambria Math, Aspose.Slides có thể cần chính xác phông chữ đó để tính toán và hiển thị bố cục công thức. Một quy tắc thay thế bằng một phông chữ toán khác, chẳng hạn như STIX Two Math, không thể thay thế Cambria Math cho mục đích này, và việc hiển thị vẫn có thể báo cáo rằng Cambria Math là bắt buộc.
Để hiển thị hoặc chuyển đổi bản trình bày như vậy, hãy cung cấp Cambria Math cho Aspose.Slides. Cài đặt nó trong hệ điều hành hoặc tải nó như một phông chữ bên ngoài.
Hạn chế này áp dụng cho việc bố cục công thức. Các quy tắc thay thế được mô tả ở trên vẫn áp dụng cho văn bản thường trong bản trình bày.
FAQ
Sự khác nhau giữa thay thế phông chữ và thay thế (replacement) phông chữ là gì?
Font replacement thay đổi có chủ ý một phông chữ sang phông chữ khác trên toàn bộ bản trình bày. Thay thế phông chữ chỉ chọn một phông chữ cho đầu ra đã hiển thị khi điều kiện đã cấu hình được đáp ứng, chẳng hạn như khi phông chữ gốc không có sẵn.
Khi nào các quy tắc thay thế được áp dụng?
Các quy tắc tham gia vào font selection sequence trong quá trình hiển thị và chuyển đổi. Với WhenInaccessible, một quy tắc chỉ được dùng khi Aspose.Slides không thể truy cập phông chữ nguồn.
Điều gì xảy ra khi một phông chữ thiếu và không có quy tắc thay thế nào được cấu hình?
Aspose.Slides sẽ chọn phông chữ gần nhất có sẵn dựa trên quy trình chọn phông chữ của nó. Kết quả phụ thuộc vào các phông chữ có trong môi trường thời gian chạy.
Tôi có thể tải phông chữ bên ngoài để tránh việc thay thế không?
Có. Bạn có thể load external fonts để Aspose.Slides có thể sử dụng chúng trong quá trình hiển thị và chuyển đổi.
Aspose có phân phối phông chữ cùng với thư viện không?
Không. Bạn chịu trách nhiệm cung cấp phông chữ và tuân thủ giấy phép của chúng.
Kết quả thay thế có thể khác nhau giữa Windows, Linux và macOS không?
Có. Các phông chữ đã cài đặt và vị trí tìm kiếm phông chữ khác nhau tùy theo hệ điều hành, vì vậy một phông chữ có sẵn trên máy này có thể cần được thay thế trên máy khác.
Làm sao để làm cho việc chọn phông chữ nhất quán trong quá trình chuyển đổi hàng loạt?
Sử dụng cùng các tệp phông chữ và phiên bản trên mọi máy hoặc container, load required external fonts, và embed fonts khi giấy phép cho phép. Bạn cũng có thể gọi FontsManager.getSubstitutions trước khi xuất để xác định các phép thay thế không mong muốn.