<font color='FF6600'>
我试图将Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream("VendorOrder.pdf"));
document.open();
Image img = Image.getInstance("ReportHeader.png");
img.setAlignment(Image.MIDDLE);
document.add(img);
String dateOrdered,vendName,vendTotalOrd,vendBalance,vendRebate;
String sql = "select * from VendorOrder where NO=?";
pst = sqliteconn.prepareStatement(sql);
pst.setString(1, getVendorField.getText());
rs = pst.executeQuery();
if(rs.next()) {
dateOrdered = rs.getString("DATE");
vendName = rs.getString("VENDOR");
vendTotalOrd = rs.getString("TOTAL");
vendBalance = rs.getString("BALANCE");
vendRebate = rs.getString("REBATE");
rs.close();
pst.close();
document.add(new Paragraph("\n"));
PdfPTable nameTable = new PdfPTable(2);
PdfPCell cell = new PdfPCell(new Paragraph("CUSTOMER DETAILS"));
cell.setColspan(3);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setBackgroundColor(BaseColor.CYAN);
nameTable.addCell(cell);
nameTable.setWidths(new int[]{2, 1});
nameTable.addCell("NAME: \n" + vendName);
nameTable.addCell("DATE ORDERED: "+ dateOrdered);
document.add(nameTable);
PdfPTable vendTable = new PdfPTable(3);
PdfPCell cell1 = new PdfPCell(new Paragraph("TOTAL PURCHASED"));
cell1.setBackgroundColor(BaseColor.LIGHT_GRAY);
vendTable.addCell(cell1);
PdfPCell cell2 = new PdfPCell(new Paragraph("BALANCE LEFT"));
cell2.setBackgroundColor(BaseColor.LIGHT_GRAY);
vendTable.addCell(cell2);
PdfPCell cell3 = new PdfPCell(new Paragraph("TOTAL REBATE"));
cell3.setBackgroundColor(BaseColor.LIGHT_GRAY);
vendTable.addCell(cell3);
vendTable.addCell(vendTotalOrd);
vendTable.addCell(vendBalance);
vendTable.addCell(vendRebate);
document.add(vendTable);
}
document.add(new Paragraph("----------------------------------------------------------------------------------------------------------------------------------"));
document.add(new Paragraph("\n"));
PdfPTable ordTable = new PdfPTable(4);
PdfPCell cell = new PdfPCell(new Paragraph("PURCHASED ITEMS"));
cell.setColspan(4);
cell.setHorizontalAlignment(Element.ALIGN_CENTER);
cell.setBackgroundColor(BaseColor.CYAN);
ordTable.addCell(cell);
PdfPCell cell1 = new PdfPCell(new Paragraph("NEWPAPER"));
cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
cell1.setBackgroundColor(BaseColor.LIGHT_GRAY);
ordTable.addCell(cell1);
PdfPCell cell2 = new PdfPCell(new Paragraph("PRICE"));
cell2.setHorizontalAlignment(Element.ALIGN_CENTER);
cell2.setBackgroundColor(BaseColor.LIGHT_GRAY);
ordTable.addCell(cell2);
PdfPCell cell3 = new PdfPCell(new Paragraph("# OF ORDERS"));
cell3.setHorizontalAlignment(Element.ALIGN_CENTER);
cell3.setBackgroundColor(BaseColor.LIGHT_GRAY);
ordTable.addCell(cell3);
PdfPCell cell4 = new PdfPCell(new Paragraph("SUBTOTAL"));
cell4.setHorizontalAlignment(Element.ALIGN_CENTER);
cell4.setBackgroundColor(BaseColor.LIGHT_GRAY);
ordTable.addCell(cell4);
//document.add(ordTable);
String newsName,newsPrice,newsOrders,newsSubt;
String sql1 = "select NEWSPAPER,PRICE,ORDERS,SUBTOTAL from NewspaperOrder where NO=?";
pst = sqliteconn.prepareStatement(sql1);
pst.setString(1, getVendorField.getText());
rs=pst.executeQuery();
while(rs.next()){
newsName = rs.getString("NEWSPAPER");
newsPrice = rs.getString("PRICE");
newsOrders = rs.getString("ORDERS");
newsSubt = rs.getString("SUBTOTAL");
rs.close();
pst.close();
//System.out.println(newsName + " " + newsPrice + " " + newsOrders + " " + newsSubt);
ordTable.addCell(newsName);
ordTable.addCell(newsPrice);
ordTable.addCell(newsOrders);
ordTable.addCell(newsSubt);
}
document.add(ordTable);
document.close();
JOptionPane.showMessageDialog(null, "SAVED");
和VendorOrder
数据库表中的大量信息打印到iText PDF。我试图从NewspaperOrder
db表打印一组数据,并且我已成功将它们打印成PDF,而在VendorOrder
db表中我试图打印超过1组数据而它只是显示NewspaperOrder
db表中的第一组数据。
基于NewspaperOrder
db表,它应该打印出订单ID为&#34; 11&#34;的所有数据。
我看到了类似的问题,解决方案与我所做的完全相似。我无法找到错误的位置,因为代码不会抛出任何异常。
答案 0 :(得分:3)
假设您可以自由选择库,我会选择iText7,因为它可以更好地处理表格。
以下代码是一个小样本,用于说明如何完成。 在你的例子中,令我印象深刻的是代码重复的数量。 我建议将其保持在最低限度。
var o map[string]interface{}
err := json.Unmarshal(data, &o)
if err != nil {
revel.INFO.Println("Json Decode Error", err)
}
fmt.Println(o)
这会生成一个pdf文档,其中包含一个包含上述记录的表。
答案 1 :(得分:0)
您仅使用if(rs.next())
从数据库中提取给定数据的第一次出现,这就是为什么您的代码未按预期打印所有内容的原因。
使用if(rs.next())
代替使用while(rs.next())
,它将很好用。