PDFBox does not write the message I want into the page











up vote
3
down vote

favorite












I'm looking for at least an hour at my code but I can't find the bug. I'm using PDFBox to create PDF's (PDFBox HelloWorld Example). To learn how PDFBox works I just wanted to create some pages with "hello world" and the page number like "hello world 1", "hello world 2" and so on. As you can see I created a for loop to create six pages.



private void drawPDF(PDDocument doc, File file) throws IOException {
for (int pageIndex = 0; pageIndex < 6; pageIndex++) {
PDPage page = new PDPage(PDRectangle.A4);
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
String message = "hello world " + (pageIndex + 1);
float stringHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() * FONT_SIZE;
PDRectangle pageSize = page.getMediaBox();
try (PDPageContentStream contents = new PDPageContentStream(doc, page)) {
contents.beginText();
contents.setFont(font, FONT_SIZE);
contents.setTextMatrix(Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f));
contents.showText(message);
System.out.println(message + " - " + doc.getNumberOfPages());
contents.endText();
}
}
doc.save(file);
}


In my console I get the following output (first number is pageIndex, second number is doc.getNumberOfPages()):



hello world 1 - 1
hello world 2 - 2
hello world 3 - 3
hello world 4 - 4
hello world 5 - 5
hello world 6 - 6


This is my load function to view the pdf.



private final ObservableList<Image> pdfFilePages = FXCollections.observableArrayList();


private void loadFile(File file) throws FileNotFoundException, IOException {
if (file != null) {
ByteBuffer buffer = null;
try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
buffer.flip();

PDFFile pdfFile = new PDFFile(buffer);
List<Image> pages = new ArrayList<>();
for (int i = 0; i < pdfFile.getNumPages(); i++) {
PDFPage page = pdfFile.getPage(i, true);
System.out.println("page: " + i + " - " + pdfFile.getNumPages());
java.awt.geom.Rectangle2D bbox = page.getBBox();
java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
(int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
(int) (bbox.getHeight() * 2.0), rect, null, true, true);
java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
bufImageGraphics.drawImage(awtImage, 0, 0, null);

Image image = SwingFXUtils.toFXImage(buffImage, null);
pages.add(image);
}
pdfFilePages.addAll(pages);
}
}
}


This is what I get in my console:



page: 0 - 6
page: 1 - 6
page: 2 - 6
page: 3 - 6
page: 4 - 6
page: 5 - 6


When I load the pdf file to display the content in my application i get "hello world 1 - 1" for the first and second page. The following pages have "hello world 2 - 2" to "hello world 5 - 5". I don't understand why I get two pages of "hello world 1 - 1". I hope someone can explain to me where I made a mistake.










share|improve this question




















  • 2




    Which library do you use for displaying the PDF? PDFFile does not appear to be a PDFBox class. My guess: PDFFile.getPage wants a 1-based page number and in case of a 0 defaults to page 1.
    – mkl
    Nov 12 at 17:39










  • in my loadfile method I turn the pdf file to images and store them in my observablelist (pdfFilesPages is of the type observablelist<image>) of images. To display a page, I pick the desired page and create an image view object which I can add to a pane.
    – Yupp
    Nov 13 at 6:38












  • That's not what I asked. I asked "Which library do you use for displaying the PDF?"
    – mkl
    Nov 13 at 6:55










  • sorry. com.sun.pdfview is the library I use to display the pdf
    – Yupp
    Nov 13 at 7:06






  • 1




    you were right. The solution is to start the for loop at 1 and to go through it until the index is equal to pdfFile.getNumPages(). getPage() jumps to the first page when the integer is 0. Therefore I get the first page twice. thank you very much :)
    – Yupp
    Nov 13 at 7:48















up vote
3
down vote

favorite












I'm looking for at least an hour at my code but I can't find the bug. I'm using PDFBox to create PDF's (PDFBox HelloWorld Example). To learn how PDFBox works I just wanted to create some pages with "hello world" and the page number like "hello world 1", "hello world 2" and so on. As you can see I created a for loop to create six pages.



