在java中使用itext在pdf中摇摆对齐内容

dddzy1tm  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(569)

我被这个问题困扰了一段时间。我在画一张画 pie chart 并显示 jtable data . 我不能 align 文件中的内容 pdf file . 如何对齐 jtable data 以及 pie chart 为了这个 pdf . 我已经提到我的 code 下面有一个 image .

如你所见,我需要调整我的 jtable data 有点顶,而且它必须适合 widthpage .

  1. private void graphical_to_pdf() {
  2. graph_table.setSize(graph_table.getPreferredSize());
  3. JTableHeader th = graph_table.getTableHeader();
  4. th.setSize(th.getPreferredSize());
  5. PdfDestination pdfDest = new PdfDestination(PdfDestination.XYZ, 800, 800, 0.65f);
  6. 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);
  7. Document doc = new Document(new com.itextpdf.text.Rectangle(900, 900));
  8. //Creating a paper to store the jtable contents
  9. Paper paper = new Paper();
  10. paper.setSize(800, 800);
  11. paper.setImageableArea(0, 100, 800, 800);
  12. PageFormat pf = new PageFormat();
  13. pf.setPaper(paper);
  14. Printable printable = graph_table.getPrintable(JTable.PrintMode.NORMAL, null, null);
  15. try {
  16. PdfWriter writer;
  17. writer = PdfWriter.getInstance(doc, new FileOutputStream(save_pdf.getSelectedFile().getAbsoluteFile() + ".pdf"));
  18. writer.setViewerPreferences(PdfWriter.PageLayoutSinglePage);
  19. doc.open();
  20. int width = 375;
  21. int height = 300;
  22. JFreeChart chart = create_pie_chart_count();
  23. doc.add(new Paragraph("Some TExt", f));
  24. doc.add(new Paragraph("Some Text", f));
  25. doc.add(new Paragraph("Document Generated On - " + generatedDate, f));
  26. BufferedImage bufferedImage = chart.createBufferedImage(width, height);
  27. Image image = Image.getInstance(writer, bufferedImage, 1.0f);
  28. image.scalePercent(100f);
  29. image.setAlignment(image.MIDDLE);
  30. doc.add(image);
  31. PdfAction action = PdfAction.gotoLocalPage(1, pdfDest, writer);
  32. writer.setOpenAction(action);
  33. BufferedImage img = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
  34. Graphics2D g = img.createGraphics();
  35. int page = 0;
  36. int result = Printable.NO_SUCH_PAGE;
  37. PdfContentByte cb = writer.getDirectContent();
  38. do {
  39. result = printable.print(g, pf, page);
  40. if (result == Printable.PAGE_EXISTS) {
  41. cb.saveState();
  42. Graphics2D g2 = cb.createGraphics(650, 225);
  43. result = printable.print(g2, pf, page);
  44. g2.dispose();
  45. cb.restoreState();
  46. page++;
  47. doc.newPage();
  48. }
  49. } while (result == Printable.PAGE_EXISTS);
  50. g.dispose();
  51. } catch (Exception e) {
  52. } finally {
  53. doc.close();
  54. }
  55. }
atmip9wb

atmip9wb1#

请看以下问题的答案:如何在itext中定位pdfgraphis2d对象?
如您所见,通常不直接将图表或表格等对象绘制到直接内容。相反,您应该创建一个 PdfTemplate 吸引。使用 PdfTemplate 你可以把它包在 Image . 别担心:如果 PdfTemplate 包含矢量数据 Image 将是一个矢量图像;它不会被光栅化(这将导致分辨率的损失)。
一旦你有 Image 对象,有许多不同的选项来调整大小、定位和组织它们。阅读以下问题的答案时,您可以了解不同的选项:
如何将图像和文本并排显示itext
itextsharp图像不会挨在一起
向columntext itext添加文本和对齐的图像
...

相关问题