2014-01-11 2 views
6

Я хочу увеличить разрешение изображения. Я использовал PDFRenderer-0.9.0 jar. Он загружается с java.net для преобразования PDF-страниц в изображения.Как увеличить разрешение изображения в рендерере PDF?

Я хочу конвертировать 46_2.pdf PDF файл к картинке. Преобразованное изображение 46_2.png небольшое с размерами 612 x 792 [ width x height ],

Поэтому я хочу увеличить размеры изображения до 1200 x 1400 [ width x height].

Я попытался ранее PdfBox для преобразования страницы PDF в файл изображения PNG. Возникла проблема only page is converted but text is missing. Поэтому я попробовал PdfRenderer для преобразования изображения.

Код:

package com.pdfrenderer.examples; 

import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.Rectangle; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.RandomAccessFile; 
import java.nio.ByteBuffer; 
import java.nio.channels.FileChannel; 

import javax.imageio.ImageIO; 

import com.sun.pdfview.PDFFile; 
import com.sun.pdfview.PDFPage; 

public class ConvertPdfPagesToImage { 
    public static void main(String[] args) { 
     try { 
      String sourceDir = "C:/PDFCopy/46_2.pdf"; 
      String destinationDir = "C:/PDFCopy/"; 
      File sourceFile = new File(sourceDir); 
      String fileName = sourceFile.getName().replace(".pdf", ""); 
      if (sourceFile.exists()) { 
       RandomAccessFile raf = new RandomAccessFile(sourceFile, "r"); 
       FileChannel channel = raf.getChannel(); 
       ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); 
       PDFFile pdf = new PDFFile(buf); 
       int pageNumber = 1; 
       for (int i = 0; i < pdf.getNumPages(); i++) { 
        PDFPage page = pdf.getPage(i); 
        // create the image 
        Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight()); 
        BufferedImage bufferedImage = new BufferedImage(rect.width, rect.height, BufferedImage.TYPE_INT_RGB); 
        // image width, // image height, // clip rect, // null for the ImageObserver, // fill background with white, // block until drawing is done 
        Image image = page.getImage(rect.width, rect.height, rect, null, true, true); 
        Graphics2D bufImageGraphics = bufferedImage.createGraphics(); 
        bufImageGraphics.drawImage(image, 0, 0, null); 
        ImageIO.write(bufferedImage, "png", new File(destinationDir + fileName +"_"+ pageNumber +".png")); 
        pageNumber++; 
       } 
      } else { 
       System.err.println(sourceFile.getName() +" File not exists"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

Что произойдет, если ширина в два раза и высота изображения. Не будет ли это сделать в два раза больше разрешения? – geedubb

+0

@geedubb после изменения ширина и высота изображения увеличены, но разрешение такое же. Если мы увеличим разрешение автоматически, изменим их высоту и ширину. – pudaykiran

+0

Ум .. вы хотите автоматически увеличить разрешение изображения в пикселях? Вы знаете, что функции «улучшения изображения», которые вы видите в «CSI», являются поддельными, не так ли? – usr2564301

ответ

5

Преобразовать выбранный pageNumber из файла PDF 46_2.pdf в формат изображения 46_2.png с требуемыми размерами. Разрешение изображения увеличивается.

Как конвертировать одну страницу PDF в формат png или jpeg с разрешением.

Код:

package com.pdfrenderer.examples; 

import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.Rectangle; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.RandomAccessFile; 
import java.nio.ByteBuffer; 
import java.nio.channels.FileChannel; 

import javax.imageio.ImageIO; 

import com.sun.pdfview.PDFFile; 
import com.sun.pdfview.PDFPage; 

public class PdfToImageWithDimensions { 
    public static void main(String[] args) { 
     try { 
     String sourceDir = "C:/PDFCopy/46_2.pdf";// PDF file must be placed in DataGet folder 
     String destinationDir = "C:/PDFCopy/Converted/";//Converted PDF page saved in this folder 

     File sourceFile = new File(sourceDir); 
     File destinationFile = new File(destinationDir); 

     String fileName = sourceFile.getName().replace(".pdf", ""); 
     if (sourceFile.exists()) { 
      if (!destinationFile.exists()) { 
       destinationFile.mkdir(); 
       System.out.println("Folder created in: "+ destinationFile.getCanonicalPath()); 
      } 

      RandomAccessFile raf = new RandomAccessFile(sourceFile, "r"); 
      FileChannel channel = raf.getChannel(); 
      ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); 
      PDFFile pdf = new PDFFile(buf); 

      int pageNumber = 1;// which PDF page to be convert 
      PDFPage page = pdf.getPage(pageNumber); 

      // image dimensions 
      int width = 1200; 
      int height = 1400; 

      // create the image 
      Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight()); 
      BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

      // width & height, // clip rect, // null for the ImageObserver, // fill background with white, // block until drawing is done 
      Image image = page.getImage(width, height, rect, null, true, true); 
      Graphics2D bufImageGraphics = bufferedImage.createGraphics(); 
      bufImageGraphics.drawImage(image, 0, 0, null); 

      File imageFile = new File(destinationDir + fileName +"_"+ pageNumber +".png");// change file format here. Ex: .png, .jpg, .jpeg, .gif, .bmp 

      ImageIO.write(bufferedImage, "png", imageFile); 

      System.out.println(imageFile.getName() +" File created in: "+ destinationFile.getCanonicalPath()); 
     } else { 
      System.err.println(sourceFile.getName() +" File not exists"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

Выход: Преобразованные файлы будут сохранены в папке C:\PDFCopy\Converted. Ниже приведен вывод консоли.

46_2_1.png File created in: C:\PDFCopy\Converted 

Благодаря Jeff Friesen на основе вашего example из JRebel Я попробовал его в pdfrenderer

Другое решение:

Как конвертировать все страницы PDF в PNG/JPEG/JPG/GIF/BMP изображение формат с resoultion в java с помощью рендеринга PDF. Файл будет преобразован 04-Request-Headers.pdf

Код:

package com.pdfrenderer.examples; 

import java.awt.Graphics2D; 
import java.awt.Image; 
import java.awt.Rectangle; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.RandomAccessFile; 
import java.nio.ByteBuffer; 
import java.nio.channels.FileChannel; 

import javax.imageio.ImageIO; 

import com.sun.pdfview.PDFFile; 
import com.sun.pdfview.PDFPage; 

public class ConvertAllPDFPagesToImageWithDimenstions { 
    public static void main(String[] args) { 
     try { 
      String sourceDir = "C:/Documents/04-Request-Headers.pdf";// PDF file must be placed in DataGet folder 
      String destinationDir = "C:/Documents/Converted/";//Converted PDF page saved in this folder 

     File sourceFile = new File(sourceDir); 
     File destinationFile = new File(destinationDir); 

     String fileName = sourceFile.getName().replace(".pdf", ""); 
     if (sourceFile.exists()) { 
      if (!destinationFile.exists()) { 
       destinationFile.mkdir(); 
       System.out.println("Folder created in: "+ destinationFile.getCanonicalPath()); 
      } 

      RandomAccessFile raf = new RandomAccessFile(sourceFile, "r"); 
      FileChannel channel = raf.getChannel(); 
      ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); 
      PDFFile pdf = new PDFFile(buf); 
      System.out.println("Total Pages: "+ pdf.getNumPages()); 
      int pageNumber = 1; 
      for (int i = 0; i < pdf.getNumPages(); i++) { 
       PDFPage page = pdf.getPage(i); 

       // image dimensions 
       int width = 1200; 
       int height = 1400; 

       // create the image 
       Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight()); 
       BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); 

       // width & height, // clip rect, // null for the ImageObserver, // fill background with white, // block until drawing is done 
       Image image = page.getImage(width, height, rect, null, true, true); 
       Graphics2D bufImageGraphics = bufferedImage.createGraphics(); 
       bufImageGraphics.drawImage(image, 0, 0, null); 

       File imageFile = new File(destinationDir + fileName +"_"+ pageNumber +".png");// change file format here. Ex: .png, .jpg, .jpeg, .gif, .bmp 

       ImageIO.write(bufferedImage, "png", imageFile); 
       pageNumber++; 

       System.out.println(imageFile.getName() +" File created in Folder: "+ destinationFile.getCanonicalPath()); 
      } 
     } else { 
      System.err.println(sourceFile.getName() +" File not exists"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 

Выход: Все файлы сохраняются в папке C:/Documents/Converted/. Ниже изображен консольный выход

Total Pages: 13 
04-Request-Headers_1.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_2.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_3.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_4.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_5.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_6.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_7.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_8.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_9.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_10.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_11.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_12.png File created in Folder: C:\Documents\Converted 
04-Request-Headers_13.png File created in Folder: C:\Documents\Converted 
+0

Это кажется довольно странным/кодовым запахом в линиях с использованием Rectangle, Image, BufferedImage, Graphics и ImageIO. Почему бы просто не сделать следующее: «BufferedImage buffImage = (BufferedImage) page.getImage (rect.width, rect.height, rect, null, true, true); 'и затем записать изображение в файл:' ImageIO.write (buffImage, "png", destImage.toFile()); '- исключить' Image' и 'Graphics' – mmcrae

+0

Я использовал ваше решение и получил одну проблему, он отлично работает, когда pdf содержит текст, но когда я попытался с помощью pdf, созданного с использованием изображения, он не найден. Работа дает ошибку в этой строке. Image image = page.getImage (ширина, высота, прямой , null, true, true); – Vishnu

Смежные вопросы