One obvious problem is that this example was using
PdfStream, which always returns null from toPdf. 
However, I had already been using PRStream before that
with the same results.  I am going back to PRStream in
the debugging to which I have been forced to turn, due
to the terrible problem of time zones!  :)



--- Matt Benson <[EMAIL PROTECTED]> wrote:
> Okay, I am STUCK.  I can play with XMP/RDF, that's
> fine, and I've been doing it.  But I am finding
> myself
> unable to actually change the metadata of a given
> PDF.
>  I have culled together a fairly short example; can
> anyone see any obvious problems?
> 
> 
> import java.io.FileOutputStream;
> import java.io.BufferedOutputStream;
> import java.io.ByteArrayOutputStream;
> 
> import com.lowagie.text.pdf.PdfName;
> import com.lowagie.text.pdf.PRStream;
> import com.lowagie.text.pdf.PdfObject;
> import com.lowagie.text.pdf.PdfReader;
> import com.lowagie.text.pdf.PdfStream;
> import com.lowagie.text.pdf.PdfStamper;
> import com.lowagie.text.pdf.PdfDictionary;
> 
> 
> public class MinimalModifyPdfMetadata
> {
>   
>   public byte[] modifyMetadata(String pdf)
>    throws Exception
>   {
>     ByteArrayOutputStream baos = new
> ByteArrayOutputStream();
>     
>     PdfReader pdfReader = new PdfReader(pdf);
>     byte[] b =
>
PdfReader.getStreamBytes((PRStream)(PdfReader.getPdfObject(
>      pdfReader.getCatalog().get(new
> PdfName("Metadata")))), pdfReader.getSafeFile());
>     
>     System.out.println("original metadata");
>     System.out.println(new String(b));
> 
>     PdfStamper stamp = new PdfStamper(pdfReader,
> baos);
> 
>     //set the metadata
>     pdfReader.getCatalog().put(new
> PdfName("Metadata"), new PdfStream(b));
>     
>     try
>     {
>       stamp.close();
>     }//end try 
>     catch (Exception ex)
>     {
>       ex.printStackTrace(System.err);
>     }//end catch Exception
>     
>     return baos.toByteArray();
>   }//end modifyMetadata
> 
> 
>   public static void main(String[] args)
>    throws Exception
>   {
>     int code = 0;
>     
>     if (args.length > 1)
>     {
>       BufferedOutputStream bos
>        = new BufferedOutputStream(new
> FileOutputStream(args[1]));
>        
>       bos.write(new
> MinimalModifyPdfMetadata().modifyMetadata(args[0]));
>       bos.close();
>     }//end if at least 2 args
>     else
>     {
>       System.err.println(
>        "Usage:  MinimalModifyPdfMetadata input-file
> output-file");
>     }//end else, wrong # of args
>     
>     System.exit(code);
>   }//end main
>   
> }//end class MinimalModifyPdfMetadata
> 
> 
> I get the following stack trace when I run the above
> code:
> 
> java.lang.NullPointerException
>         at
> java.io.OutputStream.write(OutputStream.java:65)
>         at
>
com.lowagie.text.pdf.PdfDictionary.toPdf(PdfDictionary.java:152)
>         at
>
com.lowagie.text.pdf.PdfIndirectObject.<init>(PdfIndirectObject.java:
> 138)
>         at
>
com.lowagie.text.pdf.PdfIndirectObject.<init>(PdfIndirectObject.java:
> 107)
>         at
>
com.lowagie.text.pdf.PdfWriter$PdfBody.add(PdfWriter.java:255)
>         at
>
com.lowagie.text.pdf.PdfWriter.addToBody(PdfWriter.java:1361)
>         at
>
com.lowagie.text.pdf.PdfStamperImp.close(PdfStamperImp.java:107)
>         at
>
com.lowagie.text.pdf.PdfStamper.close(PdfStamper.java:104)
>         at
>
MinimalModifyPdfMetadata.modifyMetadata(MinimalModifyPdfMetadata.java
> :36)
>         at
>
MinimalModifyPdfMetadata.main(MinimalModifyPdfMetadata.java:57)
> 
> --- Leonard Rosenthol <[EMAIL PROTECTED]> wrote:
> > At 03:00 PM 3/10/2003 -0800, Matt Benson wrote:
> > >Is XMP the only valid format for the Metadata
> > stream?
> > 
> >          Yes.
> > 
> > 
> > >What means would you suggest for reading this?
> > 
> >          The Adobe XMP Toolkit is the best, but
> that
> > assumes Mac OS or 
> > Windows.   Since it's XML you can really use any
> XML
> > parser you want - 
> > though starting with an RDF parser (on top of your
> > XML) will help...
> > 
> > 
> > Leonard
> >
>
---------------------------------------------------------------------------
> > Leonard Rosenthol                           
> > <mailto:[EMAIL PROTECTED]>
> > Chief Technical Officer                     
> > <http://www.pdfsages.com>
> > PDF Sages, Inc.                             
> > 215-629-3700 (voice)
> > 
> > 
> > 
> >
>
-------------------------------------------------------
> > This sf.net email is sponsored by:ThinkGeek
> > Welcome to geek heaven.
> > http://thinkgeek.com/sf
> > _______________________________________________
> > iText-questions mailing list
> > [EMAIL PROTECTED]
> >
>
https://lists.sourceforge.net/lists/listinfo/itext-questions
> 
> 
> __________________________________________________
> Do you Yahoo!?
> Yahoo! Web Hosting - establish your business online
> http://webhosting.yahoo.com
> 
> 
>
-------------------------------------------------------
> This SF.net email is sponsored by:Crypto Challenge
> is now open! 
> Get cracking and register here for some mind
> boggling fun and 
> the chance of winning an Apple iPod:
>
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
> _______________________________________________
> iText-questions mailing list
> [EMAIL PROTECTED]
>
https://lists.sourceforge.net/lists/listinfo/itext-questions


__________________________________________________
Do you Yahoo!?
Yahoo! Web Hosting - establish your business online
http://webhosting.yahoo.com


-------------------------------------------------------
This SF.net email is sponsored by:Crypto Challenge is now open! 
Get cracking and register here for some mind boggling fun and 
the chance of winning an Apple iPod:
http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0031en
_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Reply via email to