使用Aspose.pdf 生成PDF

以下面的code生成的pdf,並未能正常顯示造字,在pdf的內容中,也找不到有embed font,
請問應該如何操作?
謝謝。
image.png (22.4 KB)
image.png (14.0 KB)

	com.aspose.pdf.Document doc = new com.aspose.pdf.Document();
    Font myFont = FontRepository.openFont("A.ttf");
    myFont.setEmbedded(true);
    TextFragment t =new TextFragment("包含造字的String");
    t.getTextState().setFont(myFont);
    Page page = doc.getPages().add();
	page.getParagraphs().add(t);
	doc.save("aspose_out.pdf");

@ikieong

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

aspose_out.pdf (196.5 KB)

由於ttf有版權問題,所以未能分享

可以9F9C 作測試
https://www.babelstone.co.uk/Fonts/BSH_IVS.html

The font can be download here BabelStoneHan.ttf [48.4MB]
https://www.babelstone.co.uk/Fonts/Download/BabelStoneHan.ttf

@ikieong

请检查使用以下代码在我们的环境中生成的附加输出。我们没有注意到其中有任何问题。另外,您能否确保您使用的是有效的或30 天免费临时许可证?如果问题仍然存在,请告知我们。

Document document = new Document();
Page page = document.getPages().add();
TextFragment textFragment = new TextFragment("");

TextSegment segment = new TextSegment("包含造字的String");
TextState textState = new TextState();

textState.setFontSize(12.0f);
textState.setFont(FontRepository.openFont(dataDir + "BabelStoneHan.ttf"));
textState.getFont().setEmbedded(true);
textState.getFont().setSubset(true);

segment.setTextState(textState);
textFragment.getSegments().add(segment);

page.getParagraphs().add(textFragment);
document.save(dataDir + "output.pdf");

output.pdf (571.5 KB)

@asad.ali
我幾天前已經向貴公司申請30天許可證,但是沒有收到任何回覆。或者你可以幫我跟進一下嗎?

我使用了你的CODE, 如果用這個 BabelStoneHan.ttf 是可以生成的。
但我使用我們內部的TTF ( ABC.TTF) , 就未能成功。 Aspose 會找一個MSGothic的font 去embedfontBabelStoneHan.pdf (734.6 KB)
fontABC.pdf (195.8 KB)
未知是什麼原因?

com.aspose.pdf.Document document = new com.aspose.pdf.Document();
Page page = document.getPages().add();
TextFragment textFragment = new TextFragment("");
TextSegment segment = new TextSegment(item.getGoods());
TextState textState = new TextState();
textState.setFontSize(12.0f);
textState.setFont(FontRepository.openFont(“BabelStoneHan.ttf”));
// textState.setFont(FontRepository.openFont(“ABC.ttf”));
textState.getFont().setEmbedded(true);
textState.getFont().setSubset(true);
segment.setTextState(textState);
textFragment.getSegments().add(segment);
page.getParagraphs().add(textFragment);
document.save(“output.pdf”);

@ikieong

有关临时许可证,请在我们的购买论坛 中创建帖子,以便您能够得到相应的帮助并提供必要的信息。

此外,您的系统中是否安装了ABC.TTF?请注意,您正在使用的字体需要安装并存在于操作系统的字体目录中。如果API无法找到指定的字体,它会用系统中找到的替代字体来替换它。

如果您确定系统中安装了 ABC.TTF,但 API 仍未使用它,您能否与我们共享该字体文件,以便我们也可以在我们的环境中测试该场景并相应地解决该问题?

對不起,ABC.TTF因版權問題未能共享,我的系統中有安裝ABC.TTF。
另外我再次發現, 如果只是在ABC.TTF中普通的造字,是可以顯示的,也可以embed.
但如果在segment中的造字,有變異字-IVS (由2個bytes組成的) ,則未能成功顯示和embed。

我嘗試spilt開一個字一個segment,如果沒有IVS的字時,會無問題,但當遇到一個IVS後,該字無法顯示之外,在後面的字全部也未能使用ABC.TTF
output.pdf (360.2 KB)

	com.aspose.pdf.Document document = new com.aspose.pdf.Document();
	Page page = document.getPages().add();
	TextFragment textFragment = new TextFragment("");
	TextState textState = new TextState();
	textState.setFontSize(12.0f);
	textState.setFont(FontRepository.openFont("ABC.ttf"));
	textState.getFont().setEmbedded(true);
	textState.getFont().setSubset(true);
	String[] s =item.getGoods().split("(?<=\\G.{" + 1 + "})");
	for(int i=0;i<s.length;i++) {
		TextSegment segment = new TextSegment(s[i]);
		segment.setTextState(textState);
		textFragment.getSegments().add(segment);
	}
	page.getParagraphs().add(textFragment);
	document.save("output.pdf");

@ikieong

如果您无法共享字体文件,您能否共享我们可以获得该字体并购买其许可证的在线资源?为了测试和调查这种情况,我们需要此信息。

我找到這個font

@ikieong

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

问题 ID:PDFJAVA-42964

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

你好,想了解現時ASPOSE.PDF 是否支持IVS 的造字?

@ikieong

我们担心由于队列中的其他问题,较早记录的票证尚未得到解决。但是,一旦我们在票证解决方面取得一些进展,我们一定会立即通知您。请耐心等待并给我们一些时间。

对此造成的不便,我们表示歉意。