【问题标题】:Italic text using PdfWriter and iTextSharp and SetFontAndSize function使用 PdfWriter 和 iTextSharp 和 SetFontAndSize 函数的斜体文本
【发布时间】:2013-06-15 03:38:59
【问题描述】:

我正在使用 iTextSharp 创建一些 pdf 文件。这些文档有好几页,除了最后一页外,所有这些页面都需要用斜体字书写。

这是我使用 PdfTemplate 的代码,它可以工作,但我无法将字符串设为 Italic:

public override void OnCloseDocument(PdfWriter writer, Document document)
{
    base.OnCloseDocument(writer, document);

    template.BeginText();
    template.SetFontAndSize(arial, 11);
    template.SetTextMatrix(0, 0);
    template.ShowText("" + (writer.PageNumber - 1));
    template.EndText();

    int index = 0;
    foreach (PdfTemplate temp in templates)
    {
        if ((++index) < (writer.PageNumber-1))
        {
            temp.BeginText();
            temp.SetFontAndSize(arial, 11);
            temp.SetTextRenderingMode(0);
            temp.SetTextMatrix(0, 0);
            temp.ShowText("- Continued -");
            temp.EndText();
        }
    }
}

您能帮我找到一种方法让我的字符串显示为斜体吗?

【问题讨论】:

    标签: c# pdf itextsharp


    【解决方案1】:

    粗体、斜体、常规都是碰巧具有相似名称的不同字体。 iText 有一些快捷方式可以在内置字体之间进行转换(如 Md. Nazrul Islam 所示),但如果您指定自己的字体,则需要提供各种粗细和样式。 Arial 需要注册并使用斜体ariali.ttf

    //Paths to our font files
    var arial_regular_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "arial.ttf");
    var arial_italic_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ariali.ttf");
    
    //Create base fonts
    var arial_regular_base = BaseFont.CreateFont(arial_regular_path, BaseFont.IDENTITY_H, false);
    var arial_italic_base = BaseFont.CreateFont(arial_italic_path, BaseFont.IDENTITY_H, false);
    
    //Create sized-fonts using the bases above
    var arial_regular = new iTextSharp.text.Font(arial_regular_base, 12);
    var arial_italic = new iTextSharp.text.Font(arial_italic_base, 12);
    
    //Test paragraph
    var p = new Paragraph();
    p.Add(new Chunk("This is a test using an ", arial_regular));
    p.Add(new Chunk("italic", arial_italic));
    p.Add(new Chunk(" font", arial_regular));
    
    doc.Add(p);
    

    在您的示例代码中,您基本上想要这样做:

    var arial_italic_path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ariali.ttf");
    var arial_italic_base = BaseFont.CreateFont(arial_italic_path, BaseFont.IDENTITY_H, false);
    temp.SetFontAndSize(arial_italic_base, 11);
    

    【讨论】:

    • 如果您使用内置的 iText 路径(在 OPs 的情况下不包含 ARIAL),您还可以找到 _OBLIQUE 或 _ITALIC 后缀。 IE。 BaseFont.HELVETICA_OBLIQUE 和 BaseFont.TIMES_ITALIC 都在那里。
    【解决方案2】:

    您可以尝试使用以下代码。只需创建一个基础字体,然后创建一个字体,然后使用它。

    BaseFont bfTimes = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, false);
    Font times = new Font(bfTimes, 12, Font.ITALIC, Color.RED);
    

    【讨论】:

    • temp.SetFontAndSize(arial, 11);我们只能在这一行使用 BaseFont,Font 不是该方法的有效参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多