如何获取一个PDF文件中使用的字体列表并将其复制到另一个PDF文件?

时间:2018-08-23 09:06:54

标签: c# itext itext7

我正在尝试将PDF1.7文档转换为PDFA / 3B文档,目前,我需要获取源文档中的所有字体并将其复制到目标中(如果这实际上是这样做的方式)。所以目前我有以下内容:

for (int i = 1; i < source.GetNumberOfPdfObjects(); i++)
{
    var obj = source.GetPdfObject(i);
    if (!obj?.IsDictionary() ?? true)
        continue;

    var dict = obj as PdfDictionary;
    if (dict == null)
        continue;

    if (PdfName.Font.Equals(dict.GetAsName(PdfName.Type)))
    {
        var fontDescriptor = dict.GetAsDictionary(PdfName.FontDescriptor);
        if (fontDescriptor == null)
            continue;

        //What else?
    }
}

但是我在尝试获取字体时遇到了麻烦。

这是从一个文档中获取字体的方法吗?还是有一种更简单的方法?以及如何将它们复制到新文档中?

1 个答案:

答案 0 :(得分:0)

要获取文档中的所有字体并将其复制到目标文档中,您需要以下代码:

for (int i = 1; i <= pdfDocument.getNumberOfPdfObjects(); i++) {
    PdfObject object = pdfDocument.getPdfObject(i);
    if (object.isDictionary() && PdfName.Font.equals(((PdfDictionary)object).getAsName(PdfName.Type))) {
        object.copyTo(targetDocument);
    }
}

但是,请不要指望所有内容都将保留在页面等上。此代码仅能满足您的要求-将字体复制到新文档中。与仅复制字体相比,保存内容和对字体的引用要很多

此外,不要期望通过将对象从任意PDF文档复制到您声称自己符合PDF / A-3B规范的文档中来获得这种规范。这是不正确的。 PDF / A标准有很多要求,其中有一些字体要求在原始文档中不一定能满足。