如何子集pdf中使用的字体?(带iTextSharp)

如何子集pdf中使用的字体?(带iTextSharp),pdf,fonts,itextsharp,subset,Pdf,Fonts,Itextsharp,Subset,我使用ASP.NET+iTextSharp生成了一份pdf报告。 我在其中使用了几种字体,每种字体应用于一个单词或两个单词,出于艺术原因。 所以文件很大 如何只嵌入我实际使用的字体?就像我们对MS Office选项所做的一样 MS Office Word 2007是这样的: “在文件中嵌入字体: 仅嵌入文档中使用的字符(最好减少文件大小) 不嵌入通用系统字体“ 或者我也可以接受另一种解决方案。 将整个页面展平为高分辨率图片。 如果编程方便,我实际上更喜欢这个解决方案 谢谢。当创建启用嵌入的Bas

我使用ASP.NET+iTextSharp生成了一份pdf报告。
我在其中使用了几种字体,每种字体应用于一个单词或两个单词,出于艺术原因。
所以文件很大

如何只嵌入我实际使用的字体?就像我们对MS Office选项所做的一样

MS Office Word 2007是这样的:
“在文件中嵌入字体:
仅嵌入文档中使用的字符(最好减少文件大小)
不嵌入通用系统字体“

或者我也可以接受另一种解决方案。
将整个页面展平为高分辨率图片。
如果编程方便,我实际上更喜欢这个解决方案


谢谢。

当创建启用嵌入的
BaseFont
实例时,需要调用
myBaseFont.setSubset(true)
。注意,使用编码“Identity-H”(AKA
BaseFont.Identity\u H
),这会自动发生:

// find all fonts in the usual places across multiple OSs.
// This can be pretty slow if you have a large number fonts, or the fonts
// themselves are Really Big (ArialUnicodeMS: 23mb).
FontFactory.registerDirectories();

// here's one way to do it, using identity-h forces subsetting
Font myFontSubset1 = FontFactory.getFont(fontName1, BaseFont.IDENTITY_H);

// here's another, explicitly enable subsetting for the underlying BaseFont.
Font myFontSubset2 = FontFactory.getFont(fontName2, FontFactory.defaultEncoding, true);
myFontSubset2.getBaseFont().setSubset(true);

//or you can create the BaseFont yourself, with automagic subsetting
BaseFont myFontSubset3 = BaseFont.createFont(fontPath, BaseFont.IDENTITY_H);

// or create it with some other encoding, and enable subsetting.
BaseFont myFontSubset4 = BaseFont.createFont(fontPath, BaseFont.WINANSI, true);
myFontSubset4.setSubset(true);

请注意,这都是Java。在C#中,函数名的第一个字母大写,
setX(newX)
getX()
成为属性。

您能告诉我们您使用什么代码来创建嵌入的字体吗?如果您使用
BaseFont.IDENTITY\u H
进行编码,它将自动为您子集字体@mark storer在这里进一步讨论了字体嵌入:
public static BaseFont bfKaiti=BaseFont.CreateFont(rptResource+“simkai.ttf”、BaseFont.IDENTITY、BaseFont.NOT\u EMBEDDED)
这就是你所说的BaseFont.IDENTITY\H吗?所以pdf文件的大尺寸不是因为字体造成的?也许我问错了问题。但是非常感谢!至少我们排除了一个原因。AcrobatPro有一个“PDF大小审计”功能,你可以在PDF上运行,看看到底是什么占据了所有的空间。您可以下载免费试用版。;)这是我能在网上找到的BaseFont.setSubset()的唯一文档(戏剧性…)。非常感谢。