【发布时间】:2013-12-10 06:55:40
【问题描述】:
如何使用 iIextSharp 为 PDF 文档设置默认字体和字体大小,以便在整个 PDF 中使用它。
【问题讨论】:
-
根据您在下面的评论您说的是关于 HTML 的内容,请对此进行更多解释。你在解析 HTML 吗?如果是这样,那么在这种情况下,您实际上可以指定默认字体。
标签: itextsharp
如何使用 iIextSharp 为 PDF 文档设置默认字体和字体大小,以便在整个 PDF 中使用它。
【问题讨论】:
标签: itextsharp
在使用俄语和罗马尼亚语字母时遇到了同样的问题 (itextsharp 5.5.6.0, .net 3.5)。我刚刚添加了:
string arialuniTff = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF");
FontFactory.Register(arialuniTff);
StyleSheet ST = new StyleSheet();
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.FACE, "Arial Unicode MS");
ST.LoadTagStyle(HtmlTags.BODY, HtmlTags.ENCODING, BaseFont.IDENTITY_H)
和
parser.SetStyleSheet(ST);
但在开始解析 TextReader 之前,请添加:
parser.Parse(reader);
否则将无法正常工作。
【讨论】:
使用以下功能(您可以根据需要更改字体样式/大小)
Private Function FormatPhrase(value As String) As Phrase
Return New Phrase(value, FontFactory.GetFont(FontFactory.HELVETICA, 8))
End Function
并使用它来显示信息。例如,
Dim stuName As PdfPCell = New PdfPCell(FormatPhrase("Sample Document"))
【讨论】:
感谢大家的回答,但我只是通过从外部 CSS 中获取字体来覆盖 XmlWorker 的默认字体来解决问题:
public static void ParseHtmlToPdf(IElementHandler handler,StringReader inputText,float maxWidth,float maxHeight)
{
XMLWorkerFontProvider fontProvider = new XMLWorkerFontProvider();
fontProvider.Register(HttpContext.Current.Server.MapPath(@"~/Content/IMTLayout/IMTFonts/CenturyGothic/GOTHIC.TTF"), "Default_CenturyGothic");
CssAppliers ca = new CssAppliersImpl(fontProvider);
var context = new HtmlPipelineContext(ca);
context.SetAcceptUnknown(true);
context.SetTagFactory(Tags.GetHtmlTagProcessorFactory());
context.SetImageProvider(new CustomImageHandler { BaseUri = HttpContext.Current.Request.Url.ToString(),MaxHeight = maxHeight,MaxWidth = maxWidth});
var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false);
cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("~/Content/IMTLayout/IMTCss/pdfreport.css"), true);
var pipeline = new CssResolverPipeline(cssResolver,
new HtmlPipeline(context, new ElementHandlerPipeline(handler, null)));
var worker = new XMLWorker(pipeline, true);
var parser = new XMLParser();
parser.AddListener(worker);
parser.Parse(inputText);
}
我的 CSS 文件具有以下属性:
strong b {font-weight:bold;font-family:Century Gothic;}
em i {font-style:italic;font-family:Century Gothic;}
p,ol,ul,li,dl,a,td,tr{font-family:Century Gothic;font-size:10pt;color:#191919;}
a{color:Blue;}
td,tr,table{border-width:0.5px;}
【讨论】:
XmlWorker 的问题中的哪个位置使用 iTextSharp。
试试这个:
BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
iTextSharp.text.Font font = new iTextSharp.text.Font(bf, 10, iTextSharp.text.Font.NORMAL);
Paragraph p1 = new Paragraph(new Chunk("Some text content here \n", font));
【讨论】: