2011-12-28 6 views
2

iText 라이브러리로 PDF를 작성하는 Java 코드를 작성 했으므로 iText를 사용하여이 PDF를 인쇄 할 수 없어서 인터넷 검색을 수행하고 있습니다. PDFrenderer라는 Java PDF 라이브러리. 질문은 PDFrenderer 라이브러리를 사용하여 PDF 파일을 인쇄하는 데 도움이되는 프로그램을 작성하는 방법입니다. pdfwriter 코드가 iText를 사용하여 작성되었다고 가정합니다. 고객이 PDF를 생성하여 프린터로 직접 보낼 수있는 응용 프로그램 (데스크톱)을 개발 중입니다.iText로 만든 PDF를 인쇄 할 때 Java 코드를 작성하는 방법

어떤 도움

Mouad

답변

1

...

public class PDFPrinter { 

public PDFPrinter(File file) { 
    try { 
     FileInputStream fis = new FileInputStream(file); 
     FileChannel fc = fis.getChannel(); 
     ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size()); 
     fis.close(); 
     fc.close(); 
     PDFFile pdfFile = new PDFFile(bb); // Create PDF Print Page 
     PDFPrintPage pages = new PDFPrintPage(pdfFile); 

     // Create Print Job 
     PrinterJob pjob = PrinterJob.getPrinterJob(); 
     PageFormat pf = PrinterJob.getPrinterJob().defaultPage(); 
     Paper a4paper = new Paper(); 
     double paperWidth = 8.26; 
     double paperHeight = 11.69; 
     a4paper.setSize(paperWidth * 72.0, paperHeight * 72.0); 

     /* 
     * set the margins respectively the imageable area 
     */ 
     double leftMargin = 0.3; 
     double rightMargin = 0.3; 
     double topMargin = 0.5; 
     double bottomMargin = 0.5; 

     a4paper.setImageableArea(leftMargin * 72.0, topMargin * 72.0, 
       (paperWidth - leftMargin - rightMargin) * 72.0, 
       (paperHeight - topMargin - bottomMargin) * 72.0); 
     pf.setPaper(a4paper); 

     pjob.setJobName(file.getName()); 
     Book book = new Book(); 
     book.append(pages, pf, pdfFile.getNumPages()); 
     pjob.setPageable(book); 

     // Send print job to default printer 
     if (pjob.printDialog()) { 
      pjob.print(); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (PrinterException e) { 
     JOptionPane.showMessageDialog(null, "Printing Error: " 
       + e.getMessage(), "Print Aborted", 
       JOptionPane.ERROR_MESSAGE); 
     e.printStackTrace(); 
    } 
} 

class PDFPrintPage implements Printable { 
    private PDFFile file; 

    PDFPrintPage(PDFFile file) { 
     this.file = file; 
    } 

    public int print(Graphics g, PageFormat format, int index) 
      throws PrinterException { 
     int pagenum = index + 1; 

     // don't bother if the page number is out of range. 
     if ((pagenum >= 1) && (pagenum <= file.getNumPages())) { 
      // fit the PDFPage into the printing area 
      Graphics2D g2 = (Graphics2D) g; 
      PDFPage page = file.getPage(pagenum); 
      double pwidth = format.getImageableWidth(); 
      double pheight = format.getImageableHeight(); 

      double aspect = page.getAspectRatio(); 
      double paperaspect = pwidth/pheight; 

      Rectangle imgbounds; 

      if (aspect > paperaspect) { 
       // paper is too tall/pdfpage is too wide 
       int height = (int) (pwidth/aspect); 
       imgbounds = new Rectangle(
         (int) format.getImageableX(), 
         (int) (format.getImageableY() + ((pheight - height)/2)), 
         (int) pwidth, height); 
      } else { 
       // paper is too wide/pdfpage is too tall 
       int width = (int) (pheight * aspect); 
       imgbounds = new Rectangle(
         (int) (format.getImageableX() + ((pwidth - width)/2)), 
         (int) format.getImageableY(), width, (int) pheight); 
      } 

      // render the page 
      PDFRenderer pgs = new PDFRenderer(page, g2, imgbounds, null, 
        null); 
      try { 
       page.waitForFinish(); 
       pgs.run(); 
      } catch (InterruptedException ie) { 
      } 

      return PAGE_EXISTS; 
     } else { 
      return NO_SUCH_PAGE; 
     } 
    } 
} 
} 

을 내가 그것을 전화 :

new PDFPrinter(file); 

PS : 당신은 PDFRender.jar 필요

관련 문제