C# IText7和C中缺少的GetPageN方法#

C# IText7和C中缺少的GetPageN方法#,c#,itext7,C#,Itext7,我已经将此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.Fon

我已经将此
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);
已被删除

有人遇到过同样的问题吗?

事实上,现在该方法在类中

关于如何从文档中获取词典条目,也有一些小的变化,我冒昧地调整了代码

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

(我没有检查您的代码,只是确保至少您现在发布的内容能够编译)

有一篇很好的文章展示了iText 5(iTextSharp)和iText 7之间的一些关键区别。虽然它适用于Java,但也适用于C#端口-