private void drawPDF(PDDocument doc, File file) throws IOException {
for (int pageIndex = 0; pageIndex < 6; pageIndex++) {
PDPage page = new PDPage(PDRectangle.A4);
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
String message = "hello world " + (pageIndex + 1);
float stringHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() * FONT_SIZE;
PDRectangle pageSize = page.getMediaBox();
try (PDPageContentStream contents = new PDPageContentStream(doc, page)) {
contents.beginText();
contents.setFont(font, FONT_SIZE);
contents.setTextMatrix(Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f));
contents.showText(message);
System.out.println(message + " - " + doc.getNumberOfPages());
contents.endText();
}
}
doc.save(file);
}


In my console I get the following output (first number is pageIndex, second number is doc.getNumberOfPages()):



hello world 1 - 1
hello world 2 - 2
hello world 3 - 3
hello world 4 - 4
hello world 5 - 5
hello world 6 - 6


This is my load function to view the pdf.



private final ObservableList<Image> pdfFilePages = FXCollections.observableArrayList();


private void loadFile(File file) throws FileNotFoundException, IOException {
if (file != null) {
ByteBuffer buffer = null;
try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
buffer.flip();

PDFFile pdfFile = new PDFFile(buffer);
List<Image> pages = new ArrayList<>();
for (int i = 0; i < pdfFile.getNumPages(); i++) {
PDFPage page = pdfFile.getPage(i, true);
System.out.println("page: " + i + " - " + pdfFile.getNumPages());
java.awt.geom.Rectangle2D bbox = page.getBBox();
java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
(int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
(int) (bbox.getHeight() * 2.0), rect, null, true, true);
java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
bufImageGraphics.drawImage(awtImage, 0, 0, null);

Image image = SwingFXUtils.toFXImage(buffImage, null);
pages.add(image);
}
pdfFilePages.addAll(pages);
}
}
}


This is what I get in my console:



page: 0 - 6
page: 1 - 6
page: 2 - 6
page: 3 - 6
page: 4 - 6
page: 5 - 6


When I load the pdf file to display the content in my application i get "hello world 1 - 1" for the first and second page. The following pages have "hello world 2 - 2" to "hello world 5 - 5". I don't understand why I get two pages of "hello world 1 - 1". I hope someone can explain to me where I made a mistake.










share|improve this question




















  • 2




    Which library do you use for displaying the PDF? PDFFile does not appear to be a PDFBox class. My guess: PDFFile.getPage wants a 1-based page number and in case of a 0 defaults to page 1.
    – mkl
    Nov 12 at 17:39










  • in my loadfile method I turn the pdf file to images and store them in my observablelist (pdfFilesPages is of the type observablelist<image>) of images. To display a page, I pick the desired page and create an image view object which I can add to a pane.
    – Yupp
    Nov 13 at 6:38












  • That's not what I asked. I asked "Which library do you use for displaying the PDF?"
    – mkl
    Nov 13 at 6:55










  • sorry. com.sun.pdfview is the library I use to display the pdf
    – Yupp
    Nov 13 at 7:06






  • 1




    you were right. The solution is to start the for loop at 1 and to go through it until the index is equal to pdfFile.getNumPages(). getPage() jumps to the first page when the integer is 0. Therefore I get the first page twice. thank you very much :)
    – Yupp
    Nov 13 at 7:48













up vote
3
down vote

favorite









up vote
3
down vote

favorite











I'm looking for at least an hour at my code but I can't find the bug. I'm using PDFBox to create PDF's (PDFBox HelloWorld Example). To learn how PDFBox works I just wanted to create some pages with "hello world" and the page number like "hello world 1", "hello world 2" and so on. As you can see I created a for loop to create six pages.



private void drawPDF(PDDocument doc, File file) throws IOException {
for (int pageIndex = 0; pageIndex < 6; pageIndex++) {
PDPage page = new PDPage(PDRectangle.A4);
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
String message = "hello world " + (pageIndex + 1);
float stringHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() * FONT_SIZE;
PDRectangle pageSize = page.getMediaBox();
try (PDPageContentStream contents = new PDPageContentStream(doc, page)) {
contents.beginText();
contents.setFont(font, FONT_SIZE);
contents.setTextMatrix(Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f));
contents.showText(message);
System.out.println(message + " - " + doc.getNumberOfPages());
contents.endText();
}
}
doc.save(file);
}


