1

こんにちは、PDFBOXを使用して、PDFへのフォントの完全な埋め込みとサブセットの埋め込みを確認したいと思います。次のロジックを使用して確認してみました。


private boolean IsEmbedded(Map<String, PDFont> fontsMap, Set<String> keys) {
    for(String key:keys) {
        PDFont font = fontsMap.get(key);
        PDFontDescriptor  fontDescriptor = font.getFontDescriptor();
        if(null != fontDescriptor && fontDescriptor instanceof PDFontDescriptorDictionary){
            PDFontDescriptorDictionary fontDescriptorDictionary = (PDFontDescriptorDictionary)fontDescriptor;
            if(null == fontDescriptorDictionary.getFontFile() && null == fontDescriptorDictionary.getFontFile2() && null == fontDescriptorDictionary.getFontFile3())
                return false;
        }
    }
    return true;
}

しかし、完全埋め込みとサブセット埋め込みを区別する方法を見つけることができなかったようです。誰か答えを教えてください。

4

1 に答える 1

1

フォントサブセットに関するPDF 仕様ISO 32000-1を引用するには(セクション 9.6.4):

PDF ドキュメントには、Type 1 および TrueType フォントのサブセットが含まれる場合があります。フォント サブセットを記述するフォントとフォント記述子は、通常のフォントとは少し異なります。これらの違いにより、準拠するリーダーはフォント サブセットを認識し、同じフォントの異なるサブセットを含むドキュメントをマージできます。(フォント記述子の詳細は、9.8「フォント記述子」を参照してください。)

フォント サブセットの場合、フォントの PostScript 名 (フォントのBaseFontエントリとフォント記述子のFontNameエントリの値) は、タグで始まり、その後にプラス記号 (+) が続きます。タグは正確に 6 文字の大文字で構成されます。文字の選択は任意ですが、同じ PDF ファイル内の異なるサブセットには異なるタグが必要です。

例 EOODIA+Poetica は、Type 1 フォントである Poetica® のサブセットの名前です。

したがって、この要件 (「する必要がある」ため、実際には要件です) に準拠する PDF では、サブセット フォントを名前で認識できます。

ただし、PDF 以外では、選択したグリフのみを含めることで、別のフォントからフォントを派生させることができることに注意してください。これは基本的にサブセット フォントを作成しますが、それを使用する PDF 作成ソフトウェアはその事実に気付かず、完全に埋め込まれたフォントとして名前を付ける場合があります。したがって、本質的には、確実に知ることはできません。

于 2014-01-28T08:06:51.000 に答える