package jp.crwdev.app.container.pdf; import java.io.IOException; import com.itextpdf.text.pdf.PdfReader; import com.itextpdf.text.pdf.parser.ImageRenderInfo; import com.itextpdf.text.pdf.parser.PdfReaderContentParser; import com.itextpdf.text.pdf.parser.RenderListener; import com.itextpdf.text.pdf.parser.TextRenderInfo; import com.jmupdf.pdf.PdfDocument; import jp.crwdev.app.container.ImageFileInfoList; import jp.crwdev.app.interfaces.IImageFileInfoList; public class PdfImageFileInfoList extends ImageFileInfoList { /** PdfReader */ protected PdfReader mPdfReader = null; protected GhostscriptUtil mGSUtil; protected PdfDocument mPdfDocument; protected PdfReaderContentParser mParser; /** * コンストラクタ * @param pdfReader 入力PdfファイルReader */ public PdfImageFileInfoList(PdfReader pdfReader) { super(); setList(pdfReader); } public PdfImageFileInfoList(GhostscriptUtil gs){ super(); setList(gs); } public PdfImageFileInfoList(PdfDocument doc, PdfReaderContentParser parser){ super(); setList(doc, parser); } /** * コンストラクタ */ protected PdfImageFileInfoList() { super(); } private void setList(PdfReader pdfReader){ mPdfReader = pdfReader; if(mPdfReader != null){ PdfReaderContentParser parser = new PdfReaderContentParser(mPdfReader); int pageCount = mPdfReader.getNumberOfPages(); MyRenderImageListener listener = new MyRenderImageListener(); for(int page=1; page<=pageCount; page++){ try { parser.processContent(page, listener); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } } } private void setList(GhostscriptUtil gs){ mGSUtil = gs; if(mGSUtil != null){ int pageCount = mGSUtil.getNumOfPages(); for(int page=1; page<=pageCount; page++){ add(new PdfImageFileInfo(mGSUtil, page)); } } } private void setList(PdfDocument doc, PdfReaderContentParser parser){ mPdfDocument = doc; mParser = parser; if(mPdfDocument != null){ int pageCount = mPdfDocument.getPageCount(); for(int page=1; page<=pageCount; page++){ add(new PdfImageFileInfo(mPdfDocument, mParser, page)); } } } private class MyRenderImageListener implements RenderListener { public MyRenderImageListener(){ } @Override public void renderImage(ImageRenderInfo info) { // try { // PdfImageObject image = info.getImage(); // String filetype = image.getFileType(); // PdfName filter = (PdfName)image.get(PdfName.FILTER); // int number = info.getRef().getNumber(); //// if(PdfName.DCTDECODE.equals(filter)){ //// number = info.getRef().getNumber(); //// } //// else{ //// number = info.getRef().getNumber(); //// } // BufferedImage buffered = image.getBufferedImage(); // int width = buffered.getWidth(); // int height = buffered.getHeight(); add(new PdfImageFileInfo(info)); // System.out.println("fileType=" + filetype + " number=" + number + " w=" + width + " h=" + height); // } catch (IOException e) { // e.printStackTrace(); // } } @Override public void beginTextBlock() { } @Override public void endTextBlock() { } @Override public void renderText(TextRenderInfo arg0) { } } @Override public IImageFileInfoList renew() { PdfImageFileInfoList list = new PdfImageFileInfoList(); list.mPdfReader = mPdfReader; return renewInternal(list); } @Override public void release(){ if(mPdfDocument != null){ // mPdfDocument.dispose(); // mPdfDocument = null; } } }