C# печать уменьшенных изображений в высоком разрешении

246
31 января 2018, 11:29

Что нужно: открыть скан А4 (всегда будут использоваться сканы), уменьшить его размеры в 2 раза, разместить на 1/4 листа А4 и поместить результат в pdf.

Имеется скан в разрешении 2464:3424 и 300dpi, формат jpg. Использую библиотеку itextsharp. Проблема в том, что качество печати довольно плохое, зернистое, притом что у меня лазерный принтер с 1200dpi и высокое разрешение картинки (как я думаю). Печатаю в помощью Foxit Reader, с 1200dpi в настройках принтера. Основной код:

public void CreatePdf(string path, System.Drawing.Image image)
{
    var doc = new Document();
    PdfWriter.GetInstance(doc, new FileStream(path, FileMode.Create));
    var a4Size = new Rectangle(PageSize.A4);
    doc.SetPageSize(a4Size);
    var width = 297;
    var height = 421;
    // Половины от PageSize.A4
    _neededSize = new Rectangle(width, height);
    var table = new PdfPTable(2);
    var img = iTextSharp.text.Image.GetInstance(image, System.Drawing.Imaging.ImageFormat.Jpeg);
    img.ScaleToFit(_neededSize);
    table.AddCell(img);
    doc.Add(table);
    doc.Close();
}

Считывание картинки происходит так:

var img = Image.FromFile(fileName);

Пробовал сразу печатать средствами C#, качество не повысилось. Хотя "по ТЗ" должна быть pdf.

В чем может быть проблема, в недостаточном разрешении исходного материала? На англоязычных форумах советуют повысить разрешении картинок, но я не понимаю, что имеется ввиду: подсовывать картинки более качественные или программно какие-то манипуляции производить.

Но в pdf файле потери качества нет. И pdf получается такого же размера (в Кб я имею ввиду), что и картинка. То есть правильно ли я понимаю, что foxit производит сжатие перед печатью? В таком случае, если ли способ улучшить этот результат? Обработать как-нибудь изображение?

Может быть стоит использовать другие библиотеки?

Answer 1

Включил мозг и попробовал распечатать скан с помощью "средства просмотра изображений" от Windows и MS Word (говорили в интернете, что неплохо сжимает для печати). Получил примерно одинаковое качество с моей версией. И хотя это не дает ответа на вопрос об улучшении качества, этот вопрос можно считать закрытым - изображение печаталось так как должно было.

Видимо решение моей проблемы лежит в преобразовании изображения для улучшения качества ещё до того, как оно будет помещено в PDF.

Спасибо и извиняюсь за потраченное время.

READ ALSO
Обработчик события CollectionChanged

Обработчик события CollectionChanged

Имеется сторонний контрол, который биндится к коллекции, имплементирующей CollectionChagnedПроблема в том что коллекция обновляется слишком часто,...

227
Перенос данных для разных СУБД в EntityFramework Migrations

Перенос данных для разных СУБД в EntityFramework Migrations

Есть приложение, использующее в качестве ORM EntityFrameworkНужно к этому приложению прикрутить миграцию БД

214
Экспорт данных из файла Excel в DataGridView

Экспорт данных из файла Excel в DataGridView

Нашел код для загрузки данных Excel в таблицу DataGridView:

251
Эффективное хранение списка файлов

Эффективное хранение списка файлов

Допустим, есть N-ое кол-во директорий, в каждой директории хранится M файлов с уникальными именами, которые не пересекаются с файлами из других...

182