Java 使用PDFbox将pdf转换为Tiff时,Tiff图像文件为空

Java 使用PDFbox将pdf转换为Tiff时,Tiff图像文件为空,java,pdfbox,javax.imageio,Java,Pdfbox,Javax.imageio,当我运行下面显示的代码并将其用于ImageIO.getImageWritersBySuffix(“tiff”)而不是jpg时,会创建tiff文件,但它们为空且为0字节 import java.io.*; import org.apache.pdfbox.pdmodel.*; import org.apache.pdfbox.pdmodel.PDDocument; import java.awt.image.BufferedImage; import java.io.File; import ja

当我运行下面显示的代码并将其用于
ImageIO.getImageWritersBySuffix(“tiff”)
而不是jpg时,会创建tiff文件,但它们为空且为0字节

import java.io.*;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.PDDocument;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import javax.imageio.IIOImage;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;

public class Converter {

    /**
     * @param args
     */
    public static void main(String[] args) {
        PDDocument pdf;
        BufferedWriter wr;
        try {
            File input = new File("C:\\test.pdf");
            pdf = PDDocument.load(input);
            List<PDPage> pages = pdf.getDocumentCatalog().getAllPages();

            for (int i = 0; i < pdf.getNumberOfPages(); i++) {
                ImageOutputStream imgOutStream = null;
                ImageWriter imageWriter = null;

                try {
                    PDPage page = (PDPage) pages.get(i);
                    BufferedImage image = page.convertToImage();
                    String fileName = "C:\\TIFF" + (i + 1) + ".tif";
                    imgOutStream = ImageIO.createImageOutputStream(new File(fileName));

                    boolean foundWriter = false;
                    // Iterator<ImageWriter> writerIter =
                    ImageIO.getImageWritersByFormatName("jpg");
                    Iterator<ImageWriter> writerIter = ImageIO.getImageWritersBySuffix("tiff");

                    while (writerIter.hasNext() && writerIter != null) {
                        try {
                            imageWriter = (ImageWriter) writerIter.next();

                            ImageWriteParam writerParams = imageWriter.getDefaultWriteParam();
                            if (writerParams.canWriteCompressed()) {
                                writerParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
                                writerParams.setCompressionQuality(1.0f);
                            }

                            imageWriter.setOutput(imgOutStream);
                            imageWriter.write(null, new IIOImage(image, null, null), writerParams);
                            foundWriter = true;
                        } catch (Exception ex) {
                            System.out.println("1. exception occured...");
                            ex.printStackTrace();
                        } finally {
                            if (imageWriter != null) {
                                imageWriter.dispose();
                            }
                        }

                        if (!foundWriter) {
                            System.out.println("Image writer not found");
                        }

                    }

                } catch (Exception ex) {
                    System.out.println("2. exception occured...");
                    ex.printStackTrace();
                }

            }

            if (pdf != null) {
                pdf.close();
            }

            // close to flush the stream.
            // wr.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
import java.io.*;
导入org.apache.pdfbox.pdmodel.*;
导入org.apache.pdfbox.pdmodel.PDDocument;
导入java.awt.image.buffereImage;
导入java.io.File;
导入java.util.Iterator;
导入java.util.List;
导入javax.imageio.IIOImage;
导入javax.imageio.imageio;
导入javax.imageio.ImageWriteParam;
导入javax.imageio.ImageWriter;
导入javax.imageio.stream.ImageOutputStream;
公共类转换器{
/**
*@param args
*/
公共静态void main(字符串[]args){
pdf文件;
缓冲写入器;
试一试{
文件输入=新文件(“C:\\test.pdf”);
pdf=PDDocument.load(输入);
列表页面=pdf.getDocumentCatalog().getAllPages();
对于(int i=0;i
为什么要费心处理复杂的代码和棘手的问题?改用这个:

ImageIOUtil.writeImage(image, fileName, 72);
这将创建一个72 dpi的TIFF文件(这是调用convertToImage()时获得的分辨率)。文件名必须以“.tif”或“.tiff”结尾


重要提示:您需要使用jai_imageio.jar库。

为什么要处理复杂的代码和棘手的问题?改用这个:

ImageIOUtil.writeImage(image, fileName, 72);
这将创建一个72 dpi的TIFF文件(这是调用convertToImage()时获得的分辨率)。文件名必须以“.tif”或“.tiff”结尾


重要提示:您需要使用jai_imageio.jar库。

是否安装了TIFF
ImageWriter
插件?ImageIO没有内置。是否安装了TIFF
ImageWriter
插件?ImageIO没有内置的。