在我的项目中,我必须使用所有自定义(如边框,颜色等)在pdf中打印JTable组件.对于这个要求,我搜索了一下,发现一个代码在pdfs中打印JTable.但是在打印之后我发现第一行和第一列的表格边框丢失了,而且我找不到在某个特定坐标处打印的方法.请看下面的具体代码: -
package com.jpmorgan.dqreport;
import java.awt.BorderLayout;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.io.FileOutputStream;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfWriter;
public class JTable2Pdf extends JFrame {
private JTable table;
public JTable2Pdf() {
getContentPane().setLayout(new BorderLayout());
createTable();
}
private void createTable() {
Object[][] data = {
{"Kathy", "Smith",
"SnowboardingXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", new Integer(5), new Boolean(false)},
{"John", "Doe",
"Rowing", new Integer(3), new Boolean(true)},
{"Sue", "Black",
"Knitting", new Integer(2), new Boolean(false)},
{"Jane", "White",
"Speed reading", new Integer(20), new Boolean(true)},
{"Joe", …Run Code Online (Sandbox Code Playgroud) 我正在研究pdf报告申请.运用
itext 5.3.3.jar jdk 1.6
我想在pdf上打印JTable.我正确地获得了JTable图像,但无法在pdf上获取图像.无论如何,我可以在pdf上打印BufferedImage.我用下面的代码: -
如果可能的话,尝试在pdf上编写bufferedImage.
private static void print(BufferedImage bi,JTable table) {
Document document = new Document(PageSize.A4.rotate());
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("F:/jTable.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
PdfTemplate pdfTemplate = cb.createTemplate(table.getWidth(), table.getHeight());
Image image = Image.getInstance(bi , null);
image.scaleToFit(table.getWidth(), table.getHeight());
table.addNotify();
table.validate();
Graphics2D g2 = pdfTemplate.createGraphics(table.getWidth(), table.getHeight());
table.print(g2);
pdfTemplate.addImage(image);
/*g2.setColor(Color.BLACK);
g2.drawRect(x-2, y-2, table.getWidth()+2, table.getHeight()+2);*/
//table.print(g2);
cb.addTemplate(pdfTemplate, 0,20);
} catch (Exception e) {
System.err.println(e.getMessage());
}
document.close();
}
Run Code Online (Sandbox Code Playgroud)
但它告诉我类似下面的内容: -
图像必须具有绝对定位.线程"main"中的异常com.itextpdf.text.exceptions.IllegalPdfSyntaxException:不平衡的保存/恢复状态运算符.在com.itextpdf.text.pdf.PdfContentByte.sanityCheck(PdfContentByte.java:3083)在com.itextpdf.text.pdf.PdfContentByte.toPdf(PdfContentByte.java:248)在com.itextpdf.text.pdf.PdfFormXObject.( PdfFormXObject.java:88)在com.itextpdf.text.pdf.PdfTemplate.getFormXObject(PdfTemplate.java:247)在com.itextpdf.text.pdf.PdfWriter.addXFormsToBody(PdfWriter.java:1293)在com.itextpdf.text .pdf.PdfWriter.addSharedObjectsToBody(PdfWriter.java:1304)在com.itextpdf.text.pdf.PdfWriter.close(PdfWriter.java:1209)在com.itextpdf.text.pdf.PdfDocument.close(PdfDocument.java:768 )在com.itextpdf.text.Document.close(Document.java:398)在com.swing.data.TableImage.print(TableImage.java:102)在com.swing.data.TableImage.main(TableImage.java: 52)
以下是测试代码: …
我们需要在pdf上绘制JTable.对于这个要求,我采用了JTable并直接打印到pdf上.但是我没有获得JTable的Left和Top边框.另外,我需要为表格切割单元格边框.无论如何,我可以为JTable中的单元格赋予不同的颜色边框吗?例如: -
Left Border = Grid Color
Top Border = Grid Color
Right Border = Black Color
Bottom Border = Grid Color
Run Code Online (Sandbox Code Playgroud)
任何与此相关的建议都会非常有用吗?