2012-10-30 3 views
1

pdf 파일을 android의 이미지로 변환하고 싶습니다. 자바로 변환하려고하면 안드로이드에서 완벽하게 작동하지만 버퍼링 된 클래스를 수락하지 않습니다.pdf 파일을 android의 이미지로 변환 할 수 있습니까?

나는 많은 오픈 소스 파일 iText, PDFReader 및 PDfViewer를 읽었지만 아무도 완벽하게 작업하지 못했습니다. 그 부분에서 저를 도울 수있는 사람이 있습니까? PDF의 RENDERER.jar :

+1

코드를 구현하려고 할 때 발생했던 특정 문제를 보여주십시오. –

+0

PDF 파일을 안드로이드의 이미지로 변환하고 싶습니다. Mr.Jan Gerlinger도 가능합니까? – GaneshKumar

+0

(거의) 모든 것이 가능합니다. PDF 파일을 렌더링하고 이미지로 저장하는 것도 좋습니다. 그렇지만 전체 코드 샘플을 요구하는 것이 아니라 학습에 관한 것입니다. –

답변

2
import com.sun.pdfview.PDFFile; 

import com.sun.pdfview.PDFPage; 

import java.awt.Graphics; 

import java.awt.GraphicsConfiguration; 

import java.awt.GraphicsDevice; 

import java.awt.GraphicsEnvironment; 

import java.awt.HeadlessException; 

import java.awt.Image; 

import java.awt.Rectangle; 

import java.awt.Transparency; 

import java.io.*; 

import java.nio.ByteBuffer; 

import java.nio.channels.FileChannel; 

import javax.swing.*; 

import javax.imageio.*; 

import java.awt.image.*; 

public class ImageMain { 


// This method returns a buffered image with the contents of an image 
public static BufferedImage toBufferedImage(Image image) { 
    if (image instanceof BufferedImage) { 
     return (BufferedImage) image; 
    } 
    // This code ensures that all the pixels in the image are loaded 
    image = new ImageIcon(image).getImage(); 
    // Determine if the image has transparent pixels; for this method's 
    // implementation, see e661 Determining If an Image Has Transparent 
    // Pixels 
    boolean hasAlpha = hasAlpha(image); 
    // Create a buffered image with a format that's compatible with the 
    // screen 
    BufferedImage bimage = null; 
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    try { 
     // Determine the type of transparency of the new buffered image 
     int transparency = Transparency.OPAQUE; 
     if (hasAlpha) { 
      transparency = Transparency.BITMASK; 
     } 
     // Create the buffered image 
     GraphicsDevice gs = ge.getDefaultScreenDevice(); 
     GraphicsConfiguration gc = gs.getDefaultConfiguration(); 
     bimage = gc.createCompatibleImage(image.getWidth(null), image.getHeight(null), transparency); 
    } catch (HeadlessException e) { 
     // The system does not have a screen 
    } 
    if (bimage == null) { 
     // Create a buffered image using the default color model 
     int type = BufferedImage.TYPE_INT_RGB; 
     if (hasAlpha) { 
      type = BufferedImage.TYPE_INT_ARGB; 
     } 
     bimage = new BufferedImage(image.getWidth(null), image.getHeight(null), type); 
    } 
    // Copy image to buffered image 
    Graphics g = bimage.createGraphics(); 
    // Paint the image onto the buffered image 
    g.drawImage(image, 0, 0, null); 
    g.dispose(); 
    return bimage; 
} 

공공 정적 무효 설치()는 IOException가 {

File file = new File("p.pdf"); 

    RandomAccessFile raf = new RandomAccessFile(file, "r"); 

    FileChannel channel = raf.getChannel(); 

    ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel.size()); 

    PDFFile pdffile = new PDFFile(buf); 

    int numPgs = pdffile.getNumPages(); 

    for (int i = 0; i < numPgs; i++) { 

     // draw the first page to an image 

     PDFPage page = pdffile.getPage(i); 

     // get the width and height for the doc at the default zoom 
     Rectangle rect = new Rectangle(0, 0, (int) page.getBBox().getWidth(), (int) page.getBBox().getHeight()); 

     // generate the image 

     Image img = page.getImage(rect.width, rect.height, // width & height 
       rect, // clip rect 
       null, // null for the ImageObserver 
       true, // fill background with white 
       true // block until drawing is done 
       ); 

     // save it as a file 

     BufferedImage bImg = toBufferedImage(img); 

     File yourImageFile = new File("page_" + i + ".png"); 

     ImageIO.write(bImg, "png", yourImageFile); 

    } 

} 

