这两种字体有什么不同?

问题描述 投票:0回答:1

当我在两个pdf文件中打印TextRenderInfo.getFont().getPostscriptFontName()时,它将打印AAAAAD+SourceHanSansCN-NormalBIISMY+SourceHanSansCN-Normal.

我知道SourceHanSansCN-Normal是FontName-FontScript的格式,但是AAAAAD是什么?不像字体系列。

示例代码:

public class CheckPdfAllFontTest implements TextExtractionStrategy {

    public static final String SRC = "ownTestFile.pdf";

    @Override
    public String getResultantText() {
        return null;
    }

    @Override
    public void beginTextBlock() {

    }

    @Override
    public void renderText(TextRenderInfo textRenderInfo) {
        String x = textRenderInfo.getFont().getPostscriptFontName();
        String text = textRenderInfo.getText();
        System.out.println(text + "=====" + x);
    }

    @Override
    public void endTextBlock() {

    }

    @Override
    public void renderImage(ImageRenderInfo imageRenderInfo) {

    }

    public static void main(String[] args) throws IOException, DocumentException {
        new CheckPdfAllFontTest().parse(SRC);
    }

    public void parse(String filename) throws IOException, IOException {
        int pageNumber = 1;
        PdfReader reader = new PdfReader(filename);
        System.out.println(PdfTextExtractor.getTextFromPage(reader, pageNumber, new CheckPdfAllFontTest()));
        reader.close();
    }
}

itext pdf版:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.8</version>
</dependency>

这两个 pdf 是从 Power Point 文件导出的,带有“嵌入字体”和“不嵌入字体”设置。

  • “嵌入字体”pdf文件中的“AAAAAD+SourceHanSansCN-Normal”
  • “BIISMY+SourceHanSansCN-Normal”来自“未嵌入字体”pdf文件。

我正在收集pdf中使用的字体,但我发现有这种格式的字体。我不知道'+'之前是什么。它的定义是什么?

java fonts itext
1个回答
1
投票

根据PDF规范:

9.9.2 字体子集

PDF 文档可能包含 SubtypeType1TrueTypeOpenType 的 PDF 字体子集。描述字体子集的字体和字体描述符与普通字体略有不同。这些差异允许 PDF 处理器识别字体子集并合并包含相同字体的不同子集的文档。 (有关字体描述符的更多信息,请参阅 9.8,“字体描述符”。)

对于字体子集,字体的 PostScript 名称,即字体的 BaseFont 条目和字体描述符的 FontName 条目的值,应以标记开头,后跟加号 (+),然后是从中创建子集的字体的 PostScript 名称。标签应由六个大写字母组成;字母的选择是任意的,但同一个PDF文件中相同字体的不同子集应该有不同的标签。字形名称 .notdef 应在字体子集中定义。

注意建议 PDF 处理器将多个子集字体视为完全独立的实体,即使它们看起来是从相同的原始字体创建的。

EXAMPLE EOODIA+Poetica 是 Type 1 字体 Poetica® 子集的名称。

(ISO 32000-2)

因此,AAAAAD+SourceHanSansCN-Normal 和 BIISMY+SourceHanSansCN-Normal 很可能是同一源字体的不同子集。

© www.soinside.com 2019 - 2024. All rights reserved.