> On 26 Jan 2017, at 17:21, Sergiu Dumitriu <[email protected]> wrote:
> 
> On 01/26/2017 05:59 AM, Anca Luca wrote:
>> Hello Vincent, all
>> 
>> Thanks for these clear responses.
>> See below some more info, from my experience.
>> 
>> 
>> 
>> On Thu, Jan 26, 2017 at 11:15 AM, Vincent Massol <[email protected]> wrote:
>> 
>>> Hi everyone,
>>> 
>>> Thanks to everyone who answered on this topic and help brainstorm about
>>> it. I made a mistake sending this as a proposal; I should have sent it as a
>>> brainstorming instead.
>>> 
>>> Note that I’ve also discussed with Anca yesterday and she told me that I
>>> haven’t been nice in the way I answered her questions (not explaining
>>> enough and throwing off her questions). I wanted to publicly apologise for
>>> this since this wasn’t my intention and when reading my answers again I can
>>> see why this was felt this way. Let me try to improve below :)
>>> 
>>> I also failed to explain properly the context that led me to send this
>>> email: our roadmap for 9.0/9.1/9.2 had the table issue to fix (there was 2
>>> days allocated to it) and Guillaume worked on analysing it and the
>>> conclusion was that it would take more than 2 days and would need to send
>>> some PR (or fork) FOP and thus this issue is now dropped for 9.0/9.1/9.2. I
>>> was trying to think out of the box and in order to provide a solution to
>>> Olivier Seres (who raised the issue recently) I proposed to him that he
>>> used the browser’s print feature and it did work better for this specific
>>> use case. So I thought to myself: maybe there’s some value in using this
>>> more.
>>> 
>>> So let me try to recap what was said and reach a conclusion on this thread.
>>> 
>>> Features needed:
>>> ==============
>>> 
>>> * Table of contents. This is a difficult one. We can have a TOC generated
>>> in our print.vm. The hard part is finding out the corresponding page
>>> numbers for the use case when the user wants to print the PDF. It could
>>> maybe be solved by setting fixed margins/paper size/orientation. But it
>>> doesn’t look easy. I haven’t checked how it’s done in the PDF export though
>>> so I could be wrong.
>>> 
>> 
>> As far as I remember, this is relying on an xsl-fo feature, the same one
>> that we use to obtain the number of printed pages (when we print
>> pagination, in footer, like 1/3, 2/3).
>> 
> 
> https://www.w3.org/TR/css-gcpm-3/#cross-references will do that, but no
> browser supports it yet.
> 
>>> 
>>> * Page headers/footers. This is also a difficult one because even though
>>> this is part of the css3-page spec, it’s not yet implemented by browsers
>>> and especially by chrome. There are plenty of people trying to do this when
>>> I googled it with various more or less successful options. A promising
>>> possibility was the position:fixed option but it has its own issues (chrome
>>> said they fixed the issue but not sure it’s true) and we’d need to make
>>> sure that the text really goes in the margin and not in the content. It’s
>>> possible that a combination of various solutions depending on the browser
>>> could work but it’s not perfect and it’s complex.
>>> 
>>> * Margin sizes/orientation/paper size. This seems supported by the @page
>>> CSS element and I saw it was mentioned to be supported by chrome but I
>>> didn’t get to test it nor across browsers. To be tested.
>>> 
>>> * Local links. This should be ok I think since in the print.vm we can
>>> control which XWikiServletURLFactory to use and generate anchors for local
>>> links. This is essentially what we’re already doing for HTML export in the
>>> ExportURLFactory class. However Anca raised the point that it doesn’t seem
>>> to work on FF. Would need to be checked further.
> 
> No, what Anca said (and I can confirm) is that links don't work at all
> in a PDF printed by Firefox/Linux. They aren't links, they're just
> underlined plain text, unclickable. When printed from Chrome the URLs
> work fine, and there's no need to use a special URLFactory, Chrome
> correctly transforms relative URLs to absolute URLs.
> 
> Firefox most likely optimized its code for paper printing, with the
> option to make an actual PDF that can be displayed on screen arriving
> late, so it's a second class citizen, built on top of a process that
> doesn't intend to generate an interactive document.
> 
>>> * External links. I don’t think there’s any real issue here. I tried
>>> PDF-printing a web page with links and it worked fine. I think the reason
>>> it doesn’t work when doing this in xwiki could be because of our print.css
>>> which removes the display of “a”:
> 
> No it doesn't, those are interactive JS-only tools that don't make sense
> in a PDF. It's not hiding all <a> elements, just the following special
> cases:
> 
> .commentheader .commenttools a
> a.tag-delete
> .tag-add a

Ok then that seals it! The print to PDF is only for the print use case where 
links are not useful.

The only discussion left now is the new one I posted about in the jira issue 
regarding flying saucer vs FOP:
http://jira.xwiki.org/browse/XWIKI-5627?focusedCommentId=93983&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-93983

Thanks
-Vincent

> 
>>> #commentform, .xwikitabbar li, #Historyshortcut, #Informationshortcut,
>>> .separator,
>>> .commentheader .commenttools a, a.tag-delete , .tag-add a {
>>>  display: none !important;
>>> }
>>> 
>>> * Browser-dependent result. True. In addition we’d need to ensure that
>>> browser offer a print to PDF feature. I know this is true on Mac and also
>>> on FF in unix (on Thomas’s computer and I think Thomas told me he didn’t
>>> have any add on). Haven’t checked other combinations. Denis mentioned that
>>> it’s not the default in Windows < 10.
>>> 
>>> Research
>>> ========
>>> 
>>> The following alternatives to FOP exist but have their own limitations
>>> (see Denis answer for details):
>>> * PDF Clown
>>> * PDFBox
>>> * wkhtmltopdf
>>> * pdfkit
>>> * iText
>>> * Flying saucer, see http://flyingsaucerproject.github.io/flyingsaucer/r8/
>>> guide/users-guide-R8.html#pdf
>>> 
>>> Conclusions
>>> =========
>>> 
>>> I feel there are several main use cases:
>>> 
>>> * Wanting to print the current page. The browser print feature could work
>>> fine for this if we were to improve a bit our print.css (inherit from
>>> view.css for example)
>>> * Wanting to have some professional quality PDF export. There’s no doubt
>>> that the best solution for this is ATM our FOP-based PDF export and w
>>> * Scripted PDF exports (to generate invoices automatically for example).
>>> Again our FOP-based PDF export is the best answer.
>>> 
>>> So I agree with all of you who said that CSS3-page is not ready yet. The
>>> FOP2 spec has been stopped and the future seems to be CSS3-page but it’s
>>> not moving fast right now.
>>> 
>>> So I propose that we:
>>> * Marginally improve our print.css for page printing
>>> * Continue to improve our FOP-based solution and possibly send PR to this
>>> project and if they’re not applied quick-enough, then fork it and took some
>>> ownership of it. However we just need to acknowledge that this is going to
>>> be substantial work and we still have a sizeable number of open issue for
>>> the PDF generation.
>>> 
>> 
>> For tables layouting (XWIKI-5627), which seems to be our biggest problem
>> right now, i've seen implemented, in the past, some control the sizes of
>> the columns, but "manually" - as in, the size would not be computed
>> automatically depending on the content of the table. Set in a certain way
>> (I need to remember exactly how), the sizes of the columns can be imposed
>> to the pdf.
>> So, if table autolayout is such a pain (and there is serious proof to
>> support that it is), maybe we can offer a intermediate solution, such as a
>> "helper" for the user preparing the document: something like a macro or
>> even a wiki syntax snippet or something, that users could use to control
>> the sizes of the columns of a specific table. This would obviously not
>> cover all cases, but I think it could cover the usecase of Olivier Seres
>> (afaik the usecase is something like this: "he prepared a document for
>> print, he wanted to print it and realized that the tables were incorrect on
>> print". From my point of view, using this macro or snippet could be part of
>> the preparation of a document for print, and we could have it by default in
>> the wiki - if it's a macro - or as an FAQ if it's a snippet).
>> Lemme know if you're interested in this idea, as I will need to try to find
>> the code we used to do this.
>> 
>> Thanks,
>> Anca
>> 
>> 
>>> 
>>> Thanks
>>> -Vincent
>>> 
>>>> On 18 Jan 2017, at 14:54, Vincent Massol <[email protected]> wrote:
>>>> 
>>>> Hi devs,
>>>> 
>>>> We have plenty of existing limitations in our PDF export (table
>>> autoresize, etc) which comes from FOP and our usage of it. And it’s hard to
>>> improve it.
>>>> 
>>>> I’d like to propose the following:
>>>> 
>>>> * Promote the browser’s print to PDF feature instead of our PDF Export
>>> by triggering the browser’s print feature when clicking on Export > PDF in
>>> the UI.
>>>> * Work on our print.css so that it has all the styles we have in view
>>> mode (right now for ex, info boxes for ex do not have a nice style).
>>>> * Move our PDF Export java code out of xwiki-platform and into an
>>> optional extension that we move into xwiki-contrib. The use case for it
>>> would be when you need to generate PDF from scripts.
>>>> 
>>>> WDYT?
>>>> 
>>>> Thanks
>>>> -Vincent
>>> 
>>> 
> 
> 
> -- 
> Sergiu Dumitriu
> http://purl.org/net/sergiu

Reply via email to