0

Trying to write an image on a pdf page

      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();

but getting this exception:

 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)

Note: I have also tried to use

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

But nothing different happened. What can i do to add a image to a position in current page with no exception? (If you know a better soloution let me know)

Morteza Rastgoo
  • 5,621
  • 5
  • 31
  • 53

1 Answers1

0

Finaly, I used Android Port of PDFBox(Link to answer) and added the image to pdf using a sample code from this link:

 /**
 * 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();
        }
    }
}
Community
  • 1
  • 1
Morteza Rastgoo
  • 5,621
  • 5
  • 31
  • 53