Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A lot of warning message when draw a table #55

Closed
jsyzthz opened this issue Apr 29, 2016 · 7 comments
Closed

A lot of warning message when draw a table #55

jsyzthz opened this issue Apr 29, 2016 · 7 comments

Comments

@jsyzthz
Copy link

jsyzthz commented Apr 29, 2016

Hi
this is a great tools to generate a table using pdfbox.
but i found a lot of message on the background log.
such as:

Apr 29, 2016 1:54:45 PM org.apache.pdfbox.contentstream.operator.graphics.ClosePath process
WARNING: ClosePath without initial MoveTo

my configuration incorrect? how to remove ? thanks!

@dobluth
Copy link
Collaborator

dobluth commented Apr 29, 2016

Hi!

Could you provide a minimal code example? Which version of Boxable are you using?

@jsyzthz
Copy link
Author

jsyzthz commented May 3, 2016

sorry,

PDPage page = createBlankPage();//TODO
PDRectangle boundingBox = page.getBBox();
try (PDPageContentStream contentStream = new PDPageContentStream(document, page)) {
    renderHeader(page, contentStream);
    float y = boundingBox.getHeight() - HEADER_LINE_OFFSET - BODY_MARGIN_TOP;
    // draw header
    contentStream.beginText();
    contentStream.setFont(getBodyFont(), FONT_SIZE_H1);
    y -= FONT_SIZE_H1;
    contentStream.newLineAtOffset(MARGIN_LEFT, y);
    contentStream.showText("Test");
    contentStream.endText();

    BaseTable table = new BaseTable(y - 24, y, 24, 10, boundingBox.getWidth() - MARGIN_RIGHT - MARGIN_LEFT,
            MARGIN_LEFT, document, page, true, true, new TestPageProvider(document, boundingBox));

    generateResultTableHeader(table);
    for (int i = 0; i < 19; i++) {
        Test t = TestData.get(i);
        generateResultTableData(table, t);
    }
    table.draw();
}

private Row<PDPage> generateResultTableHeader(BaseTable table) throws IOException {
    Row<PDPage> headerRow = table.createRow(15F);
    createCell(headerRow,"C1", 5F, Color.LIGHT_GRAY);
    ...//A lot of column
}

private Row<PDPage> generateResultTableData(BaseTable table, Test test) throws IOException {
    Row<PDPage> row = table.createRow(10F);
    createCell(row, test.getT1(), null, null);
    ...
}

private Cell<PDPage> createCell(Row<PDPage> row, String value, Float width, Color fillColor) throws IOException {
    Cell<PDPage> cell = null;
    if (width != null) {
        cell = row.createCell(width.floatValue(), value);
    } else {
        cell = row.createCell(value);
    }
    cell.setFont(getBodyFont());
    cell.setAlign(HorizontalAlignment.CENTER);
    cell.setValign(VerticalAlignment.MIDDLE);
    if (fillColor != null) {
        cell.setFillColor(fillColor);
    }
    return cell;
}

private class TestPageProvider extends DefaultPageProvider {

    public TestPageProvider(PDDocument document, PDRectangle size) {
        super(document, size);
    }

