简体   繁体   English

IText7 和 C# 中缺少的 GetPageN 方法

[英]IText7 and missing GetPageN method in C#

I've this C# code working with iTextSharp 5 and I need to port it to 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.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;
}

The problem I have is that the method GetPageN in this line:GetPageN的问题是这一行中的GetPageN方法:

var dic = pdfReader.GetPageN(pagina);

has been removed.已被删除。

Have someone faced the same problem?有人遇到过同样的问题吗?

Indeed, now the GetPage() method is inside of the PdfDocument class.实际上,现在GetPage()方法位于PdfDocument类中。

There are also some little changes as to how you get the Dictionary entries from the document, which I took the liberty to adjust your code to.关于如何从文档中获取 Dictionary 条目也有一些小的变化,我冒昧地调整了您的代码。

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

(I haven't checked your code, just made sure that at least what you posted now compiles) (我没有检查你的代码,只是确保至少你现在发布的内容可以编译)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM