如何提高PDF渲染器中图像的分辨率? [英] How to increase the resolution of image in PDF renderer?
问题描述
我想提高图像的分辨率。我使用了 PDFRenderer-0.9.0 jar。它是从 java.net
下载的,用于将PDF页面转换为图像。
I want to increase the resolution of a image. I used PDFRenderer-0.9.0 jar . It is downloaded from java.net for converting PDF pages to images.
我要转换 46_2.pdf PDF文件到图像。已转换的 46_2.png 图片较小,尺寸 612 x 792 [宽度x height]
,
I want to Convert 46_2.pdf PDF file to image . The converted 46_2.png image is small with dimensions 612 x 792 [ width x height ]
,
所以我想将图片尺寸增加到 1200 x 1400 [宽x高]
。
So I want to increase the image dimensions to 1200 x 1400 [ width x height]
.
我之前尝试 PdfBox 将PDF页面转换为PNG图像文件。有一个问题只转换页面但文本丢失
。所以我尝试 PdfRenderer 进行图片转换。
I tried previously PdfBox for converting PDF page into PNG image file. There is a problem only page is converted but text is missing
. So I tried PdfRenderer for image conversion.
代码:
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();
}
}
}
推荐答案
从PDF文件转换选定的 pageNumber
46_2 .pdf 为具有所需尺寸的 46_2.png 图像格式。图像分辨率提高。
Convert the selected pageNumber
from PDF File 46_2.pdf into image format 46_2.png with the desired dimensions. Resolution of image is increased.
如何将单个PDF页面转换为分辨率为png或jpeg的图像格式。
How to Convert Single PDF page to png or jpeg image format with resolution.
代码:
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:转换后的文件保存在 C:\PDFCopy \Converted
文件夹中。下面是控制台输出。
OutPut: Converted files are saved in C:\PDFCopy\Converted
Folder. Below one is Console output.
46_2_1.png File created in: C:\PDFCopy\Converted
谢谢 Jeff Friesen 基于你的 jRebel示例我在pdfrenderer中尝试过它
Thanks Jeff Friesen based on your example of jRebel I tried it in pdfrenderer
另一种解决方案:
如何使用PDF渲染器在java中将所有PDF页面转换为png / jpeg / jpg / gif / bmp图像格式。要转换的文件 04-Request-Headers.pdf
How to Convert All PDF pages into png / jpeg / jpg/ gif/ bmp image format with resoultion in java using PDF renderer. File to be converted 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();
}
}
}
OutPut:所有文件都保存在 C:/ Documents / Converted /
文件夹中。下面一个是控制台输出
OutPut: All the files are saved in C:/Documents/Converted/
Folder. Below one is Console output
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
这篇关于如何提高PDF渲染器中图像的分辨率?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!