gpt4 book ai didi

java - 如何检查字体是否可嵌入

转载 作者:搜寻专家 更新时间:2023-11-01 02:32:31 26 4
gpt4 key购买 nike

我正在使用 itext 创建 PDF 文档。由于许可限制,某些字体无法使用。

...
ExceptionConverter: com.lowagie.text.DocumentException: C:\WINDOWS\Fonts\LucidaSansRegular.ttf cannot be embedded due to licensing restrictions.
at com.lowagie.text.pdf.TrueTypeFontUnicode.<init>(Unknown Source)
at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)
at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)
at com.lowagie.text.pdf.BaseFont.createFont(Unknown Source)
at com.lowagie.text.pdf.DefaultFontMapper.awtToPdf(Unknown Source)
at com.lowagie.text.pdf.PdfGraphics2D.getCachedBaseFont(Unknown Source)
at com.lowagie.text.pdf.PdfGraphics2D.setFont(Unknown Source)
...

我正在考虑检查字体或 PDF 内容来检查这种情况。如何使用 java 或 itext 检查字体是否可嵌入?

最佳答案

据我所知,没有直接的方法来确定是否可以嵌入字体。我进行了快速搜索,我认为除了使用 Erik 在评论中提到的异常捕获方法之外别无他法。

 // 1) have a list of all fonts ArrayList allAvailableFonts;
// 2) second list of fonts that that can be embedded ArrayList embedableFonts;

//Iterate through every available font in allAvailableFonts

for( .... allAvailableFonts ..... )
{
boolean isFontEmbeddable = true;
try
{
// try to embed the font
}
catch( DocumentException de)
{
//this font cannot be embedded
isEmbeddable = false;
}

if( isEmbeddable )
{
// add to list of embeddable fonts
embedableFonts.add ( font );
}
}

您可能会变得非常顽固并执行对 Windows Apis 的 native 调用以获得相同的结果,但我认为对于像这样的简单任务来说它的工作量太大了。

做了一些研究,发现了这个异常是如何被 Java 抛出的

可以在此处找到生成上述异常的代码。 http://kickjava.com/src/com/lowagie/text/pdf/TrueTypeFont.java.htm行号367368

if (!justNames && embedded && os_2.fsType == 2)
throw new DocumentException(fileName + style + " cannot be embedded due to licensing restrictions.");

需要注意的有趣部分是条件 os_2.fsType == 2

os_2 是 WindowsMetrics 的实例,请参见此处的第 174 行 http://kickjava.com/src/com/lowagie/text/pdf/TrueTypeFont.java.htm

在 Google 中搜索 WindowsMetrics,这就是我得到的结果。

这解释了参数 fsType 包含是否可以嵌入字体的信息。 http://www.microsoft.com/typography/otspec/os2ver3.htm#fst

itext 中使用的 WindowsMetrics 的 java 等价物 http://www.docjar.org/docs/api/com/lowagie/text/pdf/TrueTypeFont.WindowsMetrics.html

关于java - 如何检查字体是否可嵌入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5676070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com