我已使用此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);
已被删除。
有人遇到过同样的问题吗?
确实,现在GetPage()方法在PdfDocument类的内部。
从文档中获取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;
}
(我没有检查您的代码,只是确保至少您现在发布的内容可以编译)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句