У нас есть приложение ASP. Net MVC, которое мы локализуем на несколько языков. Все языки отображаются прямо в интерфейсе, включая китайский. При создании PDF-файла с использованием ExpertPDF, китайский PDF-файл в порядке, если ОС, выполняющая роль сервера, не на китайском языке (мы пробовали Engli sh, французский, голландский, Poli sh, Spani sh, Немецкий). Однако после изменения локализации ОС (winsystemlocale) на zh-CN генерация PDF как-то ломается. НО, только разрывы генерации PDF, пользовательский интерфейс отображается просто отлично.
Мы не делаем ничего особенного с фактическим содержимым сгенерированного PDF, когда мы обрабатываем его с ExpertPDF, мы буквально просто передаем html существующего экрана с некоторыми изменениями макета.
Мы поцарапали наши головы этим. Любая помощь приветствуется. Спасибо.
РЕДАКТИРОВАТЬ После загрузки сломанного и правильного PDF мы обнаружили, что каким-то образом встроенные шрифты меняются в зависимости от winsystemlocale. Кажется, что библиотека не может найти шрифт SimSun, когда winsystemlocale находится в zh-CN.
Дальнейшие исследования также показывают, что по какой-то причине NET больше не может предоставить правильный резервный шрифт для PDF, как только winsystemlocale находится в ZH-CN. Мы знаем, что отображаемое имя для шрифта SimSun изменяется, но его можно инициализировать, используя тот же текст.
Вот код, который мы используем для создания PDF
docTitle = string.IsNullOrEmpty(docTitle) ? "DXT Document" : docTitle;
byte[] pdfBytes = null;
PdfConverter converter = CreateConverter();
converter.PdfDocumentInfo.Title = docTitle;
HtmlToPdfArea header = new HtmlToPdfArea(headerHtml, baseURL);
HtmlToPdfArea footer = new HtmlToPdfArea(footerHtml, baseURL);
header.AddPadding = true;
footer.AddPadding = true;
header.FitHeight = true;
header.FitWidth = true;
footer.FitHeight = true;
footer.FitWidth = true;
converter.PdfHeaderOptions.AddHtmlToPdfArea(header);
converter.PdfFooterOptions.AddHtmlToPdfArea(footer);
converter.PdfDocumentOptions.PdfPageOrientation = isLandscape ? PDFPageOrientation.Landscape : PDFPageOrientation.Portrait;
converter.PdfDocumentOptions.FitWidth = true;
converter.PdfDocumentOptions.EmbedFonts = true;
converter.PageWidth = virtualViewWidth;
converter.PdfHeaderOptions.HeaderHeight = headerHeight;
var translated = LocalizationService.GetTranslation<Resources.Apheresis.ProcedureRecords>("Of");
converter.PdfFooterOptions.TextArea = new TextArea(pageNumberXPos, pageNumberYPos, $"&p; {translated} &P;",
new System.Drawing.Font(new System.Drawing.FontFamily("Arial"), 8, System.Drawing.GraphicsUnit.Point));
Document doc = converter.GetPdfDocumentObjectFromHtmlString(contentHtml, baseURL);
doc.OpenAction.Action = new ExpertPdf.HtmlToPdf.PdfDocument.PdfActionJavaScript("print();");
pdfBytes = doc.Save();
Вот screen
Вот сгенерированный PDF