galkahana / HummusJS

Node.js module for high performance creation, modification and parsing of PDF files and streams
http://www.pdfhummus.com
Other
1.14k stars 169 forks source link

PDFHummus is working when I run it from visual studio but fail when using the executable #486

Open salentoq opened 7 months ago

salentoq commented 7 months ago

I am trying to use PDFHummus to generate a pdf that shows a plot, I put all the libs and dlls in the main folder and created a very simple pdf of one page with text and an image using this code:

#include <iostream>
#include <string>
// end standard library includes

// pdfwriter library includes
#include "PDFWriter.h"
#include "PDFPage.h"
#include "PageContentContext.h"
#include "PDFFormXObject.h"
#include "ResourcesDictionary.h"
// end pdfwriter library includes

using namespace PDFHummus;

int main(int argc, char** const argv) {
    // Step 1: Create a PDFWriter instance
    PDFWriter pdfWriter;
    if (pdfWriter.StartPDF("HelloWorld.pdf", ePDFVersion13) != PDFHummus::eSuccess)
        return;
    PDFPage* page = new PDFPage();
    page->SetMediaBox(PDFRectangle(0, 0, 791, 612));
    PageContentContext* cxt = pdfWriter.StartPageContentContext(page);
    cxt->DrawImage(300, 570, "avent3.pdf");
//  cxt->DrawImage(300, 570, "avent3.png");
    PDFUsedFont* font = pdfWriter.GetFontForFile("times.ttf");
    AbstractContentContext::TextOptions textOptions(font, 14, AbstractContentContext::eGray, 0);
    cxt->WriteText(30, 570, "Hello World", textOptions);
    pdfWriter.EndPageContentContext(cxt);
    pdfWriter.WritePage(page);
    delete page;

    // Step 2 Close the PDF
    pdfWriter.EndPDF();

    return 0;
}

I added all libs to the linker and all the includes to the c++ part of the properties, when I run it from visual studio in release mode it works fine, but when I run the executable the pdf fails to create correctly (it creates the file but is corrupted).

If I comment all the insert image lines and leave only the text it works fine If I leave the text and insert the png file it works fine

is when I try to add the pdf vector image file that the executable stops working, but again, from visual studio it works fine. I think I am missing a dll that I have to add to the working folder but can't figure out which one

any ideas are surely appreciated

salentoq commented 7 months ago

I suspect cxt->DrawImage(300, 570, "avent3.pdf"); is what is causing the problem, when I comment that line and use cxt->DrawImage(300, 570, "avent3.png"); instead everything works

galkahana commented 7 months ago

Maybe it cant find a file. Maybe share a sample project?

salentoq commented 7 months ago

Executablefolder mainfolder

Thank you for your response, this is screenshots of my main folder and the executable folder

includes libraries

And this is screenshot of the includes and libraries.

when run from Visual studio works great, not so much from the executable The code is the one I put in the first post.

galkahana commented 7 months ago

Im gonna need the files to recreate the problem. Otherwise cant help you.

galkahana commented 7 months ago

Also, test with abs paths. Might be it cant find the pdf file to read it

galkahana commented 7 months ago

And start up hummus with logs. Might be able to tell you something. Example of creating logs: https://github.com/galkahana/PDF-Writer/blob/master/PDFWriterTesting/HighLevelImages.cpp#L39

salentoq commented 7 months ago

Sorry I didn't get back to you sooner I was out of town.

So the weirdest thing happened, I started a new project from scratch, and started adding the same lines of code I brought here and same files reported in the screenshots. I added a line and tested. At the end of the day the new project worked.

The only difference between the two projects is that when I was creating it on Visual Studio it asked me if I wanted the project in the same folder as the solution and the first time I said yes and the second time I said no.

I don't not why or even if that made the difference, I just put it here in case someone has the same problem could give it a try.

Thank you for your work and your help!!