Aspose.Pdf 建立文件無法調整文字的字型

您好,
透過new Aspose.Pdf.Document()來建立Pdf檔案時,無法設定文件中文字的字型。
不管是設定 Document 的 PageInfo.DefaultTextState , Page 的 PageInfo.DefaultTextStat 還是 TextFragment 的 TextState.Font
最後查看文件內的字型都只有 MSGothicArial
範例程式如下,

var w1 = "𠊎";
var w2 = "𪜶";
var w3 = "𫣆";
var p1 = "✔️";
var p2 = "✅";
var p3 = "☑️";
var p4 = "💩";
var content = $"w1: {w1}, w2: {w2}, w3: {w3}; p1: {p1}, p2: {p2}, p3: {p3}, p4: {p4}.";
string outputPath = "./test.pdf";
var font = FontRepository.FindFont("Microsoft JhengHei");
var document = new Aspose.Pdf.Document();
var newTextState = new TextState();
newTextState.Font = font;
document.PageInfo.DefaultTextState = newTextState;
Page page = document.Pages.Add();
page.PageInfo.DefaultTextState = newTextState;
var text = new Aspose.Pdf.Text.TextFragment(content);
text.TextState.Font = font;
page.Paragraphs.Add(text);
document.Save(outputPath);
var doc = new Aspose.Pdf.Document(outputPath);
var fonts = doc.FontUtilities.GetAllFonts();
foreach(var f in fonts)
{
	Console.WriteLine(f.FontName);
}

請問有方法設定文字的字型嗎?
謝謝您

@rainmaker_ho

您能否分享示例字体文件和生成的输出 PDF 以供我们参考?我们将在我们的环境中测试该场景并相应地解决它。

您好,
產生出來的pdf,如附件
test.pdf (195.0 KB)
會問這個問題是因為 𠊎, 𪜶, 𫣆 等字,在某些字型中才有,所以才想在建立pdf時,
更換預設的字型。

@rainmaker_ho

您是否尝试过下面的代码片段来设置输出 PDF 的默认字体?请尝试一下,如果仍然产生问题,请告诉我们。

PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
pdfSaveOptions.DefaultFontName = "Arial";

您好,
原本產生的 pdf 就已包含 Arial字型,
pdfSaveOptions加到document.Save(outputPath, pdfSaveOptions);之中,
產生出的 pdf 檔案內含字型還是為 MSGothicArial
程式碼如下,

var w1 = "𠊎";
var w2 = "𪜶";
var w3 = "𫣆";
var p1 = "✔️";
var p2 = "✅";
var p3 = "☑️";
var p4 = "💩";
var content = $"w1: {w1}, w2: {w2}, w3: {w3}; p1: {p1}, p2: {p2}, p3: {p3}, p4: {p4}.";
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
pdfSaveOptions.DefaultFontName = "Arial";
string outputPath = "./test.pdf";
var font = FontRepository.FindFont("Arial");
var document = new Aspose.Pdf.Document();
var newTextState = new TextState();
newTextState.Font = font;
document.PageInfo.DefaultTextState = newTextState;
Page page = document.Pages.Add();
page.PageInfo.DefaultTextState = newTextState;
var text = new Aspose.Pdf.Text.TextFragment(content);
text.TextState.Font = font;
page.Paragraphs.Add(text);
document.Save(outputPath, pdfSaveOptions);
var doc = new Aspose.Pdf.Document(outputPath);
var fonts = doc.FontUtilities.GetAllFonts();
foreach(var f in fonts)
{
	Console.WriteLine(f.FontName);
}

產出的檔案為附件,
test.pdf (195.0 KB)

因為 MSGothicArial 字型並不包含那些字,所以都變成了空白框,
testpdf.png (3.0 KB)

@rainmaker_ho

根据我们对该场景的理解,您尝试为文本片段设置“Microsoft JhengHei”字体,但在输出 PDF 文件中,嵌入的字体仅为 MSGothic。请确认我们是否正确理解了该问题,以便我们进一步处理。对于给您带来的麻烦,我们深表歉意。

是的,不管預設給什麼字型,輸出的pdf檔案只包含 MSGothicArial 這2個字型。
另外請教一下,在網頁中可以設定多個字型,網頁中的文字可以一併呈現 𠊎𫣆✅☑️這些內容,在產生 pdf 時,也可以這麼方便嗎?

@rainmaker_ho

您的意思是像网页一样,您想为PDF中的每个文本片段设置不同的字体吗?

網頁中,會設定多個字型,例如,

@font-face {
  font-family: EUDC;
  src:url('./fonts/RM.woff?v=1.0.0');
  src:url('./fonts/RM.woff?v=1.0.0') format('woff'),
	   url('./fonts/RM.ttf?v=1.0.0') format('truetype');
}

body {
	color: #333;
	margin: 0;
	padding: 0;
	background-color: #eeeeee;
	font-family:  "Microsoft JhengHei", "新細明體", "細明體", Arial, "EUDC";
	font-size: 13px;
	line-height: 150%;
}

所以當某個字不在Microsoft JhengHei之中,就會使用可以顯示的字型,例如 使用者自造的字,就會使用 EUDC 來呈現

@rainmaker_ho

我们已在内部问题跟踪系统中打开以下新票证,并将根据 Free Support Policies 中提到的条款提供修复。

问题 ID:PDFNET-57418

如果您需要优先支持,以及直接联系我们的付费支持管理团队,您可以获取 Paid Support Services