Одна строка на одной странице: Boxable - PullRequest
0 голосов
/ 03 июля 2018

Это код для этой проблемы, чтобы вы могли проверить, есть ли какие-либо проблемы в коде.

Теперь проблема в том, что когда я ограничиваю количество строк до 45 (это число умещается на одной странице), каждая строка печатается на одной странице.

Но, если я не ограничу строки и размер строки (приблизительно 100-200), каждая строка переходит на новую страницу в PDF. Номер страницы PDF становится примерно равным номерам строк.

Я открыл этот вопрос в Git Boxable, но он не активен, поэтому я пришел за помощью сюда.

Ниже приведены файлы, сгенерированные в обоих условиях:

LimitTemp.pdf

noLimitTemp.pdf

public class CSVtoPDF {

private float marginBetweenYElements = 10;
private float titleFontSize = 18;
private float fontSize = 8;
private float headerFontSize = 12;
private float header1FontSize = 14;
private float header2FontSize = 12;
private float headerCellHeight = 19;
private float dataCellHeight = 12;
private PDFont font = PDType1Font.HELVETICA;
private PDFont headerFont = PDType1Font.TIMES_BOLD;
List filteredData = new ArrayList();
ReportSettings rs = new ReportSettings();
String filePath, destPath, header1, header2, filename;

public CSVtoPDF(List data, Audit audit) throws IOException {
this.filteredData = data;
Date liveDate = new Date();
SimpleDateFormat format= new SimpleDateFormat("YYYY-MM-DD HH:mm:ss");
liveDate = Calendar.getInstance().getTime();
float headerCellHeight = 18;
PDDocument doc = new PDDocument();
PDPage page = new PDPage(PDRectangle.A4);
//page.setMediaBox(new PDRectangle(PDRectangle.A4.getHeight(),
//        PDRectangle.A4.getWidth()));
PDPageContentStream cos = new PDPageContentStream(doc, page);

/* Add page to PDDocument */
doc.addPage(page);
System.out.println("Inside Main csvtopdf");

//Draw Header
Preferences prefs = Preferences.userRoot().node(this.getClass().getName());
try {
    String[] keys = prefs.keys();
    //destPath = prefs.get("destpath", rs.getDestPath());
    //filename = prefs.get("file_name", rs.getFileName());
    //header1 = prefs.get("header1", rs.getHeader1());
    //header2 = prefs.get("header2", rs.getHeader2());

} catch (BackingStoreException ex) {
    System.err.println(ex);
}
header1= "Header 1";
header2= "Header 2";

cos.beginText();
cos.moveTextPositionByAmount(220, 810);
cos.setFont(headerFont, header1FontSize);
cos.drawString(header1);
cos.endText();
cos.beginText();
cos.moveTextPositionByAmount(220, 800);
cos.setFont(headerFont, header2FontSize);
cos.drawString(header2);
cos.endText();
cos.beginText();
cos.moveTextPositionByAmount(220, 790);
cos.setFont(headerFont, headerFontSize);
cos.drawString("Report: Filtered Audit Report");
cos.endText();

//cos.beginText();
// cos.moveTo(200, 30);
//cos.setFont(headerFont, headerFontSize);
// cos.drawString(header2);
//cos.endText();

/* Initialize DataTable */
float margin = 20;
float tableWidth = page.getMediaBox().getWidth() - (2 * margin);
float yStartNewPage = page.getMediaBox().getHeight() - (2 * margin);
float yStart = yStartNewPage;
float bottomMargin = -800;

BaseTable table = new BaseTable(yStart, yStartNewPage,
        bottomMargin, tableWidth, margin, doc, page, true, true);
Row<PDPage> dataRow = table.createRow(dataCellHeight);
for (int i = 0; i < data.size() - 1; i++) {
    System.out.println(data.get(i));
}
drawTableData(table, dataCellHeight, 20, data, 1,doc,page);

table.draw();
File result;
if (Objects.isNull(destPath)) {
    cos.close();
    result = new File("temp.pdf");
} else {
    result = new File(destPath);
}
System.out.println("befor save result");
doc.save(result);
System.out.println("after save result");
}

public void drawTableData(BaseTable table, float dataCellHeight, float 
cellWidth, List<Audit> data, int style,PDDocument doc,PDPage page) {

String s;
Cell<PDPage> cell;
//  for (int k = 0; k < data.size(); k++) {
System.out.println("inside drawtable for ");

for (int i = 0; i < data.size(); i++) {       // add row
    System.out.println("inside drawtable for " + i);
    Audit atmp = data.get(i);
    //if (i==35) {
     //   doc.addPage(page);
    //}
    Row<PDPage> sTableRow = table.createRow(dataCellHeight);
    for (int j = 0; j <= 2; j++) {       //add cell in the rows
        if (j == 0) {          // normal cells on right

            s = atmp.getTimeStamp();
            s = s.replaceAll("^\"|\"$", "");
            cell = sTableRow.createCell(cellWidth, s, HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM);
            setStyle(style, cell);
            //k++;
        } else if (j == 1) {      //big cells on left
            s = atmp.getDiscription();
            s = s.replaceAll("^\"|\"$", "");
            cell = sTableRow.createCell(cellWidth + 50, s, HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM);
            setStyle(style, cell);
            // k++;
        } else if (j == 2) {      //top blank cell
            //System.out.println("In j null and 0 " + j);
            s = atmp.getUserID();
            s = s.replaceAll("^\"|\"$", "");
            cell = sTableRow.createCell(cellWidth - 10, s, HorizontalAlignment.CENTER, VerticalAlignment.BOTTOM);
            //cell.setBottomBorderStyle(null);
            setStyle(style, cell);
            //k++;
        }
    }
    table.addHeaderRow(sTableRow);
    System.out.println(" row added ");
}
//}
}

public void setStyle(int type, Cell cell) {
// type :  0 as header, 1 as table body
if (type == 0) {
    cell.setFont(headerFont);
    //cell.setHeight(headerCellHeight);
    cell.setFontSize(headerFontSize);
    cell.setBottomPadding(3);
} else if (type == 1) {
    cell.setTopPadding(1);
    cell.setFont(font);
    cell.setAlign(HorizontalAlignment.LEFT);
    //cell.setHeight(dataCellHeight);
    cell.setFontSize(fontSize);
    cell.setBottomPadding(1);
}
}

1 Ответ

0 голосов
/ 05 июля 2018

Я обнаружил глупую проблему в своем коде. Я говорю об этом, чтобы кто-то другой не мог повторить это.

Я рассматривал каждую строку таблицы данных как строку заголовка. Итак, он перешел на новую страницу. Чтобы быть конкретным. В функции drawTableData я убрал table.addHeaderRow(sTableRow)

...