    @Override
    public PDPage nextPage() {
        PDPage pdPage = super.createPage();
        PDRectangle boundingBox = pdPage.getBBox();
        try (PDPageContentStream contentStream = new PDPageContentStream(document, pdPage)) {
            renderHeader(pdPage, contentStream);
            float y = boundingBox.getHeight() - HEADER_LINE_OFFSET - BODY_MARGIN_TOP;
            // draw header
            contentStream.beginText();
            contentStream.setFont(getBodyFont(), FONT_SIZE_H1);
            y -= FONT_SIZE_H1;
            contentStream.newLineAtOffset(MARGIN_LEFT, y);
            contentStream.showText(resources.getString("title.resultTable"));
            contentStream.endText();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return pdPage;
    }
}
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.1</version>
</dependency>

<dependency>
    <groupId>com.github.dhorions</groupId>
    <artifactId>boxable</artifactId>
    <version>1.4</version>
</dependency>

@jsyzthz
Copy link
Author

jsyzthz commented May 3, 2016

pdfbox 2.0.0 also can see this warning message.
BTW,
i want to draw a table in a new page ,and each page has same header and footer, so i create a TestPageProvider. but my first line code also has method(createBlankPage) to create a new blank page. how to keep one place to create a new page?
Thanks.

@dobluth
Copy link
Collaborator

dobluth commented May 4, 2016

Hi,

I am sorry, I cannot reproduce this issue. I cannot use your code example, because too much is missing (the Test class, several method calls and constants, ....). Please stick to a minimal example which is producing the undesired log messages. Could you please provide such an example?

In the test case included in Boxable (TableTest.Sample1) I cannot see any of those log messages.

As for the method createBlankPage: we are aware of this problem and are currently discussing API changes for the new release (started in #20 and continued on gitter, feel free to join ;)). For the moment you can at least avoid the code duplication by using the already present method in your own PageProvider, so instead of

PDPage firstPage = createBlankPage();

use

PageProvider pageProvider = new TestPageProvider();
PDPage firstPage = pageProvider.nextPage();

assuming you also want to render the header on the first page.

Another hint: Boxable offers the method PDStreamUtils.write() to write text to the page, maybe you want to use it.

@jsyzthz
Copy link
Author

jsyzthz commented May 9, 2016

Hi
i create a sample with a little code, but i cannot reproduce this issue. i think close it first.
Thanks a lot!

@jsyzthz jsyzthz closed this as completed May 9, 2016
@Krkrkrtek
Copy link

Hi,
I run to same problem as jsyzthz. Except I try to create simplest program to demonstrate it and with success.
In simple way, I'm creating program to create PDF files with PDFBox and with your awesome library I can add tables with minimal effort. Today I tryed to make preview before i save PDF and i found an easy way to do it with swing components and BufferedImage. Though it looks exactly how i want, it starts to fill console with a lot of warnings like this:

IX 15, 2016 1:21:52 ODP. org.apache.pdfbox.contentstream.operator.graphics.ClosePath process
WARNING: ClosePath without initial MoveTo

So I was looking for solution and found this topic. From my testing it looks like problem with renderer.
Here is my simplest code to demonstrate it: (I just create one big cell on a page)

import be.quodlibet.boxable.BaseTable;
import be.quodlibet.boxable.Cell;
import be.quodlibet.boxable.Row;
import java.awt.image.BufferedImage;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.rendering.PDFRenderer;

public class Test {

    public static void main(String[] args) throws IOException {
        PDRectangle pageSize = PDRectangle.A4;
        PDPage page = new PDPage(pageSize);
        PDDocument doc = new PDDocument();
        doc.addPage(page);

        BaseTable table = new BaseTable(pageSize.getHeight(), pageSize.getHeight(),
            0, pageSize.getWidth(), 0, doc, page, false, true);

        Row<PDPage> row = table.createRow(100.0f);
        Cell<PDPage> cell = row.createCell(100.0f, "Simplest test i can create ;)");

        try {
            table.draw();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        PDFRenderer renderer = new PDFRenderer(doc);
        BufferedImage imPage = renderer.renderImage(0); //this is throwing warnings

        try {
            doc.close();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }
}

I'm using PDFBox 2.0.2 and boxable 1.4
Am I doing something wrong?
Thanks for reply ;)

@Frulenzo
Copy link
Collaborator

yeah, it seems the problem is in the pdfbox rendering, particulary in drawPage() method in PageDrawer class. I tried to make BufferedImage in our other test cases and I also get something just like you:

WARNUNG: ClosePath without initial MoveTo
Sep 16, 2016 3:43:51 PM org.apache.pdfbox.contentstream.operator.graphics.ClosePath process

Sorry that I can't help you more with this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants