Coder Social home page Coder Social logo

Comments (12)

jmcnamara avatar jmcnamara commented on June 21, 2024 1

@mohd-akram Thanks. Nice detective work.

from libxlsxwriter.

jmcnamara avatar jmcnamara commented on June 21, 2024

What is the issue? The image is in the file you attached and I compiled and confirmed that it works with libxlsxwriter version 1.1.5 on Ubuntu 22.04.

screenshot

from libxlsxwriter.

slw287r avatar slw287r commented on June 21, 2024

I uploaded the normal xlsx from version 1.1.3 above. Please find the abnormal xlsx without the intended image generated via version 1.1.5 below.

My OS info:
Linux 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

foo_bad.xlsx

from libxlsxwriter.

jmcnamara avatar jmcnamara commented on June 21, 2024

Could you add this this debug code to your example and run it on the system/version where is doesn't work as expected.

int main()
{
	png_t *png = calloc(1, sizeof(png_t));
	cairo_surface_t *sf = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, WIDTH, HEIGHT);
	cairo_t *cr = cairo_create(sf);
	cairo_set_antialias(cr, CAIRO_ANTIALIAS_BEST);
	cairo_set_source_rgb(cr, 0, 0, 0);
	cairo_select_font_face(cr, "Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
	cairo_set_font_size(cr, 200.0);
	cairo_move_to(cr, WIDTH / 10, HEIGHT / 1.25);
	cairo_show_text(cr, "FOOBAR");
	cairo_surface_write_to_png_stream(sf, png_write_callback, png);
	cairo_destroy(cr);
	cairo_surface_destroy(sf);

	// Add this to your code.
	printf("Version = %s\n", lxw_version());
	printf("Length  = %zu\n", png->length);
	printf("Data    = %c%c%c\n", png->data[1], png->data[2], png->data[3]);

	lxw_workbook *wb = workbook_new("foo.xlsx");
	lxw_worksheet *ws = workbook_add_worksheet(wb, "bar");
	worksheet_insert_image_buffer_opt(ws, 0, 0, png->data, png->length, &img_opt);
	lxw_error e = workbook_close(wb);
	if (e) {
		fprintf(stderr, "Error closing workbook, %d = %s\n", e, lxw_strerror(e));
		return e;
	}
	free((char *)png->data);
	free(png);
	return 0;
}

You should get ouput like this:

Version = 1.1.5
Length  = 13543
Data    = PNG

from libxlsxwriter.

slw287r avatar slw287r commented on June 21, 2024

Here is what I get:

% ./a
Version = 1.1.5
Length  = 12489
Data    = PNG
[WARNING]: worksheet image insertion: couldn't read image type for: image_buffer.

and for v1.1.3, no warning and normal xlsx:

% ./a
Version = 1.1.3
Length  = 12489
Data    = PNG

from libxlsxwriter.

jmcnamara avatar jmcnamara commented on June 21, 2024

Thanks. In the 1.1.5 example are you using USE_MEM_FILE=ON?

from libxlsxwriter.

slw287r avatar slw287r commented on June 21, 2024
  • option(USE_MEM_FILE "Use fmemopen()/open_memstream() in place of temporary files" OFF) - normal xlsx
% ./a_mem_off
Version = 1.1.5
Length  = 12489
Data    = PNG
  • option(USE_MEM_FILE "Use fmemopen()/open_memstream() in place of temporary files" ON) - abnormal xlsx
% ./a_mem_on
Version = 1.1.5
Length  = 12489
Data    = PNG
[WARNING]: worksheet image insertion: couldn't read image type for: image_buffer.

from libxlsxwriter.

jmcnamara avatar jmcnamara commented on June 21, 2024

@mohd-akram could you have a look at this issue. I can't reproduce it on the mac or Ubuntu systems that I have but I suspect that the issue may be the rewind() below similar to issues you fixed in the second part of your patchset:

https://github.com/jmcnamara/libxlsxwriter/blob/main/src/worksheet.c#L10396

That [WARNING] occurs when the library can't read any image markers in the data but the "PNG" marker is clearly there so I suspect the stream isn't being rewound.

from libxlsxwriter.

mohd-akram avatar mohd-akram commented on June 21, 2024

This is a bit of a strange issue. The image buffer code wasn't really touched since it already used buffers. The CentOS version is quite old and I suspect it might be a glibc issue. Can you print what's the glibc version (ldd --version)? Also, try with version 1.1.3 and the USE_FMEMOPEN option set to on, I suspect it didn't work then either.

from libxlsxwriter.

mohd-akram avatar mohd-akram commented on June 21, 2024

Tried this in a centos:7 podman container (glibc 2.17).

@jmcnamara Seems to be the bug mentioned here under notes. Changing w+b to wb+ removes the warning for me (I haven't tried opening the XLSX file). This will also need to be changed in worksheet_set_background_buffer.

@slw287r Try making that change and see if it works for you.

from libxlsxwriter.

slw287r avatar slw287r commented on June 21, 2024

wb+ works for me

Tried this in a centos:7 podman container (glibc 2.17).

@jmcnamara Seems to be the bug mentioned here under notes. Changing w+b to wb+ removes the warning for me (I haven't tried opening the XLSX file). This will also need to be changed in worksheet_set_background_buffer.

@slw287r Try making that change and see if it works for you.

from libxlsxwriter.

jmcnamara avatar jmcnamara commented on June 21, 2024

@slw287r Thanks for the test/report. Fixed on main.

Closing.

from libxlsxwriter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.