2016-12-25 64 views
0

尝试将PDF页面的NoClassDefFoundError在PDFBox的添加图像到PDF页面的Android

 PDDocument document = null; 
     File inputFile = new File(mFilePath); 
     document = PDDocument.load(inputFile); 
     PDPage page = document.getPage(0); 

     File image = new File("/storage/emulated/0/", "1.jpg"); 

     PDImageXObject img = JPEGFactory.createFromStream(document, inputStream); 
     PDPageContentStream contentStream = new PDPageContentStream(document, page); 
     contentStream.drawImage(img, 100, 100); 
     contentStream.close(); 

     File outputFile = new File(inputFile.getParent(), "new file.pdf"); 
     document.save(outputFile); 
     document.close(); 

上写的图像,但得到此异常:

java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/imageio/ImageIO; 
     at org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory.readJPEG(JPEGFactory.java:99) 
     at org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory.createFromStream(JPEGFactory.java:78) 

注:我也曾尝试使用

PDImageXObject img = PDImageXObject.createFromFile(image.getPath(), document);

但没有什么不同的事。 我能做些什么来将图像添加到当前页面中的位置,无一例外? (如果你知道更好的soloution让我知道)

回答

0

Finaly,我用Android Port of PDFBoxLink to answer)并用样品代码this link添加图像到PDF:

/** 
* Add an image to an existing PDF document. 
* 
* @param inputFile The input PDF to add the image to. 
* @param imagePath The filename of the image to put in the PDF. 
* @param outputFile The file to write to the pdf to. 
* 
* @throws IOException If there is an error writing the data. 
*/ 
public void createPDFFromImage(String inputFile, String imagePath, String outputFile) 
     throws IOException 
{ 
    // the document 
    PDDocument doc = null; 
    try 
    { 
     doc = PDDocument.load(new File(inputFile)); 

     //we will add the image to the first page. 
     PDPage page = doc.getPage(0); 

     // createFromFile is the easiest way with an image file 
     // if you already have the image in a BufferedImage, 
     // call LosslessFactory.createFromImage() instead 
     PDImageXObject pdImage = PDImageXObject.createFromFile(imagePath, doc); 
     PDPageContentStream contentStream = new PDPageContentStream(doc, page, AppendMode.APPEND, true); 

     // contentStream.drawImage(ximage, 20, 20); 
     // better method inspired by https://stackoverflow.com/a/22318681/535646 
     // reduce this value if the image is too large 
     float scale = 1f; 
     contentStream.drawImage(pdImage, 20, 20, pdImage.getWidth()*scale, pdImage.getHeight()*scale); 

     contentStream.close(); 
     doc.save(outputFile); 
    } 
    finally 
    { 
     if(doc != null) 
     { 
      doc.close(); 
     } 
    } 
} 
+0

“链接,以回答”通不通。也许你的意思是https://stackoverflow.com/questions/8980668/how-to-add-pdfbox-to-an-android-project-or-suggest-alternative –

+0

@TilmanHausherr:感谢您的通知,我纠正了网址到答案。 –