Качество изображения с использованием Itext - программирование
Подтвердить что ты не робот

Качество изображения с использованием Itext

Можно создать PDF-документ с использованием Itext, который содержит imgages с разрешением 150 dpi.

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

Спасибо

4b9b3361

Ответ 1

Смотрите этот поток, в частности этот пост, в котором объясняется, что в файлах 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, которые позволяют вам устанавливать "разрешение" для некоторых типов изображений. К сожалению, это скорее "подсказка печати" и не очень сильно меняет файл. Изображение размером 100 × 100 пикселей в 72DPI является таким же, как 100x100 пикселей при 300DPI, за исключением случаев, когда они печатаются. iText полностью игнорирует этот намек на печать, потому что это все или потому, что не все форматы изображений поддерживают его. (Не напрямую, но один общий миф состоит в том, что "Сохранить для Интернета" делает изображения 72DPI, когда реальность полностью перекрывает информацию разрешения из файла.)

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

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

Ответ 2

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

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

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

Ответ 3

Это помогло мне отобразить изображение SVG с помощью itext 7.1.3

PdfWriter writer = new PdfWriter(new FileOutputStream("/home/users/Documents/pdf/new.pdf"));
PdfDocument pdfDoc = new PdfDocument(writer);    
Document doc = new Document(pdfDoc);
URL svgUrl = new File(svg).toURI().toURL();
doc.add(new Paragraph("new pikachu"));                      
Image image = SvgConverter.convertToImage(svgUrl.openStream(), pdfDoc);                 
doc.add(image);             
doc.close();