On Sat, 15 Jul 2023 at 23:58, Sandro Mani <manisan...@gmail.com> wrote:
> deflate was implemented as follows [...]
>
> which I translated to 0.10.x as
>
>          PoDoFo::PdfImageInfo info;
>          info.Width = width;
>          info.Height = height;
>          info.ColorSpace = colorSpace; //
> PoDoFo::PdfColorSpace::DeviceRGB or PoDoFo::PdfColorSpace::DeviceGray
>          info.BitsPerComponent = sampleSize; // 8 or 1
>          info.Filters = {PoDoFo::PdfFilterType::FlateDecode};
>          pdfImage->SetDataRaw(PoDoFo::bufferview(buf.data(),
> buf.size()), info);
>

I don't recommend doing this way for simple RGB/Gray input.
FlateDecode is the default compression for streams so you really
should just use the PdfImage::SetData(buffer, width, height, format,
scanLineSize) supplying proper image buffer input (these concepts are
the same in all graphics libraries). The library will default flate
encode the buffer.

> which however aborts here in
> PdfStreamedObjectStream::GetInputStream(PdfObject& obj) with
>
>      PODOFO_RAISE_ERROR_INFO(PdfErrorCode::NotImplemented, "Unsupported
> reading from streamed object stream");
>

Please, don't use PdfStreamedDocument for now, use PdfMemDocument (see [1]).

> The CCITT code, [...]
> which I attempted to port to 0.10.x as
>
>          PoDoFo::PdfDictionary decodeParams;
>          decodeParams.AddKey("Columns",
> PoDoFo::PdfObject(int64_t(img.width())));
>          decodeParams.AddKey("Rows",
> PoDoFo::PdfObject(int64_t(img.height())));
>          decodeParams.AddKey("K", PoDoFo::PdfObject(int64_t(-1))); // K
> < 0 --- Pure two-dimensional encoding (Group 4)
>          pdfImage->GetDictionary().AddKey("DecodeParms",
> PoDoFo::PdfObject(decodeParams));
>          PoDoFo::PdfImageInfo info;
>          info.Width = width;
>          info.Height = height;
>          info.ColorSpace = colorSpace;
>          info.BitsPerComponent = sampleSize;
>          info.Filters = {PoDoFo::PdfFilterType::CCITTFaxDecode};
> pdfImage->SetDataRaw(PoDoFo::bufferview(reinterpret_cast<const
> char*>(encoded), encodedLen), info);
>

 Please, re-try with with PdfMemDocument. This is a valid use case for
PdfImage::SetDataRaw, maybe it could be improved so "DecodeParms" are
added along filters in PdfImageInfo structure.

[1] https://github.com/podofo/podofo/issues/88


_______________________________________________
Podofo-users mailing list
Podofo-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/podofo-users

Reply via email to