Hi iTexters, 

during the last week I was doing exactly a PdfGraphics class as you seem to have done. 
I was only implementing the features which we currently are using. Especially I was 
cheating with the FontMetrics. Now I realized this morning that you have done a more 
complete implementation in the PdfGraphics2D, reason enough for me to abandom my 
implementation and switch to the far more complete one of iText. But the problem I'm 
observing is show in the following code: 

    /**
     * <code>createPdf</code> prints a set of pages into the PDF
     * file.
     */
    public void createPdf() {
                // make an instance of a PdfGraphics Object for the document
                DefaultFontMapper fm = new DefaultFontMapper();
                java.awt.Graphics2D g = null;

                // don't do anything if pageable is null
                if (pageable != null) {
                        // read all fonts recognized be iText in system font path
                        
fm.insertDirectory(sun.awt.font.NativeFontWrapper.getFontPath(true));
                                                                                       
                                                           
                        System.out.println("PdfJob.createPdf:  started");
                        int pages = pageable.getNumberOfPages();
                        System.out.println("PdfJob.createPdf:  pages to print: 
"+pages+"\n");
                        
                        // set pageSize of first page before the document opens!!
                        float width = 
(float)pageable.getPageFormat(0).getPaper().getWidth();
                        float height = 
(float)pageable.getPageFormat(0).getPaper().getHeight();
                        theDocument.setPageSize(new Rectangle(width, height));

                        // g.setPageSize(pageable.getPageFormat(0));
                  theDocument.open();
                        g = pdfWriter.getDirectContent().createGraphics(width, height, 
fm);
                        
                        for (int  p = 0;  p < pages ; ++p) {
                                Printable thePage = pageable.getPrintable(p);
                                try {
                                        // print! 
                                        thePage.print(g, pageable.getPageFormat(p), p);
                                        System.out.println("PdfJob.createPdf:  page " 
+ p + " printed");
                                        if (p < pages-1) {
                                                // next page, please! on its proper 
PageSize 
                                                width = 
(float)pageable.getPageFormat(p+1).getPaper().getWidth();
                                                height = 
(float)pageable.getPageFormat(p+1).getPaper().getHeight();
                                                theDocument.setPageSize(new 
Rectangle(width, height));
                                        } // end of if (p < pages-1)
                                        theDocument.newPage();
                                        
////////////////////////////////////////////////////////
                                        // iText-Error!? 
                                        // g.dispose(); // use of dispose leads to a
                                        // "unbalanced save/restore" exception not 
using
                                        // g.dispose() is producing erroneous PDF:
                                        // Acrobat Reader complains about unmatched
                                        // save/restore commands if the document 
consist
                                        // of Portrait and Landscape format. Acrobat 
Reader
                                        // show one empty additional page if the 
document
                                        // is only one page format
                                        
/////////////////////////////////////////////////////////
                                        g = 
pdfWriter.getDirectContent().createGraphics(width, height, fm);
                                } catch ( PrinterException e) {
                                        e.printStackTrace();
                                }
                                catch(DocumentException de) {
                                        de.printStackTrace();
                                }
                        } // end of for (int p = 0; p < pages; p++)
                        // write the document and clear all references
                        end();  // = theDocument.close()
                } // end of if (pageable) 
    } // end createPdf


_______________________________________________
iText-questions mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Reply via email to