Качество изображения с использованием Itext - PullRequest
17 голосов
/ 23 ноября 2011

Возможно создание PDF-документа с использованием Itext, который содержит изображения с разрешением 150 точек на дюйм.

(Похоже, что Itext снижает качество изображений до 72 dpi.)

Спасибо

Ответы [ 2 ]

45 голосов
/ 23 ноября 2011

См. Эту ветку , в частности эту публикацию , в которой объясняется, что в PDF-файлах отсутствует концепция DPI. Эта тема также является хорошим чтением.

По существу (и это не технически точно, но достаточно близко) по умолчанию, когда вы размещаете изображение, используя iText, принимайте для каждых 72 пикселей, что1 дюйм печатного пространства будет использоваться.Если вы хотите изменить это правило, вам нужно изменить изображение matrix.Вы можете сделать это напрямую (что сложно) или использовать методы масштабирования (намного проще), такие как scaleAbsolute(), scaleAbsoluteWidth(), scaleAbsoluteHeight(), scalePercentage() и scaleToFit().

Изменениематрица не никоим образом не изменяет изображение, она только (по существу) меняет определение количества пикселей, помещаемых в дюйм, которое при печати вы бы назвали DPI. (Вы на самом деле изменяете соотношение между пикселями изображения и пользовательскими единицами документа, но вам не обязательно это знать.) Таким образом, по умолчанию, изображение размером 200x200 пикселей, размещаемое iText, должно распечатываться примерно с2 3/4 ". Если вы позвоните scaleAbsolute(100,100), то эти 200 пикселей будут втиснуты в 100" пользовательских единиц ", что даст вам эффективное DPI 144 и напечатает со скоростью примерно 1 3/8".

Все этоможет действительно повредить вашу голову, особенно если вы привыкли к программам обработки изображений, таким как Adobe Photoshop, которые позволяют вам устанавливать «разрешение» для некоторых типов изображений.К сожалению, это скорее «подсказка для печати», которая не сильно меняет файл.Изображение 100x100 пикселей с разрешением 72 точек на дюйм точно такое же, как 100x100 пикселей с разрешением 300 точек на дюйм, за исключением печати.iText полностью игнорирует этот намек на печать, потому что это все, что есть, или потому, что не все форматы изображений поддерживают его.(Непосредственно связанный, но один распространенный миф заключается в том, что «Сохранить для Интернета» делает изображения 72DPI, когда в действительности они полностью удаляют информацию о разрешении из файла.)

Игнорирование того, что происходит на самом деле, чтобы изображение было тем, чем оно является.Вы считаете 150 DPI, берете ширину и высоту исходного изображения в пикселях и умножаете их на 0.48 (72, деленное на 150) и передаете эти новые числа в scaleAbsolute().

Существует метод дляImage класс называется setDPI, но, насколько я могу судить, он на самом деле не влияет на размещение изображения и является скорее информационной.

0 голосов
/ 12 июля 2012

Если качество изображения в PDF плохое.Вы можете сделать следующее:

  1. Создать изображение большего размера с высоким разрешением.
  2. Уменьшить изображение при экспорте в файл PDF.

Это решило мою проблемупроблема.

...