In my console I get the following output (first number is pageIndex, second number is doc.getNumberOfPages()):



hello world 1 - 1
hello world 2 - 2
hello world 3 - 3
hello world 4 - 4
hello world 5 - 5
hello world 6 - 6


This is my load function to view the pdf.



private final ObservableList<Image> pdfFilePages = FXCollections.observableArrayList();


private void loadFile(File file) throws FileNotFoundException, IOException {
if (file != null) {
ByteBuffer buffer = null;
try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
buffer.flip();

PDFFile pdfFile = new PDFFile(buffer);
List<Image> pages = new ArrayList<>();
for (int i = 0; i < pdfFile.getNumPages(); i++) {
PDFPage page = pdfFile.getPage(i, true);
System.out.println("page: " + i + " - " + pdfFile.getNumPages());
java.awt.geom.Rectangle2D bbox = page.getBBox();
java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
(int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
(int) (bbox.getHeight() * 2.0), rect, null, true, true);
java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
bufImageGraphics.drawImage(awtImage, 0, 0, null);

Image image = SwingFXUtils.toFXImage(buffImage, null);
pages.add(image);
}
pdfFilePages.addAll(pages);
}
}
}


This is what I get in my console:



page: 0 - 6
page: 1 - 6
page: 2 - 6
page: 3 - 6
page: 4 - 6
page: 5 - 6


When I load the pdf file to display the content in my application i get "hello world 1 - 1" for the first and second page. The following pages have "hello world 2 - 2" to "hello world 5 - 5". I don't understand why I get two pages of "hello world 1 - 1". I hope someone can explain to me where I made a mistake.










share|improve this question















I'm looking for at least an hour at my code but I can't find the bug. I'm using PDFBox to create PDF's (PDFBox HelloWorld Example). To learn how PDFBox works I just wanted to create some pages with "hello world" and the page number like "hello world 1", "hello world 2" and so on. As you can see I created a for loop to create six pages.



private void drawPDF(PDDocument doc, File file) throws IOException {
for (int pageIndex = 0; pageIndex < 6; pageIndex++) {
PDPage page = new PDPage(PDRectangle.A4);
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
String message = "hello world " + (pageIndex + 1);
float stringHeight = font.getFontDescriptor().getFontBoundingBox().getHeight() * FONT_SIZE;
PDRectangle pageSize = page.getMediaBox();
try (PDPageContentStream contents = new PDPageContentStream(doc, page)) {
contents.beginText();
contents.setFont(font, FONT_SIZE);
contents.setTextMatrix(Matrix.getTranslateInstance(0, pageSize.getHeight() - stringHeight / 1000f));
contents.showText(message);
System.out.println(message + " - " + doc.getNumberOfPages());
contents.endText();
}
}
doc.save(file);
}


In my console I get the following output (first number is pageIndex, second number is doc.getNumberOfPages()):



hello world 1 - 1
hello world 2 - 2
hello world 3 - 3
hello world 4 - 4
hello world 5 - 5
hello world 6 - 6


This is my load function to view the pdf.



private final ObservableList<Image> pdfFilePages = FXCollections.observableArrayList();


private void loadFile(File file) throws FileNotFoundException, IOException {
if (file != null) {
ByteBuffer buffer = null;
try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
buffer.flip();

PDFFile pdfFile = new PDFFile(buffer);
List<Image> pages = new ArrayList<>();
for (int i = 0; i < pdfFile.getNumPages(); i++) {
PDFPage page = pdfFile.getPage(i, true);
System.out.println("page: " + i + " - " + pdfFile.getNumPages());
java.awt.geom.Rectangle2D bbox = page.getBBox();
java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
(int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
(int) (bbox.getHeight() * 2.0), rect, null, true, true);
java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
bufImageGraphics.drawImage(awtImage, 0, 0, null);

Image image = SwingFXUtils.toFXImage(buffImage, null);
pages.add(image);
}
pdfFilePages.addAll(pages);
}
}
}