public static boolean hasAlpha(Image image) { 
    // If buffered image, the color model is readily available 
    if (image instanceof BufferedImage) { 
     BufferedImage bimage = (BufferedImage) image; 
     return bimage.getColorModel().hasAlpha(); 
    } 
    // Use a pixel grabber to retrieve the image's color model; 
    // grabbing a single pixel is usually sufficient 
    PixelGrabber pg = new PixelGrabber(image, 0, 0, 1, 1, false); 
    try { 
     pg.grabPixels(); 
    } catch (InterruptedException e) { 
    } 
    // Get the image's color model 
    ColorModel cm = pg.getColorModel(); 
    return cm.hasAlpha(); 
} 

public static void main(final String[] args) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      try { 
       ImageMain.setup(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    }); 
} 

}

JAR 파일 중고가 발생합니다.

이 자바 코드는 pdf 페이지를 images로 변환 할 수 있지만 안드로이드 코드로 변환하려고 시도합니다. java.awt.Rectangle 및 java.awt.graphics가 지원하지 않는다는 오류가 발생했습니다.

그물에서 검색 한 jtar.jar 그냥 오류를 제거하고 projext 실행할 수 있지만 예외를 실행하면 Rectangle 및 그래픽 지원하지 않습니다 .. 내가 친구를 만든 실수 ...? 어떤 아이디어 ..?

1

찾았습니다. 내 웹 서버에 고스트 스크립트을 사용하고 이미지로 변환 한 다음 webfolder에 저장합니다.

는 그런 다음 파일을 계산해야 http://view.samurajdata.se/

고스트를 사용하여 변환이를 참조하십시오.

공공 문자열 Downloadfromurl :

그럼 내가

내가 URL에서 검색하는 데 사용되는 코드 .. 루프의 도움으로 URL을 사용하여 내 응용 프로그램에 내 이미지를 검색하고 비트 맵 형식으로 표시 (문자열 URL)

{ 

String filepath=null; 

try { 

    URL url = new URL(Url); 

    //create the new connection 

    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

    //set up some things on the connection 
    urlConnection.setRequestMethod("GET"); 

    urlConnection.setDoOutput(true); 

    //and connect! 

    urlConnection.connect(); 

    //set the path where we want to save the file 
    //in this case, going to save it on the root directory of the 
    //sd card. 

    folder = new File(Environment.getExternalStorageDirectory().toString()+"/img"); 

    folder.mkdirs(); 

    //create a new file, specifying the path, and the filename 
    //which we want to save the file as. 

    String filename= "page"+no+".PNG"; 

    file = new File(folder,filename); 

    if(file.createNewFile()) 

    { 

    file.createNewFile(); 

    } 

    //this will be used to write the downloaded data into the file we created 
    FileOutputStream fileOutput = new FileOutputStream(file); 

    //this will be used in reading the data from the internet 
    InputStream inputStream = urlConnection.getInputStream(); 

    //this is the total size of the file 
    int totalSize = urlConnection.getContentLength(); 
    //variable to store total downloaded bytes 
    int downloadedSize = 0; 

    //create a buffer... 
    byte[] buffer = new byte[1024]; 
    int bufferLength = 0; //used to store a temporary size of the buffer 

    //now, read through the input buffer and write the contents to the file 
    while ((bufferLength = inputStream.read(buffer)) > 0) { 
    //add the data in the buffer to the file in the file output stream (the file on the sd card 
    fileOutput.write(buffer, 0, bufferLength); 
    //add up the size so we know how much is downloaded 
    downloadedSize += bufferLength; 
    //this is where you would do something to report the prgress, like this maybe 
    Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ; 
    } 
    //close the output stream when done 
    fileOutput.close(); 
    if(downloadedSize==totalSize) 
     filepath=file.getPath(); 

//catch some possible errors... 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    filepath=null; 
    e.printStackTrace(); 
} 
Log.i("filepath:"," "+filepath) ; 


return filepath; 

} 

이 정보가 도움이되기를 바랍니다.

+0

안녕 Ganesh 나는이 프로젝트의 XML로 완전한 소스 코드를 제공해 주시겠습니까? –

관련 문제