iTextSharp在现有PDF中嵌入子集字体

时间:2016-09-28 12:31:18

标签: c# pdf fonts itext

我们使用旧的报告软件来创建PDF,但无法在文件中嵌入使用过的字体。

现在我正在尝试使用iTextSharp根据这些示例EmbedFontPostFacto ListUsedFonts以及来自other similar questions的其他信息将所有(非嵌入)字体嵌入到现有PDF中。

与第一个例子中一样,我为每种字体创建一个字体文件,然后将其添加到字体对象(PdfDictionary)中,或者添加到字体描述符中。

// the font file
byte[] fontfile = null;
using (FileStream fs = new FileStream(
    fontFileName, FileMode.Open, FileAccess.Read))
{
    fontfile = new byte[fs.Length];
    fs.Read(fontfile, 0, (int)fs.Length);
}
// create a new stream for the font file
PdfStream stream = new PdfStream(fontfile);
stream.FlateCompress();
stream.Put(PdfName.LENGTH1, new PdfNumber(fontfile.Length));


PdfDictionary desc = font.GetAsDict(PdfName.FONTDESCRIPTOR);
PdfIndirectObject objref = stamper.Writer.AddToBody(stream);
desc.Put(PdfName.FONTFILE2, objref.IndirectReference);

这(大部分)都有效,但由于这会嵌入整个字体而不是子集,因此文件会变得非常大。

所以我想知道是否有办法将字体仅作为子集追溯嵌入,使用iTextSharp或任何其他方式。

感谢任何帮助。

0 个答案:

没有答案