我想使用Itext / Itextsharp检查PDF中的嵌入式字体
我已经使用Itexthsarp从PDF获取字体,下面的代码获取了PDF的字体集 bool embeededFont = false;
iTextSharpLGPV.PdfReader reader = new iTextSharpLGPV.PdfReader(fileName);
HashSet<String> names = new HashSet<string>();
iTextSharpLGPV.PdfDictionary resources;
for (int p = 1; p <= reader.NumberOfPages; p++)
{
iTextSharpLGPV.PdfDictionary dic = reader.GetPageN(p);
resources = dic.GetAsDict(iTextSharpLGPV.PdfName.Resources);
if (resources != null)
{
//gets fonts dictionary
iTextSharpLGPV.PdfDictionary fonts = resources.GetAsDict(iTextSharpLGPV.PdfName.Font);
if (fonts != null)
{
iTextSharpLGPV.PdfDictionary font;
foreach (iTextSharpLGPV.PdfName key in fonts.Keys)
{
font = fonts.GetAsDict(key);
string name = font.GetAsName(iTextSharpLGPV.PdfName.Basefont).ToString();
//check for prefix subsetted font
if (name.Length > 8 && name.ToCharArray()[7] == '+')
{
name = String.Format("{0} subset ({1})", name.Substring(8), name.Substring(1, 7));
}
else
{
//get type of fully embedded fonts
name = name.Substring(1);
iTextSharpLGPV.PdfDictionary desc = font.GetAsDict(iTextSharpLGPV.PdfName.Fontdescriptor);
if (desc == null)
name += "no font descriptor";
else if (desc.Get(iTextSharpLGPV.PdfName.Fontfile) != null)
name += "(Type1) embedded";
else if (desc.Get(iTextSharpLGPV.PdfName.Fontfile2) != null)
name += "(TrueType) embedded ";
else if (desc.Get(iTextSharpLGPV.PdfName.Fontfile3) != null)
name += name;//("+font.GetASName(PdfName.SUBTYPE).ToString().SubSTring(1)+")embedded';
}
names.Add(name);
}
}
}
}
答案 0 :(得分:0)
正如评论中所阐明的,OP希望了解如何检查字体是否嵌入。
请查看PDF规范中的嵌入式字体程序部分,例如在旧版ISO 32000-1中的9.9节中:
表126总结了取决于字体程序表示形式的将字体程序嵌入PDF文件的方式。密钥应是字体描述符中用于引用字体文件流的名称;子类型应为字体文件流字典中 Subtype 键的值(如果存在)。特定字体程序表示的更多详细信息在下面给出。
表126 –各种字体类型的嵌入式字体组织
键- 子类型- 说明
字体文件- — - 类型1字体程序,格式为 Adobe类型1字体格式中所述的原始(非紧凑型)格式。此项可能出现在 Type1 或 MMType1 字体字典的字体描述符中。
FontFile2 - — - (PDF 1.1)TrueType字体程序,如 TrueType参考手册中所述。此项可能出现在 TrueType 字体字典的字体描述符中,或者(PDF 1.3)出现在 CIDFontType2CIDFont 字典的字体描述符中。
FontFile3 - Type1C - (PDF 1.2)Type 1 –等效于紧凑字体格式(CFF)的字体程序,如Adobe技术注释#5176,紧凑字体格式规范中所述。此项可能出现在 Type1 或 MMType1 字体字典的字体描述符中。
FontFile3 - CIDFontType0C - (PDF 1.3)0型CIDFont程序,以紧凑字体格式(CFF)表示,如Adobe技术注释#5176,紧凑字体格式规范中所述。此项可能出现在 CIDFontType0 CIDFont词典的字体描述符中。
FontFile3 - OpenType - (PDF 1.6)OpenType®字体程序,如 OpenType Specification v.1.4 中所述(请参见参考书目)。 OpenType是TrueType的扩展,它允许包含使用紧凑字体格式(CFF)的字体程序。 ...
因此,您应该在相应字体的 FontDescriptor 词典中查找这些键,即从本质上讲,您在代码中使用desc
所做的操作。