-4
請幫助我,我的代碼從PDF文件中提取圖片,並不是從所有PDF文件中提取圖片。雖然它適用於某些PDF文件。請幫幫我。 這裏是我的代碼: ExtractImages.java我的代碼不是從所有PDF文件中提取圖片
package pdttotextconvertor;
import java.io.IOException;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfReaderContentParser;
/**
* Extracts images from a PDF file.
*/
public class ExtractImages {
/**
* PDF to extract images from
*/
public static final String SOURCE_PDF = "C:/Latest Maven Code/pdttotextconvertor/src/main/resources/LC DPF example 1.pdf";
/**
* Parses a PDF and extracts all the images.
*
* @param filename the source PDF
* @param destination the directory to save images
*/
public void extractImages(String filename, String destination)
throws IOException, DocumentException {
System.out.println("Processing PDF at " + filename);
System.out.println("Saving images to " + destination);
PdfReader reader = new PdfReader(filename);
PdfReaderContentParser parser = new PdfReaderContentParser(reader);
ImageRenderListener listener = new ImageRenderListener(destination + "/Img%s.%s");
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
parser.processContent(i, listener);
}
reader.close();
}
/**
* Main method.
*
* @param args no arguments needed
* @throws DocumentException
* @throws IOException
*/
public static void main(String[] args) throws IOException, DocumentException {
String sourcePDF = SOURCE_PDF;
String destination = "target/images";
if (args.length > 0) {
sourcePDF = args[0];
if (args.length > 1) {
destination = args[1];
}
}
new ExtractImages().extractImages(sourcePDF, destination);
}
}
ImageRenderListener.java這是不工作是http://www.filedropper.com/lcdpfexample23
請幫助在此先感謝
package scannedPdfConvertor;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.pdf.parser.ImageRenderInfo;
import com.itextpdf.text.pdf.parser.PdfImageObject;
import com.itextpdf.text.pdf.parser.RenderListener;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Saves images to a directory.
*
* @author mnguyen
*/
public class ImageRenderListener implements RenderListener {
/**
* The directory path to store images.
*/
protected String path;
/**
* Creates a RenderListener that will look for images.
*/
public ImageRenderListener(String path) {
this.path = path;
}
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#beginTextBlock()
*/
public void beginTextBlock() {
}
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#endTextBlock()
*/
public void endTextBlock() {
}
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#renderImage(
* com.itextpdf.text.pdf.parser.ImageRenderInfo)
*/
public void renderImage(ImageRenderInfo renderInfo) {
try {
String filename;
FileOutputStream os;
PdfImageObject image = renderInfo.getImage();
if (image == null) {
return;
}
filename = String.format(path, renderInfo.getRef().getNumber(), image.getFileType());
System.out.println("Writing image to file: " + filename);
os = new FileOutputStream(filename);
os.write(image.getImageAsBytes());
os.flush();
os.close();
} catch (IOException e) {
Logger.getLogger(ImageRenderListener.class.getName()).log(Level.SEVERE, null, e);
}
}
/**
* @see com.itextpdf.text.pdf.parser.RenderListener#renderText(
* com.itextpdf.text.pdf.parser.TextRenderInfo)
*/
public void renderText(TextRenderInfo renderInfo) {
}
}
PDF格式文件的鏈接。
分享您的pdf文件。如果您的問題是關於iText,請不要在pdfbox中標記您的問題。 –
只是說「我的代碼有時無法工作」併發布未註釋的代碼並不好,因爲您正在尋求幫助。你有什麼想法,你的問題發生?你的日誌是否包含任何信息?你的代碼是否完成沒有錯誤?等等 –
我的猜測是,OP或者將矢量圖像誤認爲光柵圖像(他的代碼只能提取* Image XObjects *),或者他遇到了iText不支持的圖像(我不確定,但我認爲提取JBIG2不支持;你可以用iText將JBIG2轉換爲PDF,但我認爲沒有回頭)。 –