[libreoffice-design] pdf import design docs?
Larry Evans
cppljevans at suddenlink.net
Wed Oct 5 18:06:06 UTC 2016
On 10/05/2016 10:24 AM, Michael Meeks wrote:
> Hi Larry,
>
> First - really great to have you looking at that
> code ! =)
Thanks for the encouragement Michael.
>
> On 10/05/2016 04:10 PM, Larry Evans wrote:
>> I'm trying to understand how the pdf import code works.
>> I've tried looking at the code; however, that's hard to
>> follow; hence, I was hoping there was some sort of design
>> document explaining somewhat how the code works.
>
> Second - the design list is really for User Experience / developer
> interaction, and this seems like a real gnarly coding problem - so I've
> re-sent it to the dev-list =)
OOPS. Sorry about that.
>
>> TIA for any pointers.
>
> Sure - so the PDF import is a bit of a mess; it currently spawns a
> remote process using poplar to parse the PDF, and then extracts (via a
> simple text protocol) data from poplar's rendering to re-constitute into
> internal ODF callbacks to produce an internal document; at least -
> that's if I got it right =)
Well, I did see code here:
sdext/source/pdfimport/pdfparse/pdfparse.cxx
but that looked like it used boost/spirit to parse the pdf file
(about line 553):
boost::spirit::parse( pBuffer,
pBuffer+nLen,
aGrammar,
boost::spirit::space_p );
but then, trying to find where that (or the caller of that) was called
lead me to:
sdext/source/pdfimport/wrapper/wrapper.cxx
where there is a call(around line 927):
std::unique_ptr<pdfparse::PDFEntry> pEntry(
pdfparse::PDFReader::read( aPDFFile.getStr() ));
but that's called in a function:
bool checkEncryption
whose name doesn't suggest any translation into something
like the xml which is what libreoffice stores its files as,
IIUC:
https://en.wikipedia.org/wiki/OpenOffice.org_XML
but, looking further in that file, there's, as you mention,
what looks like a remote process call in function:
bool xpdf_ImportFromFile
on about line 1079:
osl_executeProcess_WithRedirectedIO(converterURL.pData,
args,
nArgs,
osl_Process_SEARCHPATH|osl_Process_HIDDEN,
pSecurity,
nullptr, nullptr, 0,
&aProcess, &pIn, &pOut, &pErr);
So that's where I wanted some overall design help, because I
thought it odd that boost::spirit was used to parse the
file, I guess, just to determine whether it was encrypted,
and then, an xpdf process was used to parse the same file
again. That seemed awfully redundant.
>
> Poplar/xpdf has a GPL license and so requires all this silliness.
>
Hence, I guess Poplar/xpdf does some sophisticated
processing that the use of boost::spirit does not do or is
incapable of doing. Of course, I'm jumping to conclusions
which hopefully people of the devel list will correct :)
> In general - it would be -way- better to pick up something like eg.
> pdfium - and add a rendering front-end there to match first, the same
> protocol (but we can do this in-process), and subsquently to simplify
> and factor lots of that madness out =) PDFium seems to be gaining
> traction in browsers (Chrome + Firefox) and so on.
Thanks for the pointer. I'm googling for PDFium now.
>
> Does that make sense ? out of interest, what bug or mis-feature are you
> interested in there ? are you looking at:
>
> filter/source/pdf
> and sdext/source/pdfimport
The latter.
>
> ? =)
I'm trying to solve the problem I posed earlier in this
post:
https://lists.freedesktop.org/archives/libreoffice/2014-January/059106.html
I've also noticed that the font sizes and location of
letters is sometime not correct; hence, I'd like to figure
out how to correct that.
Thanks for your interest, Michael.
-regards,
Larry
More information about the LibreOffice
mailing list