2015-04-28 4 views
0

Я застрял с этой проблемой на некоторое время. Я рисую pie chart в документе и отображаю jtable data. Я не могу align содержание в pdf file. Как выровнять jtable data, а также pie chart с этим pdf. Я упомянул о моем code ниже с image. Как вы можете видеть, мне нужно выровнять мой jtable data немного вверху, а также он должен соответствовать widthpage.Выравнивание содержимого в PDF с использованием itext в java

 private void graphical_to_pdf() { 

    graph_table.setSize(graph_table.getPreferredSize()); 

    JTableHeader th = graph_table.getTableHeader(); 
    th.setSize(th.getPreferredSize()); 

    PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 800, 800, 0.65f); 
    com.itextpdf.text.Font f = new com.itextpdf.text.Font(com.itextpdf.text.Font.FontFamily.TIMES_ROMAN, 18.0f, com.itextpdf.text.Font.NORMAL, BaseColor.BLACK); 

    Document doc = new Document(new com.itextpdf.text.Rectangle(900, 900)); 

    //Creating a paper to store the jtable contents 
    Paper paper = new Paper(); 

    paper.setSize(800, 800); 
    paper.setImageableArea(0, 100, 800, 800); 

    PageFormat pf = new PageFormat(); 
    pf.setPaper(paper); 
    Printable printable = graph_table.getPrintable(JTable.PrintMode.NORMAL, null, null); 

    try { 
     PdfWriter writer; 
     writer = PdfWriter.getInstance(doc, new FileOutputStream(save_pdf.getSelectedFile().getAbsoluteFile() + ".pdf")); 

     writer.setViewerPreferences(PdfWriter.PageLayoutSinglePage); 
     doc.open(); 
     int width = 375; 
     int height = 300; 

     JFreeChart chart = create_pie_chart_count(); 

     doc.add(new Paragraph("Some TExt", f)); 
     doc.add(new Paragraph("Some Text", f)); 
     doc.add(new Paragraph("Document Generated On - " + generatedDate, f)); 
     BufferedImage bufferedImage = chart.createBufferedImage(width, height); 

     Image image = Image.getInstance(writer, bufferedImage, 1.0f); 
     image.scalePercent(100f); 
     image.setAlignment(image.MIDDLE); 
     doc.add(image); 
     PdfAction action = PdfAction.gotoLocalPage(1, pdfDest, writer); 
     writer.setOpenAction(action); 

      BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); 

     Graphics2D g = img.createGraphics(); 

     int page = 0; 

     int result = Printable.NO_SUCH_PAGE; 

     PdfContentByte cb = writer.getDirectContent(); 
     do { 
      result = printable.print(g, pf, page); 
      if (result == Printable.PAGE_EXISTS) { 
       cb.saveState(); 
       Graphics2D g2 = cb.createGraphics(650, 225); 
       result = printable.print(g2, pf, page); 
       g2.dispose(); 
       cb.restoreState(); 
       page++; 
       doc.newPage(); 

      } 

     } while (result == Printable.PAGE_EXISTS); 
     g.dispose(); 
    } catch (Exception e) { 
    } finally { 
     doc.close(); 
    } 
} 

ответ

1

Посмотрите на ответ на следующий вопрос: How to position a PDFGraphis2D object in iText?

Как вы можете видеть, это является общим не рисовать такие объекты, как диаграммы или таблицы прямо к непосредственному содержанию. Вместо этого вы должны создать PdfTemplate для рисования. Одним из преимуществ использования PdfTemplate является то, что вы можете обернуть его внутри Image. Не волнуйтесь: если PdfTemplate содержит векторные данные, то Image будет представлять собой векторное изображение; он не будет растрирован (что приведет к потере разрешения).

Как только у вас есть Image объектов, существует множество различных вариантов изменения размера, расположения, организации. Вы можете получить представление о различных вариантов при чтении ответа на следующие вопросы:

+0

Ну, это действительно помогало. Я должен был изменить все, и все было хорошо. Но я никогда не использовал «PdfTemplate». Вместо этого просто вытащили данные из моей 'jtable' и добавили это в' PdfCell'. Благодаря :) – Rajeev

Смежные вопросы