IText7 и отсутствующий метод GetPageN в C # - PullRequest
1 голос
/ 11 декабря 2019

У меня есть этот C# код, работающий с iTextSharp 5, и мне нужно перенести его на IText7.

public static PdfReader Fix(PdfReader pdfReader, int pagina)
{
    var dic = pdfReader.GetPageN(pagina);
    var resources = dic.GetAsDict(PdfName.Resources);

    var fonts = resources?.GetAsDict(PdfName.Font);
    if (fonts == null) return pdfReader;

    foreach (var key in fonts.Keys)
    {
        var font = fonts.GetAsDict(key);

        var firstChar = font.Get(PdfName.FirstChar);
        if (firstChar == null)
            font.Put(PdfName.FirstChar, new PdfNumber(32));

        var lastChar = font.Get(PdfName.LastChar);
        if (lastChar == null)
            font.Put(PdfName.LastChar, new PdfNumber(255));

        var widths = font.GetAsArray(PdfName.Widths);

        if (widths != null) continue;
        var array = Enumerable.Repeat(600, 256).ToArray();
        font.Put(PdfName.Widths, new PdfArray(array));
    }

    return pdfReader;
}

У меня проблема в том, что метод GetPageN в этой строке:

var dic = pdfReader.GetPageN(pagina);

удалено.

Кто-нибудь сталкивался с такой же проблемой?

1 Ответ

1 голос
/ 11 декабря 2019

Действительно, теперь метод GetPage () находится внутри класса PdfDocument .

Также есть некоторые небольшие изменения в том, как вы получаете записи в словаре. из документа, который я позволил себе настроить ваш код.

public static PdfReader Fix(PdfReader pdfReader, int pagina)
{
    var dic = new PdfDocument(pdfReader).GetPage(pagina);
    var resources = dic.GetPdfObject().GetAsDictionary(PdfName.Resources);

    var fonts = resources?.GetAsDictionary(PdfName.Font);
    if (fonts == null) return pdfReader;

    foreach (var key in fonts.KeySet())
    {
        var font = fonts.GetAsDictionary(key);

        var firstChar = font.Get(PdfName.FirstChar);
        if (firstChar == null)
            font.Put(PdfName.FirstChar, new PdfNumber(32));

        var lastChar = font.Get(PdfName.LastChar);
        if (lastChar == null)
            font.Put(PdfName.LastChar, new PdfNumber(255));

        var widths = font.GetAsArray(PdfName.Widths);

        if (widths != null) continue;
        var array = Enumerable.Repeat(600, 256).ToArray();
        font.Put(PdfName.Widths, new PdfArray(array));
    }

    return pdfReader;
}

(я не проверял ваш код, просто убедился, что по крайней мере то, что вы опубликовали сейчас, компилируется)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...