Sample.pdf (18.5 KB)
Aspose Team,
We use the Aspose PDF java package to convert pdf to tiff, and got the following error with some PDF files.
java.lang.ClassCastException: com.aspose.pdf.internal.imaging.fileformats.jpeg.JpegImage cannot be cast to com.aspose.pdf.internal.ms.System.l5f
at com.aspose.pdf.internal.l10p.le.lb(Unknown Source)
at com.aspose.pdf.internal.l10p.le.lI(Unknown Source)
at com.aspose.pdf.devices.TiffDevice.processInternal(Unknown Source)
at com.aspose.pdf.devices.DocumentDevice.processInternal(Unknown Source)
at com.aspose.pdf.devices.DocumentDevice.process(Unknown Source)
at TestPdf2Tiff.pdfToTiff(TestPdf2Tiff.java:59)
at TestPdf2Tiff.main(TestPdf2Tiff.java:25)
Following is the sample code that reproduces the problem and attached is a sample file. Note that we add some stamps to the pdf before converting it to tiff. So we added the code for adding stamps here. We noticed that the same error happens if the method for adding stamps (addStamps) is skipped.
The operating system is Ubuntu 18.04. Java version is 1.8. Aspose PDF java package is 20.8.
import com.aspose.pdf.;
import com.aspose.pdf.devices.;
import com.aspose.pdf.facades.FormattedText;
import com.aspose.pdf.facades.PdfFileEditor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
public class TestPdf2Tiff {
public enum TiffFormat {
Color, BlackAndWhite, Grayscale
}
public static final int DEFAULT_DPI_RESOLUTION = 300; // dots per inch resolution
public static void main(String[] args) {
try {
System.out.println("Start");
String pdfPath = "/home/ubuntu/testdir_pdf2tiff/Sample.pdf";
String tiffPath = "/home/ubuntu/testdir_pdf2tiff/Sample.tiff";
addStamps(pdfPath);
pdfToTiff(pdfPath, tiffPath, TiffFormat.Color);
System.out.println("Done");
}
catch(Exception ex) {
ex.printStackTrace();
}
}
private static void pdfToTiff(String inputFilePath, String outputFilePath, TiffFormat format) throws IOException {
System.out.println("Convert pdf to tiff...");
int compressingType = CompressionType.LZW; // Default to Color
int colorDepth = ColorDepth.Default;
if (format == TiffFormat.BlackAndWhite) {
compressingType = CompressionType.CCITT4; // Black and White
colorDepth = ColorDepth.Format8bpp;
} else if (format == TiffFormat.Grayscale) { // Grayscale
colorDepth = ColorDepth.Format1bpp;
}
OutputStream imageStream = null;
Document pdfDocument = null;
try {
pdfDocument = new Document(inputFilePath);
imageStream = new FileOutputStream(outputFilePath);
Resolution resolution = new Resolution(DEFAULT_DPI_RESOLUTION); // abstract resolution that seems to correlate to dots per inch (DPI)
TiffSettings tiffSettings = new TiffSettings();
tiffSettings.setCompression(compressingType);
tiffSettings.setDepth(colorDepth);
tiffSettings.setSkipBlankPages(false);
TiffDevice tiffDevice = new TiffDevice(resolution, tiffSettings);
tiffDevice.process(pdfDocument, imageStream);
pdfDocument.close();
} finally {
if (pdfDocument != null) {
pdfDocument.close();
}
if (imageStream != null) {
imageStream.close();
}
}
System.out.println("Converting pdf to tiff done");
}
private static void addStamps(String path) throws Exception {
System.out.println("Add stamps...");
String ucStr = "Test";
String llStr = "1";
String lrStr = "YAX.PC.00000198";
String fontFamily = "DejaVu Sans";
Font font = FontRepository.findFont(fontFamily);;
int fontSize = 10;
// Stamps
List<TextStamp> stampsToAdd = new ArrayList<>();
// Uper Center
stampsToAdd.add(convertToStamp(ucStr, HorizontalAlignment.Center, VerticalAlignment.Top, font, fontSize));
// Lower Left
stampsToAdd.add(convertToStamp(llStr, HorizontalAlignment.Left, VerticalAlignment.Bottom, font, fontSize));
// Lower Right
stampsToAdd.add(convertToStamp(lrStr, HorizontalAlignment.Right, VerticalAlignment.Bottom, font, fontSize));
// Resize the page before adding the stamps
int leftMargin = 5;
int rightMargin = 5;
int topMargin = 11;
int bottomMargin = 11;
PdfFileEditor.ContentsResizeParameters parameters = new PdfFileEditor.ContentsResizeParameters(
PdfFileEditor.ContentsResizeValue.units(leftMargin),
null,
PdfFileEditor.ContentsResizeValue.units(rightMargin),
PdfFileEditor.ContentsResizeValue.units(topMargin),
null,
PdfFileEditor.ContentsResizeValue.units(bottomMargin)
);
PdfFileEditor editor = new PdfFileEditor();
Document document = new Document(path);
editor.resizeContents(document, parameters);
for (Page page : document.getPages()) {
for(TextStamp stamp : stampsToAdd){
page.addStamp(stamp);
}
}
document.save();
System.out.println("Adding stamps done");
}
private static TextStamp convertToStamp(String text, int horizontalAlignment, int verticalAlignment,
Font font, int fontSize) {
FormattedText formattedText = new FormattedText();
formattedText.addNewLineText(text);
TextStamp textStamp = new TextStamp(formattedText);
textStamp.setWordWrap(true);
textStamp.setHorizontalAlignment(horizontalAlignment);
textStamp.setVerticalAlignment(verticalAlignment);
textStamp.getTextState().setFont(font);
textStamp.getTextState().setFontSize(fontSize);
textStamp.setTopMargin(0);
return textStamp;
}
}