我们使用旧的报告软件来创建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或任何其他方式。
感谢任何帮助。