2011-04-14 112 views
1

我使用ASP.NET + iTextSharp生成了pdf報告。
我在其中使用了幾種類型的字體,出於藝術的原因,每種字體都應用於單詞或2。
所以文件很大。如何在PDF中使用字體的子集? (使用iTextSharp)

我怎樣才能嵌入我實際使用的字體?就像我們對MS Office選項所做的一樣。

MS Office Word 2007中是這樣的:
「的文件中嵌入字體:在文檔中使用
只嵌入字符(最好減少文件大小)
不嵌入常用系統字體」

或者我也可以接受另一種解決方案。
將整個頁面展平爲高分辨率圖片。
如果編程方便,我更喜歡這個解決方案。

謝謝。

+0

你能告訴我們你用什麼代碼來創建嵌入的字體嗎?如果你使用'BaseFont.IDENTITY_H'作爲編碼,它應該爲你自動分配字體。 @ mark-storer在這裏談論字體嵌入更多一點:http://stackoverflow.com/questions/4525170/gdicharset-itextsharp/4541217#4541217 – 2011-04-14 14:11:40

回答

2

在創建啓用了嵌入功能的BaseFont實例時,您需要致電myBaseFont.setSubset(true)。需要注意的是與編碼 「身份-H」(又名BaseFont.IDENTITY_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()成爲屬性。

+0

'公共靜態BaseFont bfKaiti = BaseFont.CreateFont(rptResource +「simkai.ttf」 ,BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);' 這就是你說的BaseFont.IDENTITY_H? – hbrls 2011-04-15 04:31:41

+0

這應該可行,是的。 – 2011-04-15 06:57:25

+0

因此,PDF文件的大尺寸不是由於字體?也許我問了錯誤的問題。但非常感謝!至少我們排除了一個原因。 – hbrls 2011-04-18 11:06:02