PdfReader.getInfo returns null for Keywords

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

PdfReader.getInfo returns null for Keywords

bhopB
This post was updated on .
I am creating a new Pdf from an existing Pdf ( original ) and add customized pages on top of that Pdf. I am able at this moment to retrieve metadata from Pdf by using: info = reader.getInfo(); However, when I want to get the value for "Keywords" info.get("Keywords") it is returning null; When I go through the map and look at the key-value pairs returned I do not see the key: Keywords. However, the Pdf ( original ) has value for Keywords.
Question: How do I get the value for keywords which is present in the metadata section of the original Pdf?

Sample Code:
// Step 2.5 Copying Pdf Properties.
                        reader = new PdfReader(secondFile);
                        HashMap<String, String> map = reader.getInfo();
                       
                        String title = map.get("Title");
                        String author = map.get("Author");
                        String subject = map.get("Subject");
                        String keywords = map.get("Keywords"); ------------> This one returns null for the original Pdf.
                        String creator = map.get("Creator");
                       
                        if (title != null)
                                document.addTitle(title);
                        if (author != null)
                                document.addAuthor(author);
                        if (subject != null)
                                document.addSubject(subject);
                        if (keywords != null) {
                                document.addKeywords(map.get("Keywords"));
                        }


Any help will be appreciated.

Thanks.

Original Pdf :
Original Pdf with metadata

Pdf created by me:
Pdf that I created.
Reply | Threaded
Open this post in threaded view
|

Re: PdfReader.getInfo returns null for Keywords

nconde
this is working for me

                PdfReader reader = new PdfReader("ped.pdf");
                HashMap<String, String> info = reader.getInfo();
                System.out.println(info.get("Keywords"));


iText-2.1.7

plz send pdf and full code

thanks!
Reply | Threaded
Open this post in threaded view
|

Re: PdfReader.getInfo returns null for Keywords

nconde
I am adding new metadata with stamper

                PdfReader reader = new PdfReader("ped.pdf");
                PdfStamper stamper =
                new PdfStamper(reader, new FileOutputStream("ped.pdf"));
                HashMap<String, String> info = reader.getInfo();
                System.out.println(info.get("Keywords"));
                System.out.println(info.get("Keywords"));
                System.out.println(info.get("Keywords"));
               
                info.put("Title", "Hello World stamped");
                info.put("Subject", "Hello World with changed metadata");
                info.put("Keywords", "iText nicolas conde");
                info.put("Creator", "nicolas conde");
                info.put("Author", "nicolas conde");
                stamper.setMoreInfo(info);
                stamper.close();

this code is full build
Reply | Threaded
Open this post in threaded view
|

Re: PdfReader.getInfo returns null for Keywords

bhopB
In reply to this post by nconde
Thanks for the reply. I am not using PdfStamper because I am loosing the hyperlink hidden in the pages that I am adding on top of the original Pdf.
Here is the code merging both Pdfs.

public void concatenate(String firstFile, String secondFile, String output) {

                try {
                        // Step 1
                        Document document = new Document();
                        PdfReader reader;
                        PdfReader.unethicalreading = true;

                        // Step 2.
                        PdfCopy copy = new PdfCopy(document, new FileOutputStream(output));
                       
                        // Step 2.5 Copying Pdf Properties.
                        reader = new PdfReader(secondFile);
                        HashMap<String, String> map = reader.getInfo();
                       
                        String title = map.get("Title");
                        String author = map.get("Author");
                        String subject = map.get("Subject");
                        String keywords = map.get("Keywords");
                        String creator = map.get("Creator");
                       
                        if (title != null)
                                document.addTitle(title);
                        if (author != null)
                                document.addAuthor(author);
                        if (subject != null)
                                document.addSubject(subject);
                        if (keywords != null) {
                                document.addKeywords(map.get("Keywords"));
                        }
                       
                        if (creator != null)
                                document.addCreator(creator+"/Forest Service");
                        else
                                document.addCreator("Forest Service");
                       
                       
                        // Step 3.
                        document.open();
                       
                        // Step 4.
                        int n;
                        int page_offset = 0;
                        List<String> listOfPdfs = new ArrayList<String>();
                        listOfPdfs.add(firstFile); // Pdf with Customed pages.
                        listOfPdfs.add(secondFile); // Original Pdf.
                       
                        // Create a list for the bookrmarks
                        ArrayList<HashMap<String, Object>> bookmarks = new ArrayList<HashMap<String, Object>>();
                List<HashMap<String, Object>> tmp;
                         
                        // loop over the documents you want to concatenate
                        for (int i=0; i<listOfPdfs.size(); i++) {
                                reader = new PdfReader(listOfPdfs.get(i));
                                reader.consolidateNamedDestinations();
                               
                                // merge the bookmarks
                                tmp = SimpleBookmark.getBookmark(reader);
                                if (tmp != null) {
                                        LogUtil.debug(log, "Bookmarks from: "+listOfPdfs.get(i)+" are of size: "+tmp.size());
                                        SimpleBookmark.shiftPageNumbers(tmp, page_offset, null);
                                        bookmarks.addAll(tmp);
                                }
                               
                           
                                // add the pages
                    n = reader.getNumberOfPages();
                    page_offset += n;
                               
                    for (int page = 0; page < n;) {
                                        copy.addPage(copy.getImportedPage(reader, ++page));
                                }
                               
                                copy.freeReader(reader);
                                reader.close();
                        }

                        // Add the merged bookmarks
                if (bookmarks.size() > 0)
                copy.setOutlines(bookmarks);
               
                        // Step 5.
                document.close();
               
                } catch (FileNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (DocumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
               
               
        }

Thanks.


downloaded_SRS_34955.pdf
Reply | Threaded
Open this post in threaded view
|

Re: PdfReader.getInfo returns null for Keywords

bhopB
In reply to this post by nconde
I wish to grab the metadata from the original Pdf and add it to the Pdf that I modified using PdfCopy.

Thanks.
Reply | Threaded
Open this post in threaded view
|

Re: PdfReader.getInfo returns null for Keywords

bhopB
In reply to this post by bhopB
I solved this issue. In case someone else find himself in the same position,
here is what I did.
Here is the code:

PdfReader reader = new PdfReader(originalFile);
                       
                        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(tmpFileOriginal));
                       
                        PdfStamper stamperOut = new PdfStamper(new PdfReader(tmpFileMergedFile), new FileOutputStream(output));
                       
                        stamperOut.setMoreInfo(stamper.getMoreInfo());
                        stamperOut.setXmpMetadata(reader.getMetadata());
                       
                        stamper.close();
                        stamperOut.close();
                        reader.close();

Thanks.