我正在尝试使用命令行程序转换将PDF转换为图像(JPEG或PNG)。这是我正在转换的pdf文件之一。

我想让程序去掉多余的空白,并返回足够高质量的图像,以便上标可以轻松读取。

这是我目前最好的尝试。正如你所看到的,修剪工作很好,我只是需要锐化的分辨率相当多。这是我正在使用的命令:

convert -trim 24.pdf -resize 500% -quality 100 -sharpen 0x1.0 24-11.jpg

我试着做了以下有意识的决定:

调整它的大小(对分辨率没有影响) 尽可能提高质量 使用-锐化(我已经尝试了一系列值)

任何建议,请在最终的PNG/JPEG图像的分辨率更高,将非常感谢!


当前回答

你可以在LibreOffice Draw(这通常是预安装在Ubuntu中)中完成:

在LibreOffice Draw中打开PDF文件。 滚动到需要的页面。 确保文本/图像元素被正确放置。如果没有,可以在页面上进行调整/编辑。 顶部菜单:文件>导出… 在右下角菜单中选择所需的图像格式。我推荐PNG。 命名文件并单击Save。 选项窗口将出现,因此您可以调整分辨率和大小。 单击OK,就完成了。

其他回答

通常我在原生分辨率下用'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/

我使用开源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高。

convert -density 300 * airbnb.pdf

在我看来很完美

在ImageMagick中,你可以做“超级采样”。您可以指定一个较大的密度,然后根据最终输出大小调整大小。以你的图片为例:

convert -density 600 test.pdf -background white -flatten -resize 25% test.png


下载图像以完整的分辨率进行比较。

如果您希望进行进一步处理,我不建议将其保存为JPG。

如果你想要输出与输入相同的大小,那么将大小调整为密度与72之比的倒数。例如,-density 288和-resize 25%。288=4*72, 25%=1/4

密度越大,得到的质量越好,但需要更长的加工时间。

你可以在LibreOffice Draw(这通常是预安装在Ubuntu中)中完成:

在LibreOffice Draw中打开PDF文件。 滚动到需要的页面。 确保文本/图像元素被正确放置。如果没有,可以在页面上进行调整/编辑。 顶部菜单:文件>导出… 在右下角菜单中选择所需的图像格式。我推荐PNG。 命名文件并单击Save。 选项窗口将出现,因此您可以调整分辨率和大小。 单击OK,就完成了。