[英]Align content in PDF using itext in java
我有一段時間會遇到這個問題。 我正在向文檔繪制pie chart
並顯示jtable data
。 我無法align
pdf file
的內容。 如何將jtable data
和pie chart
與該pdf
對齊。 我在下面用image
提到了我的code
。 如您所見,我需要將
jtable data
稍微對齊到頂部,並且它也必須適合page
的width
。
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();
}
}
看一下以下問題的答案: 如何在iText中放置PDFGraphis2D對象?
如您所見,通常不直接將圖表或表格之類的對象繪制到直接內容上。 相反,您應該創建一個PdfTemplate
進行繪制。 使用PdfTemplate
的好處之一是可以將其包裝在Image
。 不用擔心:如果PdfTemplate
包含矢量數據,則Image
將是矢量圖像; 它不會被光柵化(這會導致分辨率降低)。
一旦有了Image
對象,就有許多不同的選項可以調整大小,定位和組織它們。 閱讀以下問題的答案時,您可以了解不同的選擇:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.