-
Notifications
You must be signed in to change notification settings - Fork 664
Migrating from iText 2 and 4
One goal of LibrePDF is to maintain compatibility with iText, to be a drop-in replacement of iText.
OpenPDF 3.0.0 changed the package name of OpenPDF from com.lowagie to org.openpdf. So when migrating from itext to openpdf the import statements in the code must be changed.
OpenPDF 2.0.0 removed some deprecated methods, please review the JavaDoc for methods available in various versions: OpenPDF JavaDoc
But compatibility is not always possible, so we collect all changes you need to do in your code:
You must depends on twelvemonkeys
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-tiff</artifactId>
<version>3.4.1</version>
</dependency>
You can use the standard approach
Image tif = Image.getInstance("iText.tif");
but if you need to read a multipage TIFF
iText 2 RandomAccessFileOrArray + TiffImage
RandomAccessFileOrArray randomAccess =
new RandomAccessFileOrArray(
file.getAbsolutePath(),
false,
Document.plainRandomAccess);
int pages = TiffImage.getNumberOfPages(randomAccess);
for (int i = 1; i <= pages; i++) {
Image image = TiffImage.getTiffImage(randomAccess, i);
document.add(image);
}
OpenPDF
try (ImageInputStream iis = ImageIO.createImageInputStream(file)) {
ImageReader reader = getTiffImageReader();
reader.setInput(iis);
int pages = reader.getNumImages(true);
for (int imageIndex = 0; imageIndex < pages; imageIndex++) {
BufferedImage bufferedImage = reader.read(imageIndex);
Image image = Image.getInstance(bufferedImage, null, false);
document.add(image);
}
}
private static ImageReader getTiffImageReader() {
Iterator<ImageReader> imageReaders = ImageIO.getImageReadersByFormatName("TIFF");
if (!imageReaders.hasNext()) {
throw new UnsupportedOperationException("No TIFF Reader found!");
}
return imageReaders.next();
}
iText 2
PdfReader reader = new PdfReader(origin);
PdfStamper stamper = new PdfStamper(reader, out);
reader.getCatalog().remove(PdfName.METADATA);
HashMap<String, String> info = reader.getInfo();
info.put("Title", "new title");
// ....
stamper.setMoreInfo(info);
OpenPDF & iText compatible
PdfReader reader = new PdfReader(origin);
PdfStamper stamper = new PdfStamper(reader, out);
reader.getCatalog().remove(PdfName.METADATA);
// This function now return Map
Map<String, String> info = reader.getInfo();
info.put("Title", "new title");
// ....
// And now we need a cast
// (setMoreInfo is deprecated in OpenPdf but the alternative doesn't exists in itext)
stamper.setMoreInfo((HashMap)info);
OpenPDF has no self implementation of Base64 anymore, and com.lowagie.text.pdf.codec.Base64
was removed. Please use java.util.Base64 instead.