我正在尝试使用命令行程序转换将PDF转换为图像(JPEG或PNG)。这是我正在转换的pdf文件之一。
我想让程序去掉多余的空白,并返回足够高质量的图像,以便上标可以轻松读取。
这是我目前最好的尝试。正如你所看到的,修剪工作很好,我只是需要锐化的分辨率相当多。这是我正在使用的命令:
convert -trim 24.pdf -resize 500% -quality 100 -sharpen 0x1.0 24-11.jpg
我试着做了以下有意识的决定:
调整它的大小(对分辨率没有影响)
尽可能提高质量
使用-锐化(我已经尝试了一系列值)
任何建议,请在最终的PNG/JPEG图像的分辨率更高,将非常感谢!
这里的Linux用户:我尝试了转换命令行实用程序(PDF到PNG),我对结果不满意。我发现这样做更简单,效果也更好:
使用PDFTK提取PDF页面
例如:PDFTK file.pdf cat 3输出page3.pdf
用GIMP打开(导入)该pdf
重要:改变导入分辨率从100到300或600像素/英寸
在GIMP导出为PNG(更改文件扩展名为。PNG)
编辑:
根据评论的要求,添加了图片。转换命令使用:
Convert -density 300 -trim struct2vec.pdf -quality 100 struct2vec.png
GIMP: 300dpi进口(px/in);导出为PNG压缩级别3。
我没有在命令行上使用GIMP(回复:我的评论,在下面)。
通常我在原生分辨率下用'pdfimages'提取嵌入图像,然后使用ImageMagick的转换为所需的格式:
$ pdfimages -list fileName.pdf
$ pdfimages fileName.pdf fileName # save in .ppm format
$ convert fileName-000.ppm fileName-000.png
这将生成最佳和最小的结果文件。
注意:对于有损的JPG嵌入图像,你必须使用-j:
$ pdfimages -j fileName.pdf fileName # save in .jpg format
最近的“poppler-util”(0.50+,2016),你可以使用-所有保存有损为jpg和无损为png,所以一个简单的:
$ pdfimages -all fileName.pdf fileName
从PDF中提取总是最好的质量内容。
在很少提供的Win平台上,您必须下载最近的(0.68,2018)' popler -util'二进制从:
http://blog.alivate.com.au/poppler-windows/
看来以下方法是有效的:
convert \
-verbose \
-density 150 \
-trim \
test.pdf \
-quality 100 \
-flatten \
-sharpen 0x1.0 \
24-18.jpg
它的结果是左图。将其与我的原始命令的结果进行比较(右侧的图像):
(为了真正看到和欣赏两者之间的差异,右键单击每个,并选择“在新选项卡中打开图像…”)
还要记住以下事实:
右边最糟糕的模糊图像的文件大小为1.941.702字节(1.85 MByte)。
它的分辨率是3060x3960像素,使用16位RGB颜色空间。
左边图像比较清晰,文件大小为337.879字节(330 kByte)。
它的分辨率是758x996像素,使用8位灰色空间。
所以,不需要调整大小;添加-density标志。密度值150很奇怪——尝试一个范围的值会导致图像在两个方向上看起来都很糟糕!
我使用开源java pdf引擎icepdf。检查办公室演示。
package image2pdf;
import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
public class pdf2image {
public static void main(String[] args) {
Document document = new Document();
try {
document.setFile("C:\\Users\\Dell\\Desktop\\test.pdf");
} catch (PDFException ex) {
System.out.println("Error parsing PDF document " + ex);
} catch (PDFSecurityException ex) {
System.out.println("Error encryption not supported " + ex);
} catch (FileNotFoundException ex) {
System.out.println("Error file not found " + ex);
} catch (IOException ex) {
System.out.println("Error IOException " + ex);
}
// save page captures to file.
float scale = 1.0f;
float rotation = 0f;
// Paint each pages content to an image and
// write the image to file
for (int i = 0; i < document.getNumberOfPages(); i++) {
try {
BufferedImage image = (BufferedImage) document.getPageImage(
i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX, rotation, scale);
RenderedImage rendImage = image;
try {
System.out.println(" capturing page " + i);
File file = new File("C:\\Users\\Dell\\Desktop\\test_imageCapture1_" + i + ".png");
ImageIO.write(rendImage, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
image.flush();
}catch(Exception e){
e.printStackTrace();
}
}
// clean up resources
document.dispose();
}
}
我也尝试过imagemagick和pdftoppm, pdftoppm和icepdf的分辨率都比imagemagick高。