Java使用iText制作自定义报表PDF

Java使用iText制作自定义报表PDF,java,report,pdf-generation,itext,netbeans-7,Java,Report,Pdf Generation,Itext,Netbeans 7,对不起。 嘿,我是新来的。 现在我正在使用Netbeans 7.2.1在Java应用程序中处理我的项目。 现在我想从数据库中的数据创建一个带有iTextPDF的报告 这是我的样本数据,看起来像这样 CREATE TABLE `smartphone` ( `No` int(2) NOT NULL AUTO_INCREMENT, `merk` varchar(20) NOT NULL, `type` varchar(40) NOT NULL, `price` int(10) NOT NULL, PR

对不起。 嘿,我是新来的。 现在我正在使用Netbeans 7.2.1在Java应用程序中处理我的项目。 现在我想从数据库中的数据创建一个带有iTextPDF的报告

这是我的样本数据,看起来像这样

CREATE TABLE `smartphone` (
`No` int(2) NOT NULL AUTO_INCREMENT,
`merk` varchar(20) NOT NULL,
`type` varchar(40) NOT NULL,
`price` int(10) NOT NULL,
PRIMARY KEY (`No`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;

INSERT INTO `smartphone` (`No`,`merk`,`type`,`price`) VALUES 
(1,'samsung','Galaxy S5',600),
(2,'Xiaomi','Redmi 1s',150),
(3,'LG','G3',450),
(4,'Samsung','Galaxy S6',1000),
(5,'Xiaomi','Mi4i',250),
(6,'Xiaomi','Redmi Note',200),
(7,'Apple','iPhone 5s',500),
(8,'Apple','iPhone 4s',250);
现在,根据这些数据,我想在我的PDF文件中创建一个表,如下所示。 以下是我希望的结果:

**No**   |   **merk/type**   |   **Price**
  1        **Samsung**
            Galaxy S5             600
            Galaxy S6             1000
  2        **Xiaomi**
            Redmi 1s              150
            Redmi Mi4i            250
            Redmi Note            200
  3        **LG**
             G3                   450
  4        **Apple**
            iPhone 5s             500
            iPhone 4s             300
有没有人可以用Netbeans中的Java代码实现这一点?希望你能帮助我

事先非常感谢。对不起,如果我的英语不好,对不起,如果我的话似乎不礼貌

多谢各位

编辑: 这是我到目前为止制作的剧本,是我真正的项目。对不起,剧本不整洁

import java.io.FileOutputStream;
import java.io.*;
import java.util.*;
import java.sql.*;
import com.itextpdf.text.*;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.pdf.*;

public class jdbc_pdf_report {

public static void main(String[] args) throws Exception {

    /* Create Connection objects */

    Connection conn = Config.getConfig();
    Statement stmt = conn.createStatement();
    /* Define the SQL query */
    ResultSet query_set = stmt.executeQuery("SELECT * FROM DATAUSULAN WHERE TAHUN=2016 AND VALIDASI='1'");
    /* Step-2: Initialize PDF documents - logical objects */
    Document my_pdf_report = new Document(PageSize.LEGAL.rotate());
    PdfWriter.getInstance(my_pdf_report, new FileOutputStream("D:/pdf_report_from_sql_using_java.pdf"));
    my_pdf_report.open();
    my_pdf_report.add(new Paragraph("Laporan Usulan Kecamatan"));
    //we have four columns in our table
    float[] columnWidths = {1.5f, 7f, 5f, 5f, 3f, 4f, 5f, 4f, 4f, 4f};
    PdfPTable my_report_table = new PdfPTable(columnWidths);
    my_report_table.setSpacingBefore(10);
    my_report_table.setWidthPercentage(90f);
    //create a cell object
    PdfPCell table_cell;
    Font fontHeader = new Font(FontFamily.TIMES_ROMAN, 12, Font.BOLD, BaseColor.BLACK);
    Font font = new Font(FontFamily.TIMES_ROMAN, 10, Font.NORMAL, BaseColor.BLACK);
    // create header cell
    for (int i = 1; i <= 10; i++) {
        table_cell = new PdfPCell(new Phrase("" + i, font));
        my_report_table.addCell(table_cell);
    }
    GreekList greekList = new GreekList();
    PdfPTable nestedTable = new PdfPTable(1);
    while (query_set.next()) {

        String no_kegiatan = query_set.getString("NO_KEGIATAN");
        table_cell = new PdfPCell(new Phrase(no_kegiatan, font));;
        Phrase phrase = new Phrase();
        my_report_table.addCell(table_cell);
        String urusan = query_set.getString("URUSAN");
        table_cell = new PdfPCell(new Phrase(urusan, font));
        table_cell.setColspan(9);
        my_report_table.addCell(table_cell);
        String program = query_set.getString("PROGRAM");
        table_cell = new PdfPCell(new Phrase(urusan+"\n "+program, font));
        my_report_table.addCell(table_cell);
        String nama_kegiatan = query_set.getString("NAMA_KEGIATAN");
        table_cell = new PdfPCell(new Phrase(nama_kegiatan, font));
        my_report_table.addCell(table_cell);
        String volume = query_set.getString("VOLUME");
        table_cell = new PdfPCell(new Phrase(volume, font));
        my_report_table.addCell(table_cell);
        String lokasi_kegiatan = query_set.getString("LOKASI_KEGIATAN");
        table_cell = new PdfPCell(new Phrase(lokasi_kegiatan, font));
        my_report_table.addCell(table_cell);
        String jenis_kegiatan = query_set.getString("JENIS_KEGIATAN");
        table_cell = new PdfPCell(new Phrase(jenis_kegiatan, font));
        my_report_table.addCell(table_cell);
        String apbd_kab = query_set.getString("APBD_KAB");
        table_cell = new PdfPCell(new Phrase(apbd_kab, font));
        my_report_table.addCell(table_cell);
        String apbd_prov = query_set.getString("APBD_PROV");
        table_cell = new PdfPCell(new Phrase(apbd_prov, font));
        my_report_table.addCell(table_cell);
        String apbn = query_set.getString("APBN");
        table_cell = new PdfPCell(new Phrase(apbn, font));
        my_report_table.addCell(table_cell);
        String tahun = query_set.getString("TAHUN");
        table_cell = new PdfPCell(new Phrase(tahun, font));
        my_report_table.addCell(table_cell);
    }
    /* Attach report table to PDF */
    my_pdf_report.add(my_report_table);
    my_pdf_report.close();

    /* Close all DB related objects */
    query_set.close();
    stmt.close();
    conn.close();

  }
}


但是输出不是我所期望的。

在Netbeans中,选择新类并开始编写代码。使用标准JDBC代码访问数据库,例如从smartphone执行查询SELECT*,然后将记录添加到PdfPTable

有关SQL代码,请参见示例

对于PDF代码,您可以在此处获得灵感:


如果要使用此代码段,则需要编写getData方法,使其返回一个列表,并返回列表对象的完整结果集。在字符串值的结果集中,需要将每个字段转换为字符串。每个开发人员都知道如何做到这一点,但如果您不知道,请不要更改您的问题或使用注释,而是发布一个标题为“如何将结果集转换为列表”的新问题。

您好,欢迎使用Stack Overflow。有没有人可以用Netbeans中的Java代码实现这一点?不,不是这样的。请发布您的尝试,并告诉我们您尝试了什么,什么不起作用,为什么,您期望什么以及发生了什么。请在netbeans中写下您自己为解决问题所做的工作。谢谢。作为提示:您想要创建一个表格结构。因此,请查找使用PdfPTable类创建表的iText使用示例。啊,很抱歉。我已经做了一些脚本,但它没有显示,因为我想导出。
public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(4);
    table.setWidthPercentage(100);
    List<List<String>> dataset = getData();
    for (List<String> record : dataset) {
        for (String field : record) {
            table.addCell(field);
        }
    }
    document.add(table);
    document.close();
}