Hello Dominik, PoDoFo maintainers, contributors and users,

I'm happy to announce that after other months of strong development
pdfmm, the PoDoFo fork I talked about last year, reached its first tagged
release 0.9.20. The big list of changes[1] is comprensive of the changes
of the first announce[2] together with latest features that I will summarize
below:

- A new PdfDynamicEncoding class has been added and set as the default
encoding in font creation. The dynamic encoding is a CID encoding that
gets built automatically when encoding strings. That is: Unicode
characters are automatically mapped to arbitrary CID characters and a
valid /ToUnicode map is created in the font when embedding. This mean
you can just do painter.DrawText("Unicode string АБВГДЕЁ", x, y) and
forget about picking or building a right PdfEncoding for the font.
Beware: this doesn't yet mean full text shaping/ligatures support, but
it's a big step in the right direction for supporting more complex scripts,
such as arabic and asian ones;
- Standard14 fonts coming from PDFium[3] (PDFium is a recent pdf
renderer developed by google) have been bundled, enabling full font
embedding of such fonts;
- A new PdfContentsReader class has been added: this class completely
replaces the old PdfContentsTokenizer (which was removed), providing
Pdf operators recognition and XObject following. This class is going
to be the core tool in building a PDF renderer and other PDF processing
operations;
- C++ move semantics has been added to most core classes
(PdfVariant/PdfObject/PdfArray/PdfDictionary), allowing to improve
performance in parsing indirect objects and page contents. I don't
have measurements but this effectively halved the timings of my test
suites. A lot other of micro optimizations appear to be possible following
this move;
- PDF/A preservation: the original PoDoFo library is not able to
manipulate a PDF/A compliant file without loosing this compliance.
pdfmm is now able to perform saves/incremental saves preserving the
compliance (that is: updating the XMP metadata and respecting some
serialization restrictions of PDF/A);
- The automatic unit tests have been restored and a full-fledged
continuous integration for Windows, linux and mac has been implemented
using on github actions[4];
- A playground area with full set of static dependencies built for
Win64, macos-x86_64, linux-x86_64 has been prepared[5]. While the
dependencies will comes without warranty, this makes testing/developing
pdfmm completely hustle-free;
- A lot of bug fixes and other things that I forget about, just look the
changelog and git commit descriptions.

While I still somehow don't recommend anyone to use pdfmm until I
settle the API review (something that I plan to do together with other tasks
before this summer in a 0.10.x release[6]) and assuming the C++ PDF
manipulation user base to be quite small, I begin to think that pdfmm
won't be ignored for much longer. pdfmm is at least 1 man year worth of
work ahead of PoDoFo and represents a solid improvement in features
and API quality, with a very little set of features dropped (only the broken
PDF linearization support has been removed and Type1 font subsetting
is temporarily disabled) and while I noticed a couple of interesting
PoDoFo 0.9.x patches emerging (stack guards and modern encryption
protocols) I doubt anyone at this point is really doing the same kind
of active development I am pushing into pdfmm (or at least nobody talk
about it openly in the PoDoFo mailing list). I thought a lot about my
relationship with the PoDoFo project in these months and while I like to
work without constraints and still aim to push for my vision of what
a modern C++ PDF manipulation should be, I am concerned that this
work may not settle in the long run. Convinced by zyx's openings in a
recent discussion[7] I offer the community to merge back this work to
PoDoFo. I am going to do this work at some conditions, which should be
seen more as a concrete plan of action:

1) PoDoFo project should be split in two different subprojects,
one covering the library and unit tests, one covering the tools.
I will initially maintain the new library and test code, and keep this
role until the I feel a good fit for the role and the community is
comfortable with my work. Other people should take a step forward and
show interest in porting the PoDoFo tools, which I will not maintain
as a whole (I can port/maintain one or two). The old PoDoFo 0.9.x
codeline will be branched and maintained separately by current people;
2) pdfmm should be accepted as a whole replacement of the PoDoFo
library and test code, that will converge to a 1.0 release. pdfmm name
references will be renamed back to PoDoFo before the move. Also
PoDoFo 0.9.x latest commits will be merged to the new PoDoFo 1.x.y
series (pdfmm is already currently in sync with SVN trunk). Some
commits/patches will not be merged because unnecessary or the same
features can be obtained in new ways. I am **not** going to
gradually patch PoDoFo towards the actual state of pdfmm: I
just don't have time for that and I don't see many advantages in doing
it either;
3) PoDoFo development is moved without further doubts to a modern
git based development platform such as github/gitlab/... . Minimum
required features are easy pull-request interface, issue tracker, win-mac-
linux Continous Integration with submodules support. I'm in favor
or using github, which I am using in pdfmm, as the chosen platform.
I'm open to evaluate other options if a person shows some advantages
over my proposed solution and the same person is able to convert the
current CI infrastructure, keeping submodule support (I'm not going to
do this porting work). 0.9.x maintain tasks can continue to happen on
the SF platform/mailing list;
4) As soon as the the new development platform is defined and set up,
the old SourceForge web site begins to inform of the existence of the
new platform. Either one person take a step forward and offers to
create a new basic static website/FAQ for the new-PoDoFo or we go
without a website at all. In both cases at some point the old SF website
should be archived. Of course it can stay online indefinitely for
preservation purposes;
5) Last but not least: I ask for a Mozilla Public License re-licensing
of PoDoFo. This is a very complex topic involving legal/copyright
matters. I am creating a new thread shortly after to discuss this,
explaining exactly why I suggest this move. Please, let's discuss
about this topic in that thread.

I am really sorry for the lengthy post and if my words sounds bossy
and or/shows little or no room for discussion. I actually truly encourage
you to review the pdfmm code and say what you really think about it
and about my offer/plan. I don't want to enforce a takeover of the
project with a muscular move and if some of you feel it like that then
it's all my fault as I couldn't suggest better ways to improve the
development of PoDoFo in the past couple of years. I put no rush,
but I foresee a window of opportunity later on this summer around August,
and I would like the discussion to happen (and finish) before that. I will
consider the plan accepted if Dominik, and PoDoFo more active
maintainers in the past years, I guess Matthew and Zyx (do you mind
to reveal us your name :-) ?), agree with it.

Thank you for your attention.

Cheers,
Francesco

[1] https://github.com/pdfmm/pdfmm/blob/master/CHANGELOG.md
[2] 
https://www.mail-archive.com/podofo-users@lists.sourceforge.net/msg04628.html
[3] https://github.com/mozilla/pdf.js/tree/master/external/standard_fonts
[4] https://github.com/pdfmm/pdfmm/actions
[5] https://github.com/pdfmm/pdfmm/tree/master/playground
[6] https://github.com/pdfmm/pdfmm/blob/master/TODO.md
[7] 
https://www.mail-archive.com/podofo-users@lists.sourceforge.net/msg04674.html


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

Reply via email to