2015-04-28 56 views
0

我現在已經有了這個問題。我正在爲該文檔繪製一個pie chart並顯示jtable data。我無法align中的內容pdf file。如何將jtable data以及pie chart與此pdf對齊。我在下面提到了我的code,其中有image 正如你所看到的,我需要將我的jtable data稍微調整到頂部,並且它必須符合pagewidth使用java中的itext對齊PDF中的內容

 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