gpt4 book ai didi

java - 仅部分生成表

转载 作者:行者123 更新时间:2023-12-01 20:16:20 25 4
gpt4 key购买 nike

我使用 iText5 库生成 pdf 文档。
我正在尝试在 pdf 文件中创建一个表格。
当表行数大于 3 时,工作正常。
但是当表格行数小于3时,它会生成一个空的pdf文件,没有表格(只打印标题。)

这是我的代码:

import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Font.FontFamily;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.GrayColor;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.swing.JOptionPane;
//import sandbox.WrapToTest;

//@WrapToTest
public class ColumnWidthExample {
static String f="";

public static final String DEST = "C:\\Users\\Rahul\\Documents\\Challan_Reports\\";
// public static void main(String[] args) throws IOException, DocumentException {
// ColumnWidthExample.createPdf("2017-08-08","anuj");
// }

public static String createPdf(String dest,String gname) throws IOException, DocumentException {
try{

// for (int counter = 1; counter < 101; counter++) {
// table.addCell(String.valueOf(counter));
// table.addCell("key " + counter);
// table.addCell("value " + counter);
// }

Connection con=DB.getConnection();
PreparedStatement ps=con.prepareStatement("select * from echallan where guarantor_name='"+gname+"' and date='"+dest+"' order by date desc");
ResultSet rs=ps.executeQuery();
if(rs.next())

{ JOptionPane.showMessageDialog(null, "exists");
System.out.println(dest+gname+" cpdf");
File file = new File(DEST+" "+dest+" "+gname+".pdf");
file.getParentFile().mkdirs();

Document document = new Document(PageSize.A4.rotate());
PdfWriter.getInstance(document, new FileOutputStream(DEST+""+dest+"_"+gname+".pdf"));
f=DEST+" "+dest+" "+gname+".pdf";
document.open();
document.add(new Chunk(""));
document.add(new Paragraph(" Report of Guarantor "+gname+" for date "+dest));
document.add(new Paragraph(""));
float[] columnWidths = {10, 10, 10,5,5,10,10,5,7,5,10,10,13,10,10};
PdfPTable table = new PdfPTable(columnWidths);
table.setWidthPercentage(105);
table.getDefaultCell().setUseAscender(true);
table.getDefaultCell().setUseDescender(true);
Font f = new Font(FontFamily.HELVETICA, 10, Font.NORMAL, GrayColor.GRAYWHITE);
PdfPCell cell = new PdfPCell(new Phrase());

table.getDefaultCell().setBackgroundColor(new GrayColor(0.75f));
table.addCell("Merchant\ncode");
table.addCell("Merchant\nname");
table.addCell("Invioce");
table.addCell("Bale\nfrom");
table.addCell("Bale\nto");
table.addCell("Total\nbale");
table.addCell("Station");
table.addCell("Sort");
table.addCell("Chart");
table.addCell("Ex\nmill");
table.addCell("Rransport");
table.addCell("Remarks");
table.addCell("Date");
table.addCell("Guarantor\nname");
table.addCell("Guarantor\ncode");
table.setHeaderRows(3);
table.setFooterRows(1);
table.getDefaultCell().setBackgroundColor(GrayColor.GRAYWHITE);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
cell = new PdfPCell(new Phrase());
do{
for(int i=1;i<=15;i++){
table.addCell(""+rs.getString(i));
JOptionPane.showMessageDialog(null, rs.getString(i));}
document.add(new Phrase());
}while(rs.next());
document.add(table);
document.close();

return "Generated successfully.\n File Saved in \n "+DEST+dest+"_"+gname;
}
else
{
return "No data found";
}


}
catch(Exception e)
{
System.out.print(e);
return "unsuccessfull";
}


}
}

最佳答案

问题与页眉/页脚行有关。

在接下来的行中,您设置 2 个页眉行和 1 个页脚行(#setHeaderRows(int) 负责设置页眉行数,#setFooterRows(int) 负责确定有多少页眉行实际上是页脚行):

table.setHeaderRows(3);
table.setFooterRows (1);

因此,如果添加 3 行,则没有实际的正文内容(只有页眉和页脚行)。因此你的 result-pdf 是空的。

如果您运行下一个代码段

            float[] columnWidths = {10, 10, 10,5,5,10,10,5,7,5,10,10,13,10,10};
PdfPTable table = new PdfPTable(columnWidths);
table.setHeaderRows(3);
table.setFooterRows(1);

int j = 55;
do{
j--;
for(int i=1;i<=15;i++){
table.addCell("string " + j);
}
document.add(new Phrase());
} while(j >0);
document.add(table);
document.close();

您将看到包含“string 54”和“string 53”单元格的行在每页上重复(作为标题)。对于具有“字符串 52”单元格的行(作为页脚)也是如此。

据我了解,您无意保留页眉和页脚行。只需删除上面提到的行即可解决您的问题。

关于java - 仅部分生成表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45735719/

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