gpt4 book ai didi

java - 在java中使用itext对齐PDF中的内容

转载 作者:行者123 更新时间:2023-12-01 11:36:35 27 4
gpt4 key购买 nike

我现在被这个问题困扰了一段时间。我正在文档中绘制一个饼图并显示 jtable 数据。我无法对齐 pdf 文件 中的内容。如何将jtable 数据以及饼图与此pdf对齐。我在下面提到了我的代码图像如您所见,我需要将 jtable 数据 稍微对齐到顶部,并且它还必须适合 pagewidth .

     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();
}
}

最佳答案

看看以下问题的答案:How to position a PDFGraphis2D object in iText?

正如您所看到的,通常将图表或表格等对象直接绘制到直接内容。相反,您应该创建一个用于绘图的 PdfTemplate。使用 PdfTemplate 的好处之一是您可以将其包装在 Image 中。不用担心:如果 PdfTemplate 包含 vector 数据,则 Image 将是 vector 图像;它不会被光栅化(这会导致分辨率损失)。

一旦有了Image对象,就有许多不同的选项来调整它们的大小、位置和组织它们。在阅读以下问题的答案时,您可以了解不同的选项:

关于java - 在java中使用itext对齐PDF中的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29916676/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com