Print: zoom AND multiple pages

Hi,
I need to print a 4 pages long pdf on one single two-sided page. To do that, i do the multiple pages option: put 2 pages per printed page (2 on the front page, 2 on the back side). Because every single of these four pages is already in very small font size (every pages contains 16 slides), I need to zoom a bit, so that I can erase the most unnecessary space possible (the white marges). Without the zoom, it's written so small that I can't read it; by removing the marges, I can enlarge a bit the space and make it readable.
With the new pdf version, I can only chose between putting 2 pages on one page, or zoom; not both at the same time. Can somebody tell me how I can to both at the same time please?
I hope I could clearly expose my problem and that somebody can help me.

Quite imposing has features that allow you to minimize the space between your pdf pages that are being imposed for the same piece of paper.
http://www.Quite.com

Similar Messages

  • Printing Borderless and Multiple Pages per Sheet (PDF)

    Anyway to do this? I have a thousand page pdf doc that I need to print out but want to maximize viewing area. Obviously individually cropping pages is out of the question.

    You may be right about Adobe Reader.  However in Adobe Acrobat X Pro you can simply choose Print>[select booklet button] and choose your options there.  You will see a preview.  Because of the ratio between 8.5x11 and 2-up 8.5x11 you will have a "letterbox" white border on the top and bottom of your pages but you will be able to print with no gutter and no margin on the edges.  Your printer must allow for borderless printing and you must have enough ink.  You will have to have a high-end printer that can print borderless if it is a laser printer but most ink-jet/photo printers can print borderless.  However the downside is that you will have to replace your inks quite frequently and you will have to print duplex probably manually.  You will want a paper weight sufficiently heavy enough to accomodate printing on both sides because otherwise the opposite page will bleed through making it difficult to read.

  • HP L7780 Printing - Two-sided and Multiple pages

    The HP L7780 printer is capable of printing two-sided pages and multiple pages per page (e.g. two-up on a single sheet). This works just fine with my WIndows XP systems, but not with my BRAND NEW Pro! I've installed the latest drivers from HP ... any help here?

    Is any of this helpful?
    http://tinyurl.com/b2kjco
    The URL above goes to ...
    http://h10025.www1.hp.com/ewfrf/wc/document?docname=c00874428&jumpid=otrecdoc/c01463616/en_us/c00874428/loc:2&custom_solutionid=rdc01463616&lc=en&dlc=en&cc=us

  • Printing document on multiple pages in Preview

    I have a very long document which is a list of folders. If I print it on one 8 1/2 x 11 sheet it is unreadable.
    Is there a way to have this very long document print out on 8 1/2 x 11 sheets so that - basically the width fills up the 8 1/2 but the length goes to five or ten or twenty sheets?
    I'm not sure if this is called Poster Printing or what but I'd love to find a way to get this out of my mac.
    TIA

    Hi. Thank very much.
    Can I just confirm that I have described this correctly?
    Basically I have already done a screencapture of this which I guess I would describe as having - say - 250 /rows/ in one column. I mean, basically I have something like a five or ten page Pages or Numbers spreadsheet except that it is in image format (png I think). So this is maybe 8 inches wide by 36 inches long. I can see it in Preview and I can blow it up or whatever, but I don't want this to print on one single page. I want to do a multi-page document but I am not sure how to explain this in Mac.
    Should I go with pdfpenpro to /print/ this document?
    Should I maybe open in in Adobe Elements 3 and see if there is an option in there?
    Since it is an image document I am not sure what to open it in to do this on the mac and while I have Aperture it is a bit of a pain to import a screenshot into aperture if I just want to print it and then delete it. Ideally I would open it in Preview and just ask preview not to scale it to print on one page (which it seems to be doing now)  but to print in on multiple pages at the "actual size" or a size of my choosing...
    I guess the mention of multi-column sort of got me confused as to whether we are on the same page (so to speak!).
    Thank you.
    Thanks

  • SAPscript print program for multiple pages

    Hello friends,
    How to write SAPscript print program for multiple pages? please help me.
    Thanks and regards,
    Shivanand.

    I believe you have posted this question in the wrong forum.  There is an ABAP Forms Printing Forum.

  • When I print I get multiple pages with a little print on all pages of what I want printed

    when I print I get multiple pages with what I am printing with a few lines on each page till what I have printed is complete.
    This question was solved.
    View Solution.

    mamorse,
    Thanks for the additional info. Lets try downloading and running the Print and Scan doctor located here. It can fix a lot on its own but if not it will give us a better idea of what is going on. The weak signal is not likely the culprit (as it has been working for a good while) but we can try altering that if other steps fail.
    You can say thanks by clicking the Kudos Star in my post. If my post resolves your problem, please mark it as Accepted Solution so others can benefit too.

  • Printing odd and even pages separately (manual duplex)

    Hi
    I searched the forum and found some similar problems regarding Adobe Reader 8.1.2 : Adobe Reader 8.1.2 doesn't print odd and even pages correctly
    This was posted more than a year ago. A few days ago I encountered the same problem with Adobe Acrobat 8.1.2. I suspected that it could be beacause of outdated software. I then applied incremental patches up to 8.1.5. But the problem still persists.

    The link was about Reader, but I tried it with AA8.1.5 on a 3 page document and did indeed find the same problem. The 1st page printed out, but the 3rd page was missing when printing the odd pages. When printing the even pages, the 2nd page printed out 2 times. The 3rd page never showed up. I think this is what you are talking about. Wonder if they fixed it in AA9?

  • Print JTable with Multiple pages and rows

    I took the printing example at http://java.sun.com/developer/onlineTraining/Programming/JDCBook/advprint.html#pe and modified it a bit to include the following:
    1) To Print Multiple pages
    2) To wrap lines that is too long for the column
    3) To print with a more proffesional style, so that it doesn't look like a screen capture is printed
    4) To align the numbers to the right and center column headings
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.print.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import java.awt.Dimension;
    import javax.print.*;
    import javax.print.attribute.*;
    import javax.print.attribute.standard.*;
    import java.text.*;
    public class Report implements Printable
         private final int LEFT_ALIGN = -1;
         private final int CENTER_ALIGN = 0;
         private final int RIGHT_ALIGN = 1;
         private JFrame frame;
         private JTable tableView;
         private String lastPrintDate;
         private Font defaultFont;
         private Font headerFont;
         private Font footerFont;
         private int headerHeight;
         private int footerHeight;
         private int cellBuffer = 5;
         private boolean first_pass;
         private ArrayList pages;
         public Report()
              frame = new JFrame("Sales Report");
              frame.addWindowListener(new WindowAdapter()
                   public void windowClosing(WindowEvent e)
                        System.exit(0);
              final String[] headers =
                   "ID",
                   "Description",
                   "open price",
                   "latest price",
                   "End Date",
                   "Quantity"
              int count = 0;
              final Object[][] data =
                   {new Integer(count++), "Box of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of BirosBox of Biros ppppppppppppppp", "1.00", "4.99", new Date(), new Integer(200000)},
                   {new Integer(count++), "Blue Biro", "0.10", "0.14", new Date(), new Integer(1)},
                   {new Integer(count++), "legal pad", "1.00", "2.49", new Date(), new Integer(1)},
                   {new Integer(count++), "tape", "1.00", "1.49", new Date(), new Integer(1)},
                   {new Integer(count++), "stapler", "4.00", "4.49", new Date(), new Integer(1)},
                   {new Integer(count++), "Box of Biros", "1.00", "4.99", new Date(), new Integer(2)},
                   {new Integer(count++), "Blue Biro", "0.10", "0.14", new Date(), new Integer(1)},
                   {new Integer(count++), "legal pad", "1.00", "2.49", new Date(), new Integer(1)},
                   {new Integer(count++), "tape", "1.00", "1.49", new Date(), new Integer(1)},
                   {new Integer(count++), "stapler", "4.00", "4.49", new Date(), new Integer(1)},
                   {new Integer(count++), "Box of Biros", "1.00", "4.99", new Date(), new Integer(2)},
                   {new Integer(count++), "Blue Biro", "0.10", "0.14", new Date(), new Integer(1)},
                   {new Integer(count++), "legal pad", "1.00", "2.49", new Date(), new Integer(1)},
                   {new Integer(count++), "tape", "1.00", "1.49", new Date(), new Integer(1)},
                   {new Integer(count++), "stapler", "4.00", "4.49", new Date(), new Integer(1)},
                   {new Integer(count++), "Box of Biros", "1.00", "4.99", new Date(), new Integer(2)},
                   {new Integer(count++), "Blue Biro", "0.10", "0.14", new Date(), new Integer(1)},
                   {new Integer(count++), "legal pad", "1.00", "2.49", new Date(), new Integer(1)},
                   {new Integer(count++), "tape", "1.00", "1.49", new Date(), new Integer(1)},
                   {new Integer(count++), "stapler", "4.00", "4.49", new Date(), new Integer(1)},
                   {new Integer(count++),  "Box of Biros", "1.00", "4.99", new Date(), new Integer(2)},
                   {new Integer(count++),  "Blue Biro", "0.10", "0.14", new Date(), new Integer(1)},
                   {new Integer(count++),  "legal pad", "1.00", "2.49", new Date(), new Integer(1)},
                   {new Integer(count++),  "tape", "1.00", "1.49", new Date(), new Integer(1)},
                   {new Integer(count++),  "stapler", "4.00", "4.49", new Date(), new Integer(1)},
                   {new Integer(count++),  "Box of Biros", "1.00", "4.99", new Date(), new Integer(2)},
                   {new Integer(count++),  "Blue Biro", "0.10", "0.14", new Date(), new Integer(1)},
                   {new Integer(count++),  "legal pad", "1.00", "2.49", new Date(), new Integer(1)},
                   {new Integer(count++),  "tape", "1.00", "1.49", new Date(), new Integer(1)},
                   {new Integer(count++),  "stapler", "4.00", "4.49", new Date(), new Integer(1)},
                   {new Integer(count++),  "Box of Biros", "1.00", "4.99", new Date(), new Integer(2)}
              TableModel dataModel = new AbstractTableModel()
                   public int getColumnCount() { return headers.length; }
                   public int getRowCount() { return data.length;}
                   public Object getValueAt(int row, int col)
                        return data[row][col];
                   public String getColumnName(int column)
                        return headers[column];
                   public Class getColumnClass(int col)
                        return getValueAt(0,col).getClass();
                   public boolean isCellEditable(int row, int col)
                        return (col==1);
                   public void setValueAt(Object aValue, int row, int column)
                        data[row][column] = aValue;
              tableView = new JTable(dataModel);
              JScrollPane scrollpane = new JScrollPane(tableView);
              scrollpane.setPreferredSize(new Dimension(500, 80));
              frame.getContentPane().setLayout(new BorderLayout());
              frame.getContentPane().add(BorderLayout.CENTER,scrollpane);
              frame.pack();
              JButton printButton= new JButton();
              printButton.setText("print me!");
              frame.getContentPane().add(BorderLayout.SOUTH,printButton);
              // for faster printing turn double buffering off
              RepaintManager.currentManager(frame).setDoubleBufferingEnabled(false);
              printButton.addActionListener( new ActionListener()
                   public void actionPerformed(ActionEvent evt)
                        doPrint();
              frame.setVisible(true);
          * Reset variables before printing
         private void prepareForPrint()
              pages = new ArrayList();
              first_pass = true;
          * Display a print dialog with some hardcoded defaults
          * The print fonts are also hardcoded
         public void doPrint()
              try
                   String jobName = "Java Report";
                   defaultFont = new Font("Arial", Font.PLAIN, 8);
                   footerFont = new Font("Arial", Font.PLAIN, 6);
                   headerFont = new Font("Arial", Font.BOLD, 10);
                   PrinterJob prnJob = PrinterJob.getPrinterJob();
                   prnJob.setPrintable(this);
                   PrintRequestAttributeSet prnSet = new HashPrintRequestAttributeSet();
                   prnSet.add(new Copies(1));
                   prnSet.add(new JobName(jobName, null));
                   prnSet.add(MediaSizeName.ISO_A4);
                   PageFormat pf = prnJob.defaultPage();
                   pf.setOrientation(java.awt.print.PageFormat.PORTRAIT);
                   prnJob.setJobName(jobName);
                   PrintService[] services = PrinterJob.lookupPrintServices();
                   if (services.length > 0)
                        if (prnJob.printDialog(prnSet))
                              * Get print date
                             String dateFormat = "dd/MM/yyyy HH:mm:ss";
                             DateFormat m_DateFormat = new SimpleDateFormat(dateFormat);
                             lastPrintDate = m_DateFormat.format(new Date()).toString();
                             prepareForPrint();
                             prnJob.print(prnSet);
                   else
                        JOptionPane.showMessageDialog(frame, "No Printer was found!!", "Printer Error", JOptionPane.ERROR_MESSAGE);
                        return;
              catch (PrinterException e)
                   e.printStackTrace();
         public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException
               * Check if this is the first time the print method is called for this print action.
               * It is not guaranteed that the print will be called with synchronous pageIndex'es,
               * so we need to calculate the number of pages and which rows appear on which pages.
               * Then the correct page will be printed regardless of which pageIndex is sent through.
              if (first_pass)
                   calcPages(g, pageFormat);
              first_pass = false;
              // Stop printing if the pageIndex is out of range
              if (pageIndex >= pages.size())
                   return NO_SUCH_PAGE;
              Graphics2D     g2 = (Graphics2D) g;
              g2.setColor(Color.black);
              // The footer will be one line at the bottom of the page, cater for this.
              g2.setFont(footerFont);
              footerHeight = g2.getFontMetrics().getHeight() + g2.getFontMetrics().getDescent();
              g2.setFont(defaultFont);
              FontMetrics fontMetrics = g2.getFontMetrics();
              int fontHeight = fontMetrics.getHeight();
              int fontDescent = fontMetrics.getDescent();
              double pageHeight = pageFormat.getImageableHeight() + pageFormat.getImageableY();
              double pageWidth = pageFormat.getImageableWidth();
              double tableWidth = (double) tableView.getColumnModel().getTotalColumnWidth();
              // Shrink or expand the table to fit the page width
              double scale = pageWidth / (tableWidth+ (cellBuffer * tableView.getColumnCount()));
              // Calculate the width in pixels for each column
              double[] columnWidths = new double[tableView.getColumnCount()];
              for(int i = 0; i < tableView.getColumnCount(); i++)
                   columnWidths[i] = (double)tableView.getColumnModel().getColumn(i).getWidth() * scale;
              // Reset the view to the start of the page
              g2.translate(0, 0);
              // Draw a rectangle to see the printable area
              g2.draw3DRect((int)pageFormat.getImageableX(),
                        (int)pageFormat.getImageableY(),
                        (int)pageFormat.getImageableWidth(),
                        (int)pageFormat.getImageableHeight(),
                        false);
              // Calculate the header height
              g2.setFont(headerFont);
              fontMetrics = g2.getFontMetrics();
              // Print the headers and retreive the starting position for the data
              int next_row = printLine(g2, pageFormat, fontMetrics, -1, (int)pageFormat.getImageableY() + fontHeight, columnWidths);
              g2.setFont(defaultFont);
              fontMetrics = g2.getFontMetrics();
              // Start printing the detail
              ArrayList page = (ArrayList)pages.get(pageIndex);
              int start = ((Integer)page.get(0)).intValue();
              int end = ((Integer)page.get(1)).intValue();
              for (int i = start; i <= end; i++)
                   next_row = printLine(g2, pageFormat, fontMetrics, i, next_row, columnWidths);
              // Print the footer
              g2.setFont(footerFont);
              String pageFooter = "Page " + (pageIndex + 1) + " - " + lastPrintDate;
              g2.drawString(pageFooter,
                             (int)pageFormat.getWidth() / 2 - (fontMetrics.stringWidth(pageFooter) / 2),
                             (int)(pageHeight - fontDescent));
              return PAGE_EXISTS;
          * We can't guarantee that the same amount of rows will be displayed on each page,
          * the row heights are dynamic and may wrap onto 2 or more lines.
          * Thus we need to calculate the height of each row and then test how may rows
          * fit on a specific page. eg. Page 1 contains rows 1 to 10, Page 2 contains rows 11 to 15 etc.
         public void calcPages(Graphics g, PageFormat pageFormat) throws PrinterException
              Graphics2D     g2 = (Graphics2D) g;
              g2.setColor(Color.black);
              // The footer will be one line at the bottom of the page, cater for this.
              g2.setFont(footerFont);
              footerHeight = g2.getFontMetrics().getHeight() + g2.getFontMetrics().getDescent();
              g2.setFont(defaultFont);
              FontMetrics fontMetrics = g2.getFontMetrics();
              int fontHeight = fontMetrics.getHeight();
              int fontDescent = fontMetrics.getDescent();
              double pageHeight = pageFormat.getImageableHeight() - fontHeight;
              double pageWidth = pageFormat.getImageableWidth();
              double tableWidth = (double) tableView.getColumnModel().getTotalColumnWidth();
              // Shrink or expand the table to fit the page width
              double scale = pageWidth / (tableWidth+ (cellBuffer * tableView.getColumnCount()));
              // Calculate the width in pixels for each column
              double[] columnWidths = new double[tableView.getColumnCount()];
              for(int i = 0; i < tableView.getColumnCount(); i++)
                   columnWidths[i] = (double)tableView.getColumnModel().getColumn(i).getWidth() * scale;
              // Calculate the header height
              int maxHeight = 0;
              g2.setFont(headerFont);
              fontMetrics = g2.getFontMetrics();
              for (int j = 0; j < tableView.getColumnCount(); j++)
                   String value = tableView.getColumnName(j).toString();
                   int numLines = (int)Math.ceil(fontMetrics.stringWidth(value) / columnWidths[j]);
                   if (numLines > maxHeight)
                        maxHeight = numLines;
              headerHeight = g2.getFontMetrics().getHeight() * maxHeight;
              g2.setFont(defaultFont);
              fontMetrics = g2.getFontMetrics();
              int pageNum = 0;
              int bottom_of_page = (int)(pageFormat.getImageableHeight() + pageFormat.getImageableY()) - footerHeight;
              int prev_row = 0;
              int next_row = (int)pageFormat.getImageableY() + fontHeight + headerHeight;
              int i = 0;
              ArrayList page = new ArrayList();
              page.add(new Integer(0));
              for (i = 0; i < tableView.getRowCount(); i++)
                   maxHeight = 0;
                   for (int j = 0; j < tableView.getColumnCount(); j++)
                        String value = tableView.getValueAt(i, j).toString();
                        int numLines = (int)Math.ceil(fontMetrics.stringWidth(value) / columnWidths[j]);
                        if (numLines > maxHeight)
                             maxHeight = numLines;
                   prev_row = next_row;
                   next_row += (fontHeight * maxHeight);
                   // If we've reached the bottom of the page then set the current page's end row
                   if (next_row > bottom_of_page)
                        page.add(new Integer(i - 1));
                        pages.add(page);
                        page = new ArrayList();
                        page.add(new Integer(i));
                        pageNum++;
                        next_row = (int)pageFormat.getImageableY()
                                       + fontHeight
                                       + ((int)pageFormat.getHeight() * pageNum)
                                       + headerHeight;
                        bottom_of_page = (int)(pageFormat.getImageableHeight()
                                            + pageFormat.getImageableY())
                                            + ((int)pageFormat.getHeight() * pageNum)
                                            - footerHeight;
                        //Include the current row on the next page, because there is no space on this page
                        i--;
              page.add(new Integer(i - 1));
              pages.add(page);
          * Print the headers or a row from the table to the graphics context
          * Return the position of the row following this one
         public int printLine(Graphics2D g2,
                                       PageFormat pageFormat,
                                       FontMetrics fontMetrics,
                                       int rowNum,
                                       int next_row,
                                       double[] columnWidths)
                   throws PrinterException
              int lead = 0;
              int maxHeight = 0;
              for (int j = 0; j < tableView.getColumnCount(); j++)
                   String value = null;
                   int align = LEFT_ALIGN;
                   if (rowNum > -1)
                        Object obj = tableView.getValueAt(rowNum, j);
                        if (obj instanceof Number)
                             align = RIGHT_ALIGN;
                        value = obj.toString();
                   else
                        align = CENTER_ALIGN;
                        value = tableView.getColumnName(j);
                   int numLines = (int)Math.ceil(fontMetrics.stringWidth(value) / columnWidths[j]);
                   if (numLines > maxHeight)
                        maxHeight = numLines;
                   if (fontMetrics.stringWidth(value) < columnWidths[j])
                        // Single line
                        int offset = 0;
                        // Work out the offset from the start of the column to display alignment correctly
                        switch (align)
                             case RIGHT_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value)); break;
                             case CENTER_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value)) / 2; break;
                             default: offset = 0; break;
                        g2.drawString(value,
                                       lead + (int)(pageFormat.getImageableX() + offset),
                                       next_row);
                   else
                        for(int a = 0; a < numLines; a++)
                             //Multi-Line
                             int x = 0;
                             int width = 0;
                             for(x = 0; x < value.length(); x++)
                                  width += fontMetrics.charWidth(value.charAt(x));
                                  if (width > columnWidths[j])
                                       break;
                             int offset = 0;
                             // Work out the offset from the start of the column to display alignment correctly
                             switch (align)
                                  case RIGHT_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value)); break;
                                  case CENTER_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value)) / 2; break;
                                  default: offset = 0; break;
                             g2.drawString(value.substring(0, x),
                                            lead + (int)(pageFormat.getImageableX() + offset),
                                            next_row + (fontMetrics.getHeight() * a));                    
                             value = value.substring(x);
                   lead += columnWidths[j] + cellBuffer;
              // Draw a solid line below the row
              g2.draw(new Line2D.Double(pageFormat.getImageableX(),
                             next_row + (fontMetrics.getHeight() * (maxHeight - 1)) + fontMetrics.getDescent(),
                             pageFormat.getImageableY() + pageFormat.getImageableWidth(),
                             next_row + (fontMetrics.getHeight() * (maxHeight - 1)) + fontMetrics.getDescent()));
              // Return the position of the row following this one
              return next_row + (fontMetrics.getHeight() * maxHeight);
         public static void main(String[] args)
              new Report();
    }

    Fixed some bugs and added a title. Just pass in a JTable and the class will do the rest.
    import javax.swing.*;
    import javax.swing.table.*;
    import java.awt.print.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.geom.*;
    import javax.print.*;
    import javax.print.attribute.*;
    import javax.print.attribute.standard.*;
    import java.text.*;
    import java.math.*;
    public class PrintJTable implements Printable
         private final int LEFT_ALIGN = -1;
         private final int CENTER_ALIGN = 0;
         private final int RIGHT_ALIGN = 1;
         private JFrame m_parent;
         private String m_title;
         private JTable tableView;
         private String lastPrintDate;
         private Font defaultFont;
         private Font headerFont;
         private Font footerFont;
         private int headerHeight;
         private int footerHeight;
         private int cellBuffer = 5;
         private boolean first_pass;
         private ArrayList pages;
         public PrintJTable(JFrame parent, JTable table)
              m_parent = parent;
              tableView = table;
              doPrint();
         public PrintJTable(JFrame parent, String title, JTable table)
              m_parent = parent;
              m_title = title;
              tableView = table;
              doPrint();
          * Reset variables before printing
         private void prepareForPrint()
              pages = new ArrayList();
              first_pass = true;
          * Display a print dialog with some hardcoded defaults
          * The print fonts are also hardcoded
         public void doPrint()
              try
                   String jobName = "Java Report";
                   defaultFont = new Font("Arial", Font.PLAIN, 8);
                   footerFont = new Font("Arial", Font.PLAIN, 6);
                   headerFont = new Font("Arial", Font.BOLD, 8);
                   PrinterJob prnJob = PrinterJob.getPrinterJob();
                   prnJob.setPrintable(this);
                   PrintRequestAttributeSet prnSet = new HashPrintRequestAttributeSet();
                   prnSet.add(new Copies(1));
                   prnSet.add(new JobName(jobName, null));
                   prnSet.add(MediaSizeName.ISO_A4);
                   PageFormat pf = prnJob.defaultPage();
                   pf.setOrientation(java.awt.print.PageFormat.PORTRAIT);
                   prnJob.setJobName(jobName);
                   PrintService[] services = PrinterJob.lookupPrintServices();
                   if (services.length > 0)
                        if (prnJob.printDialog(prnSet))
                              * Get print date
                             String dateFormat = "dd/MM/yyyy HH:mm:ss";
                             DateFormat m_DateFormat = new SimpleDateFormat(dateFormat);
                             lastPrintDate = m_DateFormat.format(new Date()).toString();
                             prepareForPrint();
                             prnJob.print(prnSet);
                   else
                        JOptionPane.showMessageDialog(m_parent, "No Printer was found!!", "Printer Error", JOptionPane.ERROR_MESSAGE);
                        return;
              catch (PrinterException e)
                   e.printStackTrace();
         public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException
               * Check if this is the first time the print method is called for this print action.
               * It is not guaranteed that the print will be called with synchronous pageIndex'es,
               * so we need to calculate the number of pages and which rows appear on which pages.
               * Then the correct page will be printed regardless of which pageIndex is sent through.
              if (first_pass)
                   calcPages(g, pageFormat);
              first_pass = false;
              // Stop printing if the pageIndex is out of range
              if (pageIndex >= pages.size())
                   return NO_SUCH_PAGE;
              Graphics2D     g2 = (Graphics2D) g;
              g2.setColor(Color.black);
              // The footer will be one line at the bottom of the page, cater for this.
              g2.setFont(footerFont);
              footerHeight = g2.getFontMetrics().getHeight() + g2.getFontMetrics().getDescent();
              g2.setFont(defaultFont);
              FontMetrics fontMetrics = g2.getFontMetrics();
              int fontHeight = fontMetrics.getHeight();
              int fontDescent = fontMetrics.getDescent();
              double pageHeight = pageFormat.getImageableHeight() + pageFormat.getImageableY();
              double pageWidth = pageFormat.getImageableWidth();
              double tableWidth = (double) tableView.getColumnModel().getTotalColumnWidth();
              // Shrink or expand the table to fit the page width
              double scale = (pageWidth - (cellBuffer * tableView.getColumnCount())) / tableWidth;
              // Calculate the width in pixels for each column
              double[] columnWidths = new double[tableView.getColumnCount()];
              double test = 0;
              for(int i = 0; i < tableView.getColumnCount(); i++)
                   columnWidths[i] = (double)Math.floor(tableView.getColumnModel().getColumn(i).getWidth() * scale);
                   test += columnWidths;
              // Reset the view to the start of the page
              g2.translate(0, 0);
              // Draw a rectangle to see the printable area
              g2.draw3DRect((int)pageFormat.getImageableX(),
                        (int)pageFormat.getImageableY(),
                        (int)pageFormat.getImageableWidth(),
                        (int)pageFormat.getImageableHeight(),
                        false);
              // Calculate the header height
              g2.setFont(headerFont);
              fontMetrics = g2.getFontMetrics();
              // Print the headers and retreive the starting position for the data
              int next_row = (int)pageFormat.getImageableY() + fontMetrics.getHeight();
              if ((m_title != null) && (!m_title.equalsIgnoreCase("")))
                   g2.drawString(m_title,
                                       (int)(pageFormat.getImageableX()),
                                       next_row);
                   Color current_color = g2.getColor();
                   g2.setColor(Color.lightGray);
                   int y = next_row + fontMetrics.getDescent();
                   g2.draw(new Line2D.Double(pageFormat.getImageableX(),
                                  y,
                                  (pageFormat.getImageableY() + pageFormat.getImageableWidth()),
                                  y));
                   g2.setColor(current_color);
                   next_row += fontMetrics.getHeight();
              next_row = printLine(g2, pageFormat, fontMetrics, -1, next_row, columnWidths);
              g2.setFont(defaultFont);
              fontMetrics = g2.getFontMetrics();
              // Start printing the detail
              ArrayList page = (ArrayList)pages.get(pageIndex);
              int start = ((Integer)page.get(0)).intValue();
              int end = ((Integer)page.get(1)).intValue();
              for (int i = start; i <= end; i++)
                   next_row = printLine(g2, pageFormat, fontMetrics, i, next_row, columnWidths);
              // Print the footer
              g2.setFont(footerFont);
              String pageFooter = "Page " + (pageIndex + 1) + " - " + lastPrintDate;
              g2.drawString(pageFooter,
                             (int)pageFormat.getWidth() / 2 - (fontMetrics.stringWidth(pageFooter) / 2),
                             (int)(pageHeight - fontDescent));
              return PAGE_EXISTS;
         * We can't guarantee that the same amount of rows will be displayed on each page,
         * the row heights are dynamic and may wrap onto 2 or more lines.
         * Thus we need to calculate the height of each row and then test how may rows
         * fit on a specific page. eg. Page 1 contains rows 1 to 10, Page 2 contains rows 11 to 15 etc.
         public void calcPages(Graphics g, PageFormat pageFormat) throws PrinterException
              Graphics2D     g2 = (Graphics2D) g;
              g2.setColor(Color.black);
              // The footer will be one line at the bottom of the page, cater for this.
              g2.setFont(footerFont);
              footerHeight = g2.getFontMetrics().getHeight() + g2.getFontMetrics().getDescent();
              g2.setFont(defaultFont);
              FontMetrics fontMetrics = g2.getFontMetrics();
              int fontHeight = fontMetrics.getHeight();
              int fontDescent = fontMetrics.getDescent();
              double pageHeight = pageFormat.getImageableHeight() - fontHeight;
              double pageWidth = pageFormat.getImageableWidth();
              double tableWidth = (double) tableView.getColumnModel().getTotalColumnWidth();
              // Shrink or expand the table to fit the page width
              double scale = (pageWidth - (cellBuffer * tableView.getColumnCount())) / tableWidth;
              // Calculate the width in pixels for each column
              double[] columnWidths = new double[tableView.getColumnCount()];
              for(int i = 0; i < tableView.getColumnCount(); i++)
                   columnWidths[i] = (double)Math.floor(tableView.getColumnModel().getColumn(i).getWidth() * scale);
              // Calculate the header height
              int maxHeight = 0;
              g2.setFont(headerFont);
              fontMetrics = g2.getFontMetrics();
              headerHeight = 0;
              if ((m_title != null) && (!m_title.equalsIgnoreCase("")))
                   headerHeight = fontMetrics.getHeight();
              for (int j = 0; j < tableView.getColumnCount(); j++)
                   String value = tableView.getColumnName(j).toString();
                   int numLines = (int)Math.ceil(fontMetrics.stringWidth(value) / columnWidths[j]);
                   if (numLines > maxHeight)
                        maxHeight = numLines;
              headerHeight += g2.getFontMetrics().getHeight() * maxHeight;
              g2.setFont(defaultFont);
              fontMetrics = g2.getFontMetrics();
              int pageNum = 0;
              int bottom_of_page = (int)(pageFormat.getImageableHeight() + pageFormat.getImageableY()) - footerHeight;
              int prev_row = 0;
              int next_row = (int)pageFormat.getImageableY() + fontHeight + headerHeight;
              int i = 0;
              ArrayList page = new ArrayList();
              page.add(new Integer(0));
              for (i = 0; i < tableView.getRowCount(); i++)
                   maxHeight = 0;
                   for (int j = 0; j < tableView.getColumnCount(); j++)
                        String value = formatObject(tableView.getValueAt(i, j));
                        int numLines = (int)Math.ceil(fontMetrics.stringWidth(value) / columnWidths[j]);
                        if (numLines > maxHeight)
                             maxHeight = numLines;
                   prev_row = next_row;
                   next_row += (fontHeight * maxHeight);
                   // If we've reached the bottom of the page then set the current page's end row
                   if (next_row > bottom_of_page)
                        page.add(new Integer(i - 1));
                        pages.add(page);
                        page = new ArrayList();
                        page.add(new Integer(i));
                        pageNum++;
                        next_row = (int)pageFormat.getImageableY()
                                       + fontHeight
                                       + ((int)pageFormat.getHeight() * pageNum)
                                       + headerHeight;
                        bottom_of_page = (int)(pageFormat.getImageableHeight()
                                            + pageFormat.getImageableY())
                                            + ((int)pageFormat.getHeight() * pageNum)
                                            - footerHeight;
                        //Include the current row on the next page, because there is no space on this page
                        i--;
              page.add(new Integer(i - 1));
              pages.add(page);
         * Print the headers or a row from the table to the graphics context
         * Return the position of the row following this one
         public int printLine(Graphics2D g2,
                                       PageFormat pageFormat,
                                       FontMetrics fontMetrics,
                                       int rowNum,
                                       int next_row,
                                       double[] columnWidths)
                   throws PrinterException
              int lead = 0;
              int maxHeight = 0;
              for (int j = 0; j < tableView.getColumnCount(); j++)
                   String value = null;
                   int align = LEFT_ALIGN;
                   if (rowNum > -1)
                        Object obj = tableView.getValueAt(rowNum, j);
                        if (obj instanceof Number)
                             align = RIGHT_ALIGN;
                        value = formatObject(obj);
                   else
                        //align = CENTER_ALIGN;
                        value = tableView.getColumnName(j);
                   int numLines = (int)Math.ceil(fontMetrics.stringWidth(value) / columnWidths[j]);
                   if (numLines > maxHeight)
                        maxHeight = numLines;
                   if (fontMetrics.stringWidth(value) < columnWidths[j])
                        // Single line
                        int offset = 0;
                        // Work out the offset from the start of the column to display alignment correctly
                        switch (align)
                             case RIGHT_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value)); break;
                             case CENTER_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value)) / 2; break;
                             default: offset = 0; break;
                        g2.drawString(value,
                                       lead + (int)(pageFormat.getImageableX() + offset),
                                       next_row);
                   else
                        for(int a = 0; a < numLines; a++)
                             //Multi-Line
                             int x = 0;
                             int width = 0;
                             for(x = 0; x < value.length(); x++)
                                  width += fontMetrics.charWidth(value.charAt(x));
                                  if (width > columnWidths[j])
                                       break;
                             int offset = 0;
                             // Work out the offset from the start of the column to display alignment correctly
                             switch (align)
                                  case RIGHT_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value.substring(0, x))); break;
                                  case CENTER_ALIGN: offset = (int)(columnWidths[j] - fontMetrics.stringWidth(value.substring(0, x))) / 2; break;
                                  default: offset = 0; break;
                             g2.drawString(value.substring(0, x),
                                            lead + (int)(pageFormat.getImageableX() + offset),
                                            next_row + (fontMetrics.getHeight() * a));                    
                             value = value.substring(x);
                   lead += columnWidths[j] + cellBuffer;
              // Draw a solid line below the row
              Color current_color = g2.getColor();
              g2.setColor(Color.lightGray);
              int y = next_row + (fontMetrics.getHeight() * (maxHeight - 1)) + fontMetrics.getDescent();
              g2.draw(new Line2D.Double(pageFormat.getImageableX(),
                             y,
                             (pageFormat.getImageableY() + pageFormat.getImageableWidth()),
                             y));
              g2.setColor(current_color);
              // Return the position of the row following this one
              return next_row + (fontMetrics.getHeight() * maxHeight);
         public String formatObject(Object obj)
              String value = (obj == null) ? "" : obj.toString();
              return value;

  • Safari Reader and multiple page stories

    The link below takes you to a five page story in the Washington Post. Reader will only display the first two pages of the story. There is also an ad that appears in Reader at the bottom of the second page. Is there some trick I'm missing to try and get the entire story to display in Reader? I'm able to read other multiple page stories on other newspaper and non-newspaper sites.
    I've tried paging though the story without Reader to see if it would save it in cache and then opening Reader but it still only displays two pages at a time.
    Here's the link:
    http://www.washingtonpost.com/wp-dyn/content/article/2010/07/02/AR2010070202983_ 4.html?sid=ST2010070203263
    BTW, I think Reader is the best new function introduced in a web browser in quite a few years.

    Greetings,
    Thanks for your fast and courteous replies.
    I cannot see any button or other icon at the bottom of Reader that would allow me to continue to the next page. The only icons visible are: Zoom, Email, Print and Close. I tried emailing the story to myself just to see what it would send and I only got the first two pages plus the jewelry ad at the bottom of the second page. It sends the document just as Reader displays it. Sorry if this is something obvious I'm missing.
    Since you can see these buttons and I can't I'm going to assume this is something peculiar to my installation. I can't imagine what that may be but I'll keep rooting around and see what I can find.
    Thanks again!

  • Laserjet Pro 200 M251NW printing Garbage characters multiple pages after just setting up

     I am installing the printer for the first time on a Dell Optiplex with Windows 7 32bit, it is about a year old and is working fine with other printers. The printer was working fine through USB on a laptop running windows XP. 
    Connected the printer to an open USB on the computer and the auto install started running from the printer. It seemed to run OK, I followed all of the prompts, etc. When I said it should print a test page it started printing multiple pages each with a few lines of what I would call garbage text, strange characters, spaces, random letters, etc. It kept printing pages and I had to turn the printer off to get it to stop. 
    I was thinking that maybe the drivers from the printer were old and not for Windows 7, so I then download the full driver from the HP website and installed that. It said it would uninstall the original driver, which it did, then it installed and again all seemed OK until I printed the test page, and the same thing as above happened. I also tried printing some text from notepad and it went to the print queue then disappeared. It still seemed like a driver problem to me so I manually uninstalled from the start menu program Uninstall for the printer. This time I downloaded the basic driver and installed - still with the same result. I thought maybe it was because the Quick STart from the printer kept loading when the printer was turned on so I turned it off from the menu on the printer, but it still didn't help. I also tried another USB port on the computer with the same result. 
    Is it possible there is software left from the first install that may not have been for Windows 7 and it needs to be removed manually?? 
    Any help from HP or anyone would be greatly appreciated as I need to get this printer running for our shipping system ASAP.
    Thanks,
    Rich

    I tried all of those things and it is always the same result. Even on the network, printing from the same computer. I was able to print properly from a different computer, to the HP 200 connected to the USB and shared on the original computer - so I then knew the USB was OK.
    I was looking online further and found the HP Universal  PCL6 driver, and it actually worked! I don't really understand why the proper driver will not work with the printer though. I even created a new user on the computer so all of the programs, etc. would not load, then I uninstalled and reinstalled the driver - still same problem. The computer also has drivers and printer software for Epson printers, so I don't know if that could be causing some type of problem.
    It is good that we can at least do basic printing but I really should have the fully functional driver working for the system. Any help from anyone, and hopefully HP monitors these discussions and can help out.
    Thanks,
    Rich

  • Printing Problem - Incomplete multiple page print job - until paper runs out

    I'm on Mac OS 10.9.3 printing to a Samsung CLX-6250FX. This is a network printer used by all the Apple/Window computers in this office.
    I am having terrible problems recently with printing multiple page documents - excel, word, email, pdf etc. I am spending a fortune in paper and printer cartridges.
    The print job does not complete and the last page printed, the following message prints:
    ERROR: syntaxerror
    OFFENDING COMMAND: true        cvt      Tfpgm     nglyf      '   ^  head
    STACK:
    -mark-
    /sfnts
    Then the same printer job restarts and fails at the same point until the printer tray runs out of paper (unless the print job is aborted and/or the printer is turned off and turned on again)!!
    The specific error message displayed by the printer software is either "Remote host did not accept data file (32)" or "Remote host did not accept data file (105)".
    I haven't seen any pattern whatsoever in terms of application used.
    I have deleted the printer and reloaded the driver from the disk supplied with the printer. I have checked to see that I am running the most recent driver.
    I've already reset the printing system, but that didn't fix it.
    I have seen this problem on various support communities pages, but for different printers.
    I have yet to see a solution - Any other recommendations please?

    The error message you see printed is a Postscript error. With your printer, postscript (normal output type from applications) is converted to the printer's page description language before being sent to the printer. So, I believe the problem is in some part of the driver software.
    For first step, I would try restarting from the Recovery partition and repair the hard drive using Disk Utility. You can repair permission, too. This is trying to correct a corrupted file.
    http://support.apple.com/kb/ht4718
    (just read the first paragraph)
    If that doesn't fix it, I would try downloading and installing the latest driver for the printer.
    Come back for more if that still doesn't work.

  • Printing Portrait and Landscape pages on same report

    Hi all,
    Oracle E-Business Suite 11.5.10.2
    Oracle Reports Builder 6i
    I am developing atwo-sided EBS report which I require to detail invoice lines in Portrait orientation on one side and then have a landscape layout detailing other related information on the back.
    I am using the Main Section to display the Portrait orientation and the Trailer Section to display the Landscape orientation.
    This is producing the correct output when there is one invoice. However when there are multiple invoices selected in the Data Model, all the Portrait Invoice Line pages (Main Section) are printed first and then the Landscape Additional pages (Trailer Section).
    Does anyone have any suggestions to get around this issue?
    Kind Regards,
    Gary.

    In the pages panel, choose Rotate Spread View from the panel menu.

  • Oracle reports and multiple pages

    I am new the Oracle Reports and I am trying to generate a report that can continue to the another page. For instance, if my list of items exceeds the first page of the report, the remaining items will be printed on the next page. We can get it to continue to the next page, but the formatting of the following pages after the first page needs to be different. Currently, it is placing the remaining items in the same position as the first page. The remaining items should be further up the page.
    In short, how do I generate 1 report with 2 different formats. All pages beside the 1st page will be the same.
    Any guidance is appreciated.

    Please post the details of the application release, database version and OS.
    I would like to ask for your help regarding printing from concurrent requests.
    I am currently having an issue with printing multiple pages from Oracle reports, both in text format and RTF/PDF formats.
    When I generate a multiple page report and print it directly from a concurrent request, print outs generate extra space after each page even though page size is indicated in the reports (all of them are in letter size).What if you print the output file from the OS, can you reproduce the issue then?
    Troubleshooting (Printing) [ID 104528.1]
    An Extra Empty Page Is Printed at the End of Requests Output [ID 1011499.7]
    I have already tried editing the printer drivers both the actual driver config file and through the application but the results are still the same.Can you reproduce the issue with other printers?
    This is very important since printing is done on continuous paper and continuous pre-printed forms
    Any ideas would be greatly appreciated.If the issue is urgent, please log a SR.
    Thanks,
    Hussein

  • Nested Tables and Multiple Pages

    Hi,
    I have a problem with nested tables that span multiple pages.
    Lets assume I want to create a list of orders. Each order contains several order items. As long as an order contains less order items than fit to one page the list is rendered correctly. But if an order contain more items all items that can´t be displayed at the first page are cut off.
    I´ve tried so many combinations of subforms with flow content and position content, subform sets and "Allow Page Breaks within Content" as well as Layout Property "Expand to fit" but nothing helped.
    Can someone tell me if and how I can achieve this. In the meantime I do work in Designer directly with a XML datasource. So I could send you the form and example data.
    I´m working with NW04 SP11 and Adobe Designer 6.0
    Best regards
    Helmut

    Hello Helmut,
    There are some limitations and bugs in your requirement.
    Please see the output after copying into notepad.
    1.Eventhough if you give overflow leader , the headers for item table will not repeat.it is a bug.this is not solved in designer 7.1 also.
    2.There are some accessibilty bugs in case of nested table.
    Please follow the below design in the hierachy tab.
    MainTable (subform)
          |---- Header (subform)
          |      |- Header texts for Main table   +
          |      |-     Text for nested table
          |---- DATA_main (subform)     
                 |-Main table fields
              |-ITEMDATA ( Table SUBFORM)  
                     |-Header (Subform)
                     |   |-ItemHeader texts
                     |-DATA_item (subform)
                        |-Item data fields     
    for DATA_main and DATA_item subforms, set repeat count MIN in binding tab.Set all flow content and allow page break with in the content.
    The output will appear in the following manner.
    <b>( Copy the below text into the notepad. )</b>
    <b>Order no.     text                 customer
                    Order items</b>
    =================================================================
    1             Computer             Mr. Smith
       <b>Order item no.     short text          quantity        price</b>  
        10                 PC Tower            1               400.00
        20                 LCD Display         1               200.00
        30                 Keyboard            1                15.00
        40                 Mouse               1                10.00
    2             Notebook             Mrs. Parker
       <b>Order item no.     short text          quantity        price</b>  
        10                 HP Notebook         1               600.00
        20                 Ext. hard drive     1                80.00
    let me know if u didnt get the solution.
    Thanks and Regards,
    Pavan Meda

  • How to print legal and letter pages from one pdf on a dual paper printer?

    Hello,
    How do I print one pdf which includes both legal and letter sized pages on the respective sized paper?
    I purchased Brothers' HL-5470DWT dual paper printer for this specific task. The printer is configured to recognize the second tray (although the paper size is undetermined...) and the print setting includes setting the "Scaling" to "Fit to Paper Size".
    Of course, the box is checked for "Choose paper source for pdf page size".
    I should be able to configure my print settings and the printer should determine whether to print on legal or letter sized paper. I am using Windows XP sp3 and Adobe Reader 9.5 because I learned that Adobe Reader X was not compatible with dual paper printers. Brother's help desk referred me to Adobe...  Any help would be appreciated. Thank you in advance.

    Have you attempted without including the option "Fit to Paper Size"; set scaling to None.

Maybe you are looking for