2014-01-11 11 views
6

Ich möchte die Auflösung eines Bildes erhöhen. Ich benutzte PDFRenderer-0.9.0 Glas. Es wird von java.net heruntergeladen, um PDF-Seiten in Bilder zu konvertieren.Wie erhöht man die Auflösung des Bildes im PDF-Renderer?

Ich möchte 46_2.pdf PDF-Datei in Bild umwandeln. Das konvertierte 46_2.png Bild ist klein mit den Abmessungen 612 x 792 [ width x height ],

Also ich möchte die Bildmaße auf 1200 x 1400 [ width x height] erhöhen.

Ich versuchte zuvor PdfBox zum Konvertieren von PDF-Seite in PNG-Bilddatei. Es gibt ein Problem only page is converted but text is missing. So versuchte ich PdfRenderer für Bildkonvertierung.

Code:

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

was passiert, wenn doppelte Breite und Höhe des Bildes. Wird das nicht die doppelte Auflösung liefern? – geedubb

+0

@geedubb nach Änderung der Breite und Höhe Bildgröße ist erhöht, aber die Auflösung ist gleich. Wenn wir die Auflösung automatisch erhöhen, ändern sie ihre Höhe und Breite. – pudaykiran

+0

Um .. willst du automatisch die Auflösung eines Pixelbildes erhöhen? Sie wissen, dass die "Bildverbesserung" -Funktionen, die Sie in "CSI" sehen, gefälscht sind, nicht wahr? – usr2564301

Antwort

5

Konvertieren der ausgewählten pageNumber aus PDF-Datei 46_2.pdf in Bildformat 46_2.png mit den gewünschten Abmessungen. Die Auflösung des Bildes ist erhöht.

So konvertieren Sie einzelne PDF-Seite in Png oder JPEG-Bildformat mit Auflösung.

Code:

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(); 
    } 
} 
} 

OutPut: konvertierte Dateien werden in C:\PDFCopy\Converted Ordner gespeichert. Unter einem steht die Konsolenausgabe.

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

Dank Jeff Friesen auf der Grundlage Ihrer example von JRebel habe ich versucht, es in pdfrenderer

Eine andere Lösung:

Wie alle PDF-Seiten konvertieren in PNG/JPEG/JPG/GIF/BMP-Bild Format mit Auflösung in Java mit PDF-Renderer. Datei konvertiert werden 04-Request-Headers.pdf

Code:

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(); 
    } 
} 
} 

OutPut: Alle Dateien werden in C:/Documents/Converted/ Ordner gespeichert. Unter einem ist Konsole Ausgang

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

Es scheint ziemlich ungerade/Code-Geruch in Zeilen mit Rectangle, Image, BufferedImage, Graphics und ImageIO. Warum nicht einfach folgendes tun: 'BufferedImage buffImage = (BufferedImage) page.getImage (rect.width, rect.height, rect, null, true, true); 'und dann schreibe das Bild in eine Datei:' ImageIO.write (buffImage, "png", destImage.toFile()); '- schließt' Image' und 'Graphics' aus – mmcrae

+0

Ich habe Ihre Lösung verwendet und habe ein Problem, es funktioniert gut, wenn die PDF Text enthält, aber wenn ich mit PDF erstellt mit Bild versucht es nicht gefunden funktioniert gibt Fehler in dieser Zeile Image image = page.getImage (Breite, Höhe, rect , null, wahr, wahr); – Vishnu