问题描述
当使用 iText7 从多页 PDF 文件中提取图像时,输出图像似乎将文本“清理”到完全删除实际文本的程度。除了公司徽标、图片、一些行,有时还有页码之外,图像几乎完全是白色的。大部分文字已全部删除。看起来图像清理已经失控了。起初我认为这是一个许可问题,因为我在没有获得许可的情况下从 NuGet 安装。在我收到试用许可证后,问题仍然存在。我没有看到调整图像清理参数的方法(如果这是问题的话)。以下是我能够从 Internet 上的各种来源拼凑起来的 IEventListener 接口的实现。即使这个问题没有得到任何答案,我希望这门课对寻找如何实现 iText IEventListener 的示例的人有所帮助。
public class RenderListener : IEventListener
{
private string _outputDir;
private string _extension;
private int _pageNum;
private int _textLength;
private int _exceptionCount;
private List<byte[]> _images;
private List<string> _filenames;
public bool HasText
{
get
{
return _textLength > 0;
}
}
public bool HasImages
{
get
{
return (_images != null) ? _images.Count > 0 : false;
}
}
public int ExceptionCount { get => _exceptionCount; set => _exceptionCount = value; }
public RenderListener(string outputDir)
{
ExceptionCount = 0;
_textLength = 0;
_pageNum = 0;
_images = new List<byte[]>();
_outputDir = outputDir;
_filenames = new List<string>();
}
public void SaveImages() { [...] }
public void EventOccurred(IEventData data,EventType type)
{
switch (type)
{
case EventType.RENDER_TEXT:
TextRenderInfo textRenderInfo = (TextRenderInfo)data;
var text = textRenderInfo.GetText();
if(!String.IsNullOrEmpty(text))
{
_textLength += text.Length;
}
break;
case EventType.RENDER_IMAGE:
try
{
ImageRenderInfo imageRenderInfo = (ImageRenderInfo)data;
PdfImageXObject image = imageRenderInfo.Getimage();
if (image == null)
{
return;
}
byte[] imageByte = null;
string pageNumFormatted = _pageNum.ToString("00000000");
try
{
imageByte = image.GetimageBytes(true);
if (imageByte == null)
{
return;
}
switch (ImageDataFactory.Create(imageByte).GetoriginalType())
{
case ImageType.JPEG:
_extension = "jpg";
break;
case ImageType.PNG:
_extension = "png";
break;
case ImageType.GIF:
_extension = "gif";
break;
case ImageType.BMP:
_extension = "bmp";
break;
case ImageType.TIFF:
_extension = "tif";
break;
case ImageType.WMF:
_extension = "wmf";
break;
case ImageType.jpeg2000:
_extension = "jp2";
break;
case ImageType.jbig2:
_extension = "jbig2";
break;
default:
_extension = "jpg";
break;
}
_images.Add(imageByte);
_filenames.Add($"{pageNumFormatted}.{_extension}");
}
catch (Exception ex2)
{
ExceptionCount++;
}
_pageNum++;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
break;
default:
break;
}
}
public ICollection<EventType> GetSupportedEvents()
{
ICollection<EventType> ret = new List<EventType>();
ret.Add(EventType.RENDER_IMAGE);
ret.Add(EventType.RENDER_TEXT);
return ret;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)