【问题标题】:Change default font and fontsize in pdf using itextsharp使用 itextsharp 更改 pdf 中的默认字体和字体大小
【发布时间】:2013-12-10 06:55:40
【问题描述】:

如何使用 iIextSharp 为 PDF 文档设置默认字体和字体大小,以便在整个 PDF 中使用它。

【问题讨论】:

  • 根据您在下面的评论您说的是关于 HTML 的内容,请对此进行更多解释。你在解析 HTML 吗?如果是这样,那么在这种情况下,您实际上可以指定默认字体。

标签: itextsharp


【解决方案1】:

在使用俄语和罗马尼亚语字母时遇到了同样的问题 (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);

否则将无法正常工作。

【讨论】:

    【解决方案2】:

    使用以下功能(您可以根据需要更改字体样式/大小)

    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"))
    

    【讨论】:

    • 这是正确的,但我只是想详细说明一下。 iText 不支持为文档设置“默认字体”,而是每次都需要手动指定。正如@Aishvarya 指出的那样,这可以通过辅助/工厂方法稍微容易一些。
    • 因为这不是我想要的,因为我已经知道这件事,但我真正的问题是,当我更改字体时,我的 html 文本格式都消失了,我不想发生这种情况.任何帮助都是令人钦佩的。谢谢。
    【解决方案3】:

    感谢大家的回答,但我只是通过从外部 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;}
    

    【讨论】:

    • 如果您想知道为什么没有其他人站出来用这个想法回答您的问题...好吧,尝试显示您在尝试创建 pdf 时提到使用 html 和 XmlWorker 的问题中的哪个位置使用 iTextSharp。
    【解决方案4】:

    试试这个:

    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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-15
      • 2012-06-12
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-10
      相关资源
      最近更新 更多