使用PdfWriter和iTextSharp以及SetFontAndSize函数的斜体文本

时间:2013-06-15 03:38:59

标签: c# pdf itextsharp

我正在使用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();
        }
    }
}

请您帮我找一种方法让我的字符串显示为Italic?

2 个答案:

答案 0 :(得分:5)

粗体,斜体,常规都是碰巧有相似名称的不同字体。 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);

答案 1 :(得分:1)

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

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