Использование разных шрифтов в PDF с использованием iTextSharp и PDFStamper - PullRequest
4 голосов
/ 25 ноября 2010

Я использую iTextSharp для загрузки существующего PDF и добавления текста с помощью PdfStamper.Мне нужен полный контроль над текстом, то есть я хочу иметь возможность контролировать шрифт (только TrueType), размер шрифта и координаты.Сейчас я использую ShowTextAligned для добавления текста к определенным координатам и setFontAndSize для установки шрифта и размера шрифта.Это мой код для добавления текста:

    private void AddText(BaseFont font, string text, int x, int y, int size)
    {
        pdf.BeginText();
        pdf.SetFontAndSize(font, size);
        pdf.ShowTextAligned(PdfContentByte.ALIGN_LEFT, text, x, y, 0);
        pdf.EndText();
    }

Следующая функция используется для загрузки шрифта TrueType:

    public BaseFont GetFont(string font, string encoding)
    {
        if (!(font.EndsWith(".ttf") || font.EndsWith(".TTF")))
            font += ".ttf";

        BaseFont basefont;

        basefont = BaseFont.CreateFont(ConfigurationManager.AppSettings["fontdir"] + font, encoding, BaseFont.NOT_EMBEDDED);

        if (basefont == null)
            throw new Exception("Could not load font '" + font + "' with encoding '" + encoding + "'");

        return basefont;
    }

Следующий код используется для загрузки существующего PDF:

        Stream outputPdfStream = Response.OutputStream;
        PdfReader pdfReader = new PdfReader(new RandomAccessFileOrArray(HttpContext.Current.Request.MapPath("PdfTemplates/" + ConfigurationManager.AppSettings["pdf_template"])), null);
        PdfStamper pdfStamper = new PdfStamper(pdfReader, outputPdfStream);

        pdf = pdfStamper.GetOverContent(1);

Все это прекрасно работает, кроме случаев, когда я пытаюсь использовать разные шрифты.Поэтому, когда AddText вызывается несколько раз с разными шрифтами, PDF-файл будет отображать общую ошибку при открытии.Интересно, можно ли использовать разные шрифты с помощью функции ShowTextAligned и если да, то как?

Ответы [ 2 ]

1 голос
/ 29 ноября 2010

Спасибо за ваш ответ Марк, однако я уже решил проблему.Возникла проблема с моим заголовком Content-Type, который я использую, чтобы сообщить браузеру, насколько велик размер PDF.Это привело к тому, что браузер прекратил загрузку до того, как весь PDF был фактически загружен.При добавлении нового шрифта размер PDF будет просто превышать размер, указанный в заголовке Content-Type, что приведет к плохому PDF.Теперь это решено, несколько шрифтов работают нормально: -).

1 голос
/ 26 ноября 2010

Не совсем, нет. Он будет обрабатывать только один шрифт за раз. Из любопытства, что вы делаете, чтобы получить плохой вывод PDF? Я хотел бы увидеть ваш код.

Взгляните на ColumnText. Существует довольно много примеров, которые подробно освещены в «iText in Action 2nd edition». Все образцы из книги доступны в режиме онлайн.

...