I am using aspose-pdf-kit-4.5.0.jar to convert email msg file to pdf file.
They look ok.
But if an email message file has attached pdf file that has bookmarks.
The final bookmark does not correct.
The attached pdf file has this bookmark:
main1
main2
main 2-1
main 2-2
main 2-2-1
So the final book should be like this:
Email
The attached pdf file name
main1
main 2
main 2-1
main 2-2
main 2-2-1
But the wrong bookmark is like this:
main1
main 2
main 2-1
main 2-2
main 2-2-1
Email
The attached pdf file name
Please let me know.
Chang Shin
Hi Chang,
We are sorry for this inconvenience.
I create temporary files from email message file by using Aspose Email and then use Apsoe.Pdf.Kit tool.
It is not related with Apsose Email tool.
Here is the codes:
List bookMarkNames = new ArrayList();
for ( String fileName: attachedFiles ) {
bookMarkNames.add(fileName);
}
// for bookmarks for each pdf files
String[] bookmarkNames = new String[bookMarkNames.size()+1];
int[] bookmarkPages = new int[bookMarkNames.size()+1];
bookmarkNames[0] = “Email”;
int index = 0;
for ( String fileName : bookMarkNames ) {
index++;
bookmarkNames[index] = fileName;
}
InputStream inputStream;
InputStream[] pdfs = new InputStream[pdfFileNames.size()];
index = 0;
int pageCount = 1;
for ( String fileName : pdfFileNames ) {
PdfFileInfo pdfInfo = new PdfFileInfo(fileName);
inputStream = new FileInputStream(fileName);
pdfs[index] = inputStream;
bookmarkPages[index] = pageCount;
pageCount += pdfInfo.getNumberofPages();
index++;
}
// Merge pdf files
PdfFileEditor editor = new PdfFileEditor();
log.info(“saved pdf file name=”+this.pdfFileName);
commHistoryUpload.setSaved_file_name( this.pdfFileName );
if ( commHistoryUpload.getId() != null && !commHistoryUpload.getId().equals("") ) {
this.pdfFileName = commHistoryUpload.getId() + “-” + this.pdfFileName;
}
FileOutputStream outputStream = new FileOutputStream(baseFolder + this.pdfFileName);
editor.concatenate(pdfs, outputStream);
// close the output FileOutputStream
outputStream.close();
// Bookmarks setting
// http:// www.aspose.com/docs/display/pdfkitjava/PdfBookmarkEditor
// http:// www.aspose.com/docs/display/pdfkitjava/Bookmark
// create PdfBookmarkEditor object and bind input file
PdfBookmarkEditor pdfBookmarkEditor = new PdfBookmarkEditor();
pdfBookmarkEditor.bindPdf(baseFolder + this.pdfFileName);
// create bookmarks of multiple pages
// pdfBookmarkEditor.createBookmarkOfPage(bookmarkNames, bookmarkPages);
for ( int i =0; i< bookmarkNames.length; i++ ) {
// create another bookmark
Bookmark bookmark = new Bookmark();
bookmark.setPageNumber(bookmarkPages[i]);
bookmark.setTitle(bookmarkNames[i]);
bookmark.setLevel(1);
bookmark.setPageDisplay(“Fit”);
// bookmarkList.add(bookmark);
log.info(“bookmarkNames=”+bookmarkNames[i]);
List sheetNames = (List) excelSheetNames.get(bookmarkNames[i]);
if ( sheetNames != null && sheetNames.size() > 0 ) {
log.info(“bookmarkNames,sheetNames=”+sheetNames.size());
ArrayList childList = new ArrayList();
for ( int j = 0; j < sheetNames.size(); j++ ) {
Bookmark bookmark2 = new Bookmark();
bookmark2.setPageNumber(bookmarkPages[i]+j);
bookmark2.setTitle(sheetNames.get(j));
bookmark2.setLevel(2);
childList.add(bookmark2);
}
bookmark.setChildItem(childList);
}
pdfBookmarkEditor.createBookmarks(bookmark);
}
// bookkmark.setAction(action)
// save final PDF file
pdfBookmarkEditor.save(baseFolder + this.pdfFileName);
// PDFinitial setting
// http:// www.aspose.com/docs/display/pdfkitjava/PdfContentEditor
// http:// www.aspose.com/docs/display/pdfkitjava/ViewerPreference
PdfContentEditor pdfContentEditor = new PdfContentEditor();
pdfContentEditor.bindPdf(baseFolder + this.pdfFileName);
// pdfContentEditor.createBookmarks();
// ViewerPreference viewerPreference = new ViewerPreference();
pdfContentEditor.changeViewerPreference(ViewerPreference.PageModeUseOutlines); // show bookmark
pdfContentEditor.changeViewerPreference(ViewerPreference.CenterWindow);
pdfContentEditor.changeViewerPreference(ViewerPreference.FitWindow);
// pdfContentEditor.changeViewerPreference(ViewerPreference.PageLayoutSinglePage);
pdfContentEditor.changeViewerPreference(ViewerPreference.DisplayDocTitle);
pdfContentEditor.save(baseFolder + this.pdfFileName);
// Pdf pdf = new Pdf();
// OpenType.Bookmarks;
// http:// www.aspose.com/docs/display/pdfjava/Adding+bookmarks+in+the+PDF+document
// http:// www.aspose.com/docs/display/pdfjava/Add+a+Bookmark+in+the+PDF+Document
```v
deleteTempFiles(attachedFiles,attachedPDFFiles); // Delete attached files and created pdf filed
Thanks,
Chang Shin
Hi Chang,
The new jar file name is “aspose.pdf-new-4.0.0.jar”.
I am not sure about this part:
Can you put the right code for pdf bookmark in line ??? and //TODO?
//pdfBookmarkEditor.createBookmarkOfPage(bookmarkNames, bookmarkPages);
for ( int i =0; i< bookmarkNames.length; i++ ) {
//create another bookmark
Bookmark bookmark = new Bookmark();
bookmark.setPageNumber(bookmarkPages[i]);
bookmark.setTitle(bookmarkNames[i]);
bookmark.setLevel(1);
bookmark.setPageDisplay(“Fit”);
//bookmarkList.add(bookmark);
log.info(“bookmarkNames=”+bookmarkNames[i]);
if ( bookmarkNames[i].endsWith(".pdf") && ??? ) {
//TODO…
} else { // for Excel
List sheetNames = (List) excelSheetNames.get(bookmarkNames[i]);
if ( sheetNames != null && sheetNames.size() > 0 ) {
log.info(“bookmarkNames,sheetNames=”+sheetNames.size());
Bookmarks childList = new Bookmarks();
for ( int j = 0; j < sheetNames.size(); j++ ) {
com.aspose.pdf.facades.Bookmark bookmark2 = new com.aspose.pdf.facades.Bookmark();
bookmark2.setPageNumber(bookmarkPages[i]+j);
bookmark2.setTitle(sheetNames.get(j));
bookmark2.setLevel(2);
childList.add(bookmark2);
}
bookmark.setChildItem(childList);
}
}
pdfBookmarkEditor.createBookmarks(bookmark);
}
Thanks,
Chang Shin
Chang Shin:I am using aspose-pdf-kit-4.5.0.jar to convert email msg file to pdf file.
They look ok.
But if an email message file has attached pdf file that has bookmarks.
The final bookmark does not correct.
The attached pdf file has this bookmark:
main1
main2
main 2-1
main 2-2
main 2-2-1
So the final book should be like this:
The attached pdf file name
main1
main 2
main 2-1
main 2-2
main 2-2-1
But the wrong bookmark is like this:
main1
main 2
main 2-1
main 2-2
main 2-2-1
The attached pdf file name
java.io.File folder = new java.io.File("C:/pdftest/samplefiles/");
java.io.File[] listOfFiles = folder.listFiles();
for (java.io.File file : listOfFiles) {
if (file.isFile()) {
System.out.println(file.getName());
}
}
// for bookmarks for each pdf files
String[] bookmarkNames = new String[listOfFiles.length];
int[] bookmarkPages = new int[listOfFiles.length];
bookmarkNames[0] = "Email";
int index = 0;
for ( java.io.File fileName : listOfFiles ) {
bookmarkNames[index] = listOfFiles[index].getName();
index++;
}
InputStream inputStream;
InputStream[] pdfs = new InputStream[listOfFiles.length];
index = 0;
int pageCount = 1;
for ( java.io.File fileName : listOfFiles)
{
com.aspose.pdf.facades.PdfFileInfo pdfInfo = new com.aspose.pdf.facades.PdfFileInfo(listOfFiles[index].toString());
inputStream = new FileInputStream(fileName);
pdfs[index] = inputStream;
bookmarkPages[index] = pageCount;
pageCount += pdfInfo.getNumberOfPages();
index++;
}
// Merge pdf files
com.aspose.pdf.kit.PdfFileEditor editor = new com.aspose.pdf.kit.PdfFileEditor();
//log.info("saved pdf file name="+this.pdfFileName);
//commHistoryUpload.setSaved_file_name( this.pdfFileName );
// if ( commHistoryUpload.getId() != null && !commHistoryUpload.getId().equals("") ) {
// this.pdfFileName = commHistoryUpload.getId() + "-" + this.pdfFileName;
// }
java.io.FileOutputStream outputStream = new java.io.FileOutputStream("C:\\samplefiles\\ConcatenatedFile.pdf");
editor.concatenate(pdfs, outputStream);
//close the output FileOutputStream
outputStream.close();
com.aspose.pdf.facades.PdfBookmarkEditor pdfBookmarkEditor = new com.aspose.pdf.facades.PdfBookmarkEditor();
pdfBookmarkEditor.bindPdf("C:\\samplefiles\\ConcatenatedFile.pdf");
//create bookmarks of multiple pages
// pdfBookmarkEditor.createBookmarkOfPage(bookmarkNames, bookmarkPages);
for ( int i =0; i< bookmarkNames.length; i++ )
{
//create another bookmark
com.aspose.pdf.facades.Bookmark bookmark = new com.aspose.pdf.facades.Bookmark();
bookmark.setPageNumber(bookmarkPages[i]);
bookmark.setTitle(bookmarkNames[i]);
bookmark.setLevel(1);
bookmark.setPageDisplay("Fit");
//bookmarkList.add(bookmark);
// List sheetNames = (List) excelSheetNames.get(bookmarkNames[i]);
//if ( sheetNames != null && sheetNames.size() > 0 ) {
com.aspose.pdf.facades.Bookmarks childList = new com.aspose.pdf.facades.Bookmarks();
// ArrayList childList = new ArrayList();
for ( int j = 0; j < listOfFiles.length; j++ )
{
com.aspose.pdf.facades.Bookmark bookmark2 = new com.aspose.pdf.facades.Bookmark();
bookmark2.setPageNumber(bookmarkPages[i]+j);
bookmark2.setTitle(listOfFiles[j].getName());
bookmark2.setLevel(2);
childList.add(bookmark2);
}
bookmark.setChildItem(childList);
// }
pdfBookmarkEditor.createBookmarks(bookmark);
}
//bookkmark.setAction(action)
//save final PDF file
pdfBookmarkEditor.save(“C:\samplefiles\ConcatenatedFile_UpdatedBookmark.pdf”);
No, It does not work.
I use aspose.pdf-new-4.0.0.jar.
Thanks,
Chang Shin
Chang Shin:No, It does not work.