i am facing same issue applied this code but not working, could you please help me on this for local testing we are using evaluation one but for higher env we are using licensed one.
below is my code:
public void generatePdfFromEmail(File inputFile, OutputStream outputStream, String filename, List<Long> pages) {
try {
MailMessage mailMessage;
String extension = FilenameUtils.getExtension(filename);
if (StringUtils.equalsIgnoreCase(extension, "eml") || StringUtils.equalsIgnoreCase(extension, "emlx")) {
mailMessage = MailMessage.load(inputFile.getAbsolutePath());
} else if (StringUtils.equalsIgnoreCase(extension, "msg")) {
try (InputStream msgInput = new FileInputStream(inputFile)) {
MapiMessage mapi = MapiMessage.load(msgInput);
mailMessage = mapi.toMailMessage(new MailConversionOptions());
}
} else {
throw new RuntimeException("Unsupported email file format: " + extension);
}
File tempMhtml = File.createTempFile("email-convert-", ".mhtml");
try (OutputStream tempOut = new FileOutputStream(tempMhtml)) {
mailMessage.save(tempOut, SaveOptions.getDefaultMhtml());
}
try (InputStream inputStream = new FileInputStream(tempMhtml)) {
Document doc = new Document(inputStream);
pages.add((long) doc.getPageCount());
double maxContentWidth = 0;
NodeCollection<Shape> shapes = doc.getChildNodes(NodeType.SHAPE, true);
for (Shape shape : shapes) {
if (shape.hasImage()) {
maxContentWidth = Math.max(maxContentWidth, shape.getWidth());
}
}
NodeCollection<Table> tables = doc.getChildNodes(NodeType.TABLE, true);
for (Table table : tables) {
if (table.getPreferredWidth() != null)
maxContentWidth = Math.max(maxContentWidth, table.getPreferredWidth().getValue());
}
boolean useLandscape = maxContentWidth > 555;
for (Section section : doc.getSections()) {
PageSetup ps = section.getPageSetup();
ps.setPaperSize(PaperSize.A4);
ps.setOrientation(useLandscape ? Orientation.LANDSCAPE : Orientation.PORTRAIT);
ps.setTopMargin(20);
ps.setBottomMargin(20);
ps.setLeftMargin(20);
ps.setRightMargin(20);
}
for (Table table : tables) {
table.autoFit(AutoFitBehavior.AUTO_FIT_TO_WINDOW);
}
for (Shape shape : shapes) {
if (!shape.hasImage()) continue;
PageSetup ps = shape.getParentParagraph().getParentSection().getPageSetup();
double freeWidth = shape.isInline()
? ps.getPageWidth() - ps.getLeftMargin() - ps.getRightMargin()
: ps.getPageWidth();
double freeHeight = shape.isInline()
? ps.getPageHeight() - ps.getTopMargin() - ps.getBottomMargin()
: ps.getPageHeight();
ImageSize size = shape.getImageData().getImageSize();
boolean tooBig = size.getWidthPoints() > freeWidth
|| size.getHeightPoints() > freeHeight
|| shape.getWidth() > freeWidth
|| shape.getHeight() > freeHeight;
if (tooBig) {
double ratio = freeWidth / size.getWidthPoints();
if (size.getHeightPoints() * ratio > freeHeight) {
ratio = freeHeight / size.getHeightPoints();
}
shape.setAspectRatioLocked(true);
shape.setWidth(size.getWidthPoints() * ratio);
shape.setHeight(size.getHeightPoints() * ratio);
}
}
PdfSaveOptions pdfOptions = new PdfSaveOptions();
pdfOptions.setEmbedFullFonts(true);
pdfOptions.setUseHighQualityRendering(true);
pdfOptions.setImageColorSpaceExportMode(PdfImageColorSpaceExportMode.AUTO);
pdfOptions.setTextCompression(PdfTextCompression.NONE);
pdfOptions.setJpegQuality(100);
doc.save(outputStream, pdfOptions);
} finally {
MediaUtils.silentlyDeleteTempFile(tempMhtml);
}
} catch (Exception ex) {
throw new RuntimeException("Failed to convert email to PDF: " + ex.getMessage(), ex);
}
}