2

I'm looking for a Java library that will can take a Image (PNG) and create a PDF. Or Create the PDF directly from a java panel that has been drawn.

Wassim Sboui
  • 1,692
  • 7
  • 30
  • 48

2 Answers2

1

You can achieve this using Gnostice PDFOne for Java (http://www.gnostice.com/PDFOne_Java.asp).

Find below the code snippet that creates a PDF document from a PNG image.

PdfDocument doc = new PdfDocument();

// Read the image as BufferedImage object
BufferedImage bufImg = ImageIO.read(new File(
    "SampleImage.PNG"));

// Create PdfImage object using the above BufferedImage object
PdfImage img = PdfImage.create(bufImg);

// Create a PdfPage of image size (image width x image Height)
PdfPage page1 = new PdfPage(img.width(), img.height());

// draw the image at 0, 0
page1.drawImage(img, 0, 0);

// add the page to the document object
doc.add(page1);

// save the document to the output file
doc.save("PNGImageToPDF.pdf");
doc.close();

To create a BufferedImage from a JPanel you can use the below code snippet.

int w = jpanel.getWidth();
int h = jpanel.getHeight();
BufferedImage bi = new BufferedImage(w, h,
    BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
jpanel.paint(g2);
g2.dispose();

After creating BuffereImage from JPanel you can use the first code snippet to create PDF.

I hope you will find this useful.

Disclaimer: I work for Gnostice.

Santhanam
  • 166
  • 1
  • 7
1

Try xsPDF:

BufferedImage image = ImageIO.read(new File(imageFileName));
int width = image.getWidth(), height = image.getHeight();
XSPDF.getInstance()
.setPageSize(width, height)
.setPageMargin(NO_MARGIN)
.setImage(image, 0, 0, width, height, 0)
.createPdf(pdfFileName);
  • Its giving me the error Exception in thread "main" java.lang.NullPointerException Even though the file is there. I tried to give some other name of file which does not exists Then it gives this error javax.imageio.IIOException: Can't read input file! at javax.imageio.ImageIO.read(ImageIO.java:1301) – Ritter7 Jul 29 '19 at 11:50
  • Please check if the file really exists: File file = new File(yourFilename); if (file.exists()) {/* your error output */} else {/* your XSPDF-Statements from above */} I'm quite sure the file is not accessable. If it is, please upload the image file so I can test it. – Christian Jul 30 '19 at 14:28