This is what I get in my console:



page: 0 - 6
page: 1 - 6
page: 2 - 6
page: 3 - 6
page: 4 - 6
page: 5 - 6


When I load the pdf file to display the content in my application i get "hello world 1 - 1" for the first and second page. The following pages have "hello world 2 - 2" to "hello world 5 - 5". I don't understand why I get two pages of "hello world 1 - 1". I hope someone can explain to me where I made a mistake.







java javafx pdfbox






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 13 at 6:39

























asked Nov 12 at 14:56









Yupp

1289




1289








  • 2




    Which library do you use for displaying the PDF? PDFFile does not appear to be a PDFBox class. My guess: PDFFile.getPage wants a 1-based page number and in case of a 0 defaults to page 1.
    – mkl
    Nov 12 at 17:39










  • in my loadfile method I turn the pdf file to images and store them in my observablelist (pdfFilesPages is of the type observablelist<image>) of images. To display a page, I pick the desired page and create an image view object which I can add to a pane.
    – Yupp
    Nov 13 at 6:38












  • That's not what I asked. I asked "Which library do you use for displaying the PDF?"
    – mkl
    Nov 13 at 6:55










  • sorry. com.sun.pdfview is the library I use to display the pdf
    – Yupp
    Nov 13 at 7:06






  • 1




    you were right. The solution is to start the for loop at 1 and to go through it until the index is equal to pdfFile.getNumPages(). getPage() jumps to the first page when the integer is 0. Therefore I get the first page twice. thank you very much :)
    – Yupp
    Nov 13 at 7:48














  • 2




    Which library do you use for displaying the PDF? PDFFile does not appear to be a PDFBox class. My guess: PDFFile.getPage wants a 1-based page number and in case of a 0 defaults to page 1.
    – mkl
    Nov 12 at 17:39










  • in my loadfile method I turn the pdf file to images and store them in my observablelist (pdfFilesPages is of the type observablelist<image>) of images. To display a page, I pick the desired page and create an image view object which I can add to a pane.
    – Yupp
    Nov 13 at 6:38












  • That's not what I asked. I asked "Which library do you use for displaying the PDF?"
    – mkl
    Nov 13 at 6:55










  • sorry. com.sun.pdfview is the library I use to display the pdf
    – Yupp
    Nov 13 at 7:06






  • 1




    you were right. The solution is to start the for loop at 1 and to go through it until the index is equal to pdfFile.getNumPages(). getPage() jumps to the first page when the integer is 0. Therefore I get the first page twice. thank you very much :)
    – Yupp
    Nov 13 at 7:48








2




2




Which library do you use for displaying the PDF? PDFFile does not appear to be a PDFBox class. My guess: PDFFile.getPage wants a 1-based page number and in case of a 0 defaults to page 1.
– mkl
Nov 12 at 17:39




Which library do you use for displaying the PDF? PDFFile does not appear to be a PDFBox class. My guess: PDFFile.getPage wants a 1-based page number and in case of a 0 defaults to page 1.
– mkl
Nov 12 at 17:39












in my loadfile method I turn the pdf file to images and store them in my observablelist (pdfFilesPages is of the type observablelist<image>) of images. To display a page, I pick the desired page and create an image view object which I can add to a pane.
– Yupp
Nov 13 at 6:38






in my loadfile method I turn the pdf file to images and store them in my observablelist (pdfFilesPages is of the type observablelist<image>) of images. To display a page, I pick the desired page and create an image view object which I can add to a pane.
– Yupp
Nov 13 at 6:38














That's not what I asked. I asked "Which library do you use for displaying the PDF?"
– mkl
Nov 13 at 6:55




That's not what I asked. I asked "Which library do you use for displaying the PDF?"
– mkl
Nov 13 at 6:55












sorry. com.sun.pdfview is the library I use to display the pdf
– Yupp
Nov 13 at 7:06




sorry. com.sun.pdfview is the library I use to display the pdf
– Yupp
Nov 13 at 7:06




1




1




you were right. The solution is to start the for loop at 1 and to go through it until the index is equal to pdfFile.getNumPages(). getPage() jumps to the first page when the integer is 0. Therefore I get the first page twice. thank you very much :)
– Yupp
Nov 13 at 7:48




you were right. The solution is to start the for loop at 1 and to go through it until the index is equal to pdfFile.getNumPages(). getPage() jumps to the first page when the integer is 0. Therefore I get the first page twice. thank you very much :)
– Yupp
Nov 13 at 7:48












1 Answer
1






active

oldest

votes

















up vote
0
down vote













With the help of mkl I found the bug in my code. The for loop has to start at 1 and run until the index is equal to pdfFile.getNumPages(). The method getPage() return the first page when the index is 0. Because the index is 1 in the second iteration, the first page will be passed twice. The last page won't be passed since the loop has been finished. This seems to be the right approach.



private void loadFile(File file) throws FileNotFoundException, IOException {
if (file != null) {
ByteBuffer buffer = null;
try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
buffer.flip();

PDFFile pdfFile = new PDFFile(buffer);
List<Image> pages = new ArrayList<>();
for (int i = 1; i <= pdfFile.getNumPages(); i++) {
PDFPage page = pdfFile.getPage(i, true);
System.out.println("page: " + i + " - " + pdfFile.getNumPages());
java.awt.geom.Rectangle2D bbox = page.getBBox();
java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
(int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
(int) (bbox.getHeight() * 2.0), rect, null, true, true);
java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
bufImageGraphics.drawImage(awtImage, 0, 0, null);

Image image = SwingFXUtils.toFXImage(buffImage, null);
pages.add(image);
}
pdfFilePages.addAll(pages);
}
}
}





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264742%2fpdfbox-does-not-write-the-message-i-want-into-the-page%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    With the help of mkl I found the bug in my code. The for loop has to start at 1 and run until the index is equal to pdfFile.getNumPages(). The method getPage() return the first page when the index is 0. Because the index is 1 in the second iteration, the first page will be passed twice. The last page won't be passed since the loop has been finished. This seems to be the right approach.



    private void loadFile(File file) throws FileNotFoundException, IOException {
    if (file != null) {
    ByteBuffer buffer = null;
    try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
    buffer = ByteBuffer.allocate((int) channel.size());
    channel.read(buffer);
    buffer.flip();

    PDFFile pdfFile = new PDFFile(buffer);
    List<Image> pages = new ArrayList<>();
    for (int i = 1; i <= pdfFile.getNumPages(); i++) {
    PDFPage page = pdfFile.getPage(i, true);
    System.out.println("page: " + i + " - " + pdfFile.getNumPages());
    java.awt.geom.Rectangle2D bbox = page.getBBox();
    java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
    BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
    (int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
    java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
    (int) (bbox.getHeight() * 2.0), rect, null, true, true);
    java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
    bufImageGraphics.drawImage(awtImage, 0, 0, null);

    Image image = SwingFXUtils.toFXImage(buffImage, null);
    pages.add(image);
    }
    pdfFilePages.addAll(pages);
    }
    }
    }





    share|improve this answer

























      up vote
      0
      down vote













      With the help of mkl I found the bug in my code. The for loop has to start at 1 and run until the index is equal to pdfFile.getNumPages(). The method getPage() return the first page when the index is 0. Because the index is 1 in the second iteration, the first page will be passed twice. The last page won't be passed since the loop has been finished. This seems to be the right approach.



      private void loadFile(File file) throws FileNotFoundException, IOException {
      if (file != null) {
      ByteBuffer buffer = null;
      try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
      buffer = ByteBuffer.allocate((int) channel.size());
      channel.read(buffer);
      buffer.flip();

      PDFFile pdfFile = new PDFFile(buffer);
      List<Image> pages = new ArrayList<>();
      for (int i = 1; i <= pdfFile.getNumPages(); i++) {
      PDFPage page = pdfFile.getPage(i, true);
      System.out.println("page: " + i + " - " + pdfFile.getNumPages());
      java.awt.geom.Rectangle2D bbox = page.getBBox();
      java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
      BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
      (int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
      java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
      (int) (bbox.getHeight() * 2.0), rect, null, true, true);
      java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
      bufImageGraphics.drawImage(awtImage, 0, 0, null);

      Image image = SwingFXUtils.toFXImage(buffImage, null);
      pages.add(image);
      }
      pdfFilePages.addAll(pages);
      }
      }
      }





      share|improve this answer























        up vote
        0
        down vote










        up vote
        0
        down vote









        With the help of mkl I found the bug in my code. The for loop has to start at 1 and run until the index is equal to pdfFile.getNumPages(). The method getPage() return the first page when the index is 0. Because the index is 1 in the second iteration, the first page will be passed twice. The last page won't be passed since the loop has been finished. This seems to be the right approach.



        private void loadFile(File file) throws FileNotFoundException, IOException {
        if (file != null) {
        ByteBuffer buffer = null;
        try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
        buffer = ByteBuffer.allocate((int) channel.size());
        channel.read(buffer);
        buffer.flip();

        PDFFile pdfFile = new PDFFile(buffer);
        List<Image> pages = new ArrayList<>();
        for (int i = 1; i <= pdfFile.getNumPages(); i++) {
        PDFPage page = pdfFile.getPage(i, true);
        System.out.println("page: " + i + " - " + pdfFile.getNumPages());
        java.awt.geom.Rectangle2D bbox = page.getBBox();
        java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
        BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
        (int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
        java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
        (int) (bbox.getHeight() * 2.0), rect, null, true, true);
        java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
        bufImageGraphics.drawImage(awtImage, 0, 0, null);

        Image image = SwingFXUtils.toFXImage(buffImage, null);
        pages.add(image);
        }
        pdfFilePages.addAll(pages);
        }
        }
        }





        share|improve this answer












        With the help of mkl I found the bug in my code. The for loop has to start at 1 and run until the index is equal to pdfFile.getNumPages(). The method getPage() return the first page when the index is 0. Because the index is 1 in the second iteration, the first page will be passed twice. The last page won't be passed since the loop has been finished. This seems to be the right approach.



        private void loadFile(File file) throws FileNotFoundException, IOException {
        if (file != null) {
        ByteBuffer buffer = null;
        try (RandomAccessFile raf = new RandomAccessFile(file, "r"); FileChannel channel = raf.getChannel()) {
        buffer = ByteBuffer.allocate((int) channel.size());
        channel.read(buffer);
        buffer.flip();

        PDFFile pdfFile = new PDFFile(buffer);
        List<Image> pages = new ArrayList<>();
        for (int i = 1; i <= pdfFile.getNumPages(); i++) {
        PDFPage page = pdfFile.getPage(i, true);
        System.out.println("page: " + i + " - " + pdfFile.getNumPages());
        java.awt.geom.Rectangle2D bbox = page.getBBox();
        java.awt.geom.Rectangle2D rect = new Rectangle(0, 0, (int) bbox.getWidth(), (int) bbox.getHeight());
        BufferedImage buffImage = new BufferedImage((int) (bbox.getWidth() * 2d),
        (int) (bbox.getHeight() * 2d), BufferedImage.TYPE_INT_RGB);
        java.awt.Image awtImage = page.getImage((int) (bbox.getWidth() * 2.0),
        (int) (bbox.getHeight() * 2.0), rect, null, true, true);
        java.awt.Graphics2D bufImageGraphics = buffImage.createGraphics();
        bufImageGraphics.drawImage(awtImage, 0, 0, null);

        Image image = SwingFXUtils.toFXImage(buffImage, null);
        pages.add(image);
        }
        pdfFilePages.addAll(pages);
        }
        }
        }






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 13 at 7:55









        Yupp

        1289




        1289






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53264742%2fpdfbox-does-not-write-the-message-i-want-into-the-page%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            鏡平學校

            ꓛꓣだゔៀៅຸ໢ທຮ໕໒ ,ໂ'໥໓າ໼ឨឲ៵៭ៈゎゔit''䖳𥁄卿' ☨₤₨こゎもょの;ꜹꟚꞖꞵꟅꞛေၦေɯ,ɨɡ𛃵𛁹ޝ޳ޠ޾,ޤޒޯ޾𫝒𫠁သ𛅤チョ'サノބޘދ𛁐ᶿᶇᶀᶋᶠ㨑㽹⻮ꧬ꧹؍۩وَؠ㇕㇃㇪ ㇦㇋㇋ṜẰᵡᴠ 軌ᵕ搜۳ٰޗޮ޷ސޯ𫖾𫅀ल, ꙭ꙰ꚅꙁꚊꞻꝔ꟠Ꝭㄤﺟޱސꧨꧼ꧴ꧯꧽ꧲ꧯ'⽹⽭⾁⿞⼳⽋២៩ញណើꩯꩤ꩸ꩮᶻᶺᶧᶂ𫳲𫪭𬸄𫵰𬖩𬫣𬊉ၲ𛅬㕦䬺𫝌𫝼,,𫟖𫞽ហៅ஫㆔ాఆఅꙒꚞꙍ,Ꙟ꙱エ ,ポテ,フࢰࢯ𫟠𫞶 𫝤𫟠ﺕﹱﻜﻣ𪵕𪭸𪻆𪾩𫔷ġ,ŧآꞪ꟥,ꞔꝻ♚☹⛵𛀌ꬷꭞȄƁƪƬșƦǙǗdžƝǯǧⱦⱰꓕꓢႋ神 ဴ၀க௭எ௫ឫោ ' េㇷㇴㇼ神ㇸㇲㇽㇴㇼㇻㇸ'ㇸㇿㇸㇹㇰㆣꓚꓤ₡₧ ㄨㄟ㄂ㄖㄎ໗ツڒذ₶।ऩछएोञयूटक़कयँृी,冬'𛅢𛅥ㇱㇵㇶ𥄥𦒽𠣧𠊓𧢖𥞘𩔋цѰㄠſtʯʭɿʆʗʍʩɷɛ,əʏダヵㄐㄘR{gỚṖḺờṠṫảḙḭᴮᵏᴘᵀᵷᵕᴜᴏᵾq﮲ﲿﴽﭙ軌ﰬﶚﶧ﫲Ҝжюїкӈㇴffצּ﬘﭅﬈軌'ffistfflſtffतभफɳɰʊɲʎ𛁱𛁖𛁮𛀉 𛂯𛀞నఋŀŲ 𫟲𫠖𫞺ຆຆ ໹້໕໗ๆทԊꧢꧠ꧰ꓱ⿝⼑ŎḬẃẖỐẅ ,ờỰỈỗﮊDžȩꭏꭎꬻ꭮ꬿꭖꭥꭅ㇭神 ⾈ꓵꓑ⺄㄄ㄪㄙㄅㄇstA۵䞽ॶ𫞑𫝄㇉㇇゜軌𩜛𩳠Jﻺ‚Üမ႕ႌႊၐၸဓၞၞၡ៸wyvtᶎᶪᶹစဎ꣡꣰꣢꣤ٗ؋لㇳㇾㇻㇱ㆐㆔,,㆟Ⱶヤマފ޼ޝަݿݞݠݷݐ',ݘ,ݪݙݵ𬝉𬜁𫝨𫞘くせぉて¼óû×ó£…𛅑הㄙくԗԀ5606神45,神796'𪤻𫞧ꓐ㄁ㄘɥɺꓵꓲ3''7034׉ⱦⱠˆ“𫝋ȍ,ꩲ軌꩷ꩶꩧꩫఞ۔فڱێظペサ神ナᴦᵑ47 9238їﻂ䐊䔉㠸﬎ffiﬣ,לּᴷᴦᵛᵽ,ᴨᵤ ᵸᵥᴗᵈꚏꚉꚟ⻆rtǟƴ𬎎

            Why https connections are so slow when debugging (stepping over) in Java?