Okay, I think I found it.  Of course using PRStream
wouldn't be any better than PdfStream because PRStream
extends PdfStream and doesn't override toPdf(). 
PdfStream.toPdf() is implemented as always returning
null.  I didn't know why that should be, so I changed
it.  It was:

    public byte[] toPdf(PdfWriter writer) {
        dicBytes = super.toPdf(writer);
        return null;
    }

but I changed it to:

    public byte[] toPdf(PdfWriter writer) {
        dicBytes = super.toPdf(writer);
        return dicBytes;
    }

and it seems to work now.


-Matt

--- Matt Benson <[EMAIL PROTECTED]> wrote:
> 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
> > 
> > 
> >
>
-------------------------------------------------------
> 
=== message truncated ===


__________________________________________________
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