Я сканирую страницы сканером через saraff.twain, а затем проверяю, есть ли текст на странице с тессарактом. Мой код:
private bool IsBlank(Bitmap image)
{
return String.IsNullOrEmpty(tEngine.Process(image, PageSegMode.Auto).GetText());
}
public void DrawToPDF(int index)
{
try
{
// if get image, put in pdf via stream
using (var image = twain.GetImage(index))
using (var stream = new MemoryStream())
{
LOGGER.Debug("checking if blank...");
using (Bitmap bitMapImage = new Bitmap(image))
{
if (!IsBlank(bitMapImage))
{
LOGGER.Debug("page is not blank, adding...");
PdfPage page = pdf.AddPage();
XGraphics gfx = XGraphics.FromPdfPage(page);
image.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
// draw page
using (var xImage = XImage.FromStream(stream))
{
gfx.DrawImage(xImage, 0, 0, page.Width, page.Height);
}
LOGGER.Debug("page added.");
}
else
{
LOGGER.Debug("page is blank, skip.");
}
}
}
}
catch (Exception ex)
{
LOGGER.Warn(ex, $"error: {ex.Message}");
}
}
Он работает нормально, пока я не позвоню DrawToPDF во второй раз и получу "Только одно изображение может быть обработано за один раз. Пожалуйста, убедитесь, что вы удалили страницу, как только закончили с ней."Чтобы понять, что не так, я использовал отладчик Visual Studio и делал снимок перед каждым вызовом DrawToPDF ().
1
Единственный новый объект, добавляемый в память перед каждым новым DrawToPDF() вызов был растровым ...
2
Я в замешательстве ... Как я должен сделать это правильно?