2015-04-28 37 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