Description: Once we set support for OpenType Font Variation, we need to implement a converter to convert its instances into static glyphs before variable font used for printing and experting to PDF. According to OpenType Font Variations Overview:[1] “In certain application workflows, it may be necessary to dynamically generate a static font resource for a particular instance — that is, conventional, non-variation font tables that use interpolated values for a particular instance. This may be needed in order to provide font data to legacy software or data formats that do not understand or support variable fonts, such as legacy printer drivers, or PDF or XPS files with embedded font data. ” ==Ref== [1] https://www.microsoft.com/typography/otspec/otvaroverview.htm Steps to Reproduce: - Actual Results: - Expected Results: - Reproducible: Always User Profile Reset: No Additional Info: User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0
Yep, sounds necessary -> NEW
Created attachment 138660 [details] Bahnschrift font In Windows 10 Fall Creators Update, Microsoft introduced a variable font "Bahnschrift", this font including 5 weights produce via font variation. In LibreOffice Writer, this font weights works as expected on screen, but not works neither PDF expert nor printing. Here is my copy of this font.
Created attachment 138661 [details] My snapshot Here is what I have seen. Version: 6.0.0.1 (x64) Build ID:d2bec56d7865f05a1003dc88449f2b0fdd85309a CPU 线程:4; 操作系统:Windows 10.0; UI 渲染:默认; 区域语言:zh-CN (zh_CN); Calc: group
Created attachment 138662 [details] Fig 1. PDF Experting This is what I got after clicking "Expert to PDF" button on the toolbar.
Created attachment 138663 [details] Fig 2. Printing work This is the same ODT document "printed" via PDFcreator 3.0.
Created attachment 138674 [details] Test file.
Seems more likely the printing and export to PDF would be reworked for HB/FreeType and use of a skia back end rather than restamping as "static glyphs" and sub-setted fonts. Lets let the devs decide...
(In reply to V Stuart Foote from comment #7) > Seems more likely the printing and export to PDF would be reworked for > HB/FreeType and use of a skia back end rather than restamping as "static > glyphs" and sub-setted fonts. Do we really want to use Skia? Working with is apparently a very painful experience: https://news.ycombinator.com/item?id=16146132 > Google has essentially made it as painful as possible to use Skia outside of the google ecosystem. > Skia isn't on any package managers etc.
(In reply to Buovjaga from comment #8) > (In reply to V Stuart Foote from comment #7) > > Seems more likely the printing and export to PDF would be reworked for > > HB/FreeType and use of a skia back end rather than restamping as "static > > glyphs" and sub-setted fonts. > > Do we really want to use Skia? Working with is apparently a very painful > experience... Hard to say. But Miklos was already well versed with Google's pdfium project having adopted it for the PDF insert filter. And restoring a "break" feature or replacing the import filter completely already requires doing something along these lines of implementing a skia PDF backend -- see bug 106581 I beleive there is some consensus building that a FreeType everywhere approach is the way forward cross platform. Again for the devs to decide, but printing and export to PDF will likely need to be refactored cross platform anyhow. Support for OTF Variable fonts comes with it.
Not necessarily skia, but long-term some kind of vector output from pdfium would be nice. pdfium currently exposes vector output via painting on a HDC (Windows-specific) or on a skia surface (experimental). So probably best to wait till we see where that leads, we definitely want some kind of output that can be mapped to LO's idea of vector images (VCL metafile, drawinglayer primitives, whatever).
We currently do not support variable fonts at all, any apparent support is accidental. For PDF generation we will definitely need to generate static instances of the fonts before embedded them in PDF files. Using Skia or pdfium or not does not change much, the static instances will need to be generated regardless (either by us or by the new printing backend if we ever have a new one). Pdfium isn’t currently a viable replacement IMO as the subsetter it uses does not handle fonts with CFF table (.otf fonts) so it will be a big regression for us. I don’t even think it does static instantiation of variable fonts.
Just to be clear, I have no plans to replace parts of our current PDF export code with pdfium, the long-term idea is to replace poppler/xpdfimport with it; but even for those what can be common language to transfer vector graphics is an open question. :-)
(In reply to Miklos Vajna from comment #12) > Just to be clear, I have no plans to replace parts of our current PDF export > code with pdfium, the long-term idea is to replace poppler/xpdfimport with > it; but even for those what can be common language to transfer vector > graphics is an open question. :-) I agree with you, I think you just create new codes or a library into a proper level to do it.
(In reply to Khaled Hosny from comment #11) > We currently do not support variable fonts at all, any apparent support is > accidental. For PDF generation we will definitely need to generate static > instances of the fonts before embedded them in PDF files. Using Skia or > pdfium or not does not change much, the static instances will need to be > generated regardless (either by us or by the new printing backend if we ever > have a new one). > > Pdfium isn’t currently a viable replacement IMO as the subsetter it uses > does not handle fonts with CFF table (.otf fonts) so it will be a big > regression for us. I don’t even think it does static instantiation of > variable fonts. I found Chrome made it works, here are some steps to reproduce: 1. Opening https://mdn.mozillademos.org/zh-CN/docs/Web/CSS/font-weight$samples/font-weight?revision=1344671 (this page availble at https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-weight) 2. Replace font face as Bahnschrift at the top 3. Click three dots on the toolbar, then click Print 4. Select PDFCreator to print. Then I found all font weights printed as expected. So how does Chrome made the implementation?
(In reply to Khaled Hosny from comment #11) > We currently do not support variable fonts at all, any apparent support is > accidental. For PDF generation we will definitely need to generate static > instances of the fonts before embedded them in PDF files. Using Skia or > pdfium or not does not change much, the static instances will need to be > generated regardless (either by us or by the new printing backend if we ever > have a new one). > > Pdfium isn’t currently a viable replacement IMO as the subsetter it uses > does not handle fonts with CFF table (.otf fonts) so it will be a big > regression for us. I don’t even think it does static instantiation of > variable fonts. I found Chrome made it works, here are some steps to reproduce: 1. Opening https://mdn.mozillademos.org/zh-CN/docs/Web/CSS/font-weight$samples/font-weight?revision=1344671 (this page availble at https://developer.mozilla.org/zh-CN/docs/Web/CSS/font-weight) 2. Replace font face as Bahnschrift at the bottom 3. Click three dots on the toolbar, then click Print 4. Select PDFCreator to print. Then I found all font weights printed as expected. So how does Chrome made the implementation?
I think this should also works for EPUB expert, because many EPUB readers does not support variable fonts, althrough they can load embedded fonts.
(In reply to Khaled Hosny from comment #11) > We currently do not support variable fonts at all, any apparent support is > accidental. For PDF generation we will definitely need to generate static > instances of the fonts before embedded them in PDF files. Using Skia or > pdfium or not does not change much, the static instances will need to be > generated regardless (either by us or by the new printing backend if we ever > have a new one). > Does HarfBuzz able to do such subsetting right now? If so there would be small amount of works to implement it.
This is still present in Version: 6.4.0.0.alpha0+ (x64) Build ID: 11a1bdc5fa0312111ddf9c1b7779a114b97e361c CPU threads: 4; OS: Windows 10.0; UI render: default; VCL: win; TinderBox: Win-x86_64@42, Branch:master, Time: 2019-06-19_00:00:04 Locale: zh-CN (zh_CN); UI-Language: en-US Calc: threaded As a workaround, we have to use Microsoft Print to PDF on Windows 10.
For Windows 10, if we are really need them to present in PDF files, we can modify the preferences some virtual printers like CutePDF and PDFCreator as following steps: 1. Open Settings from Start Menu, then click Devices -> Printers and Scanners, then click one of these printers you want to use, and then click Manage, finally. click Printing Preferences. 2. In the Printing Preferences dialog, click Advance button, then modify these Advanced Options as below: TrueType Font: Download as SoftFont TrueType Font Download Option: Outline Then the virtual printer would accept font variation instances, convert them, and embedded into PDF file, this can be done as another workarounds.
For Windows 10, if we are really need them to present in PDF files, we can modify the preferences of some virtual printers like CutePDF and PDFCreator as following steps: 1. Open Settings from Start Menu, then click Devices -> Printers and Scanners, then click one of these printers you want to use, and then click Manage, finally. click Printing Preferences. 2. In the Printing Preferences dialog, click Advance button, then modify these Advanced Options as below: TrueType Font: Download as SoftFont TrueType Font Download Option: Outline Then the virtual printer would accept font variation instances, convert them, and embedded into PDF file, this can be done as another workarounds.
If HarfBuzz implement this feature it's possible to fix this bug. https://github.com/harfbuzz/harfbuzz/issues/1558
(In reply to Volga from comment #21) > If HarfBuzz implement this feature it's possible to fix this bug. > https://github.com/harfbuzz/harfbuzz/issues/1558 No, we don’t use HarfBuzz subsetter and it would require a considerable refactoring to be able to do so, and that PR does not support instantiating a variable font which is what we would need for PDF.
(In reply to Khaled Hosny from comment #22) > No, we don’t use HarfBuzz subsetter and it would require a considerable > refactoring to be able to do so, and that PR does not support instantiating > a variable font which is what we would need for PDF. Oh I made misunderstand, so it's clear that HarfBuzz doesn't do this conversion.
(In reply to V Stuart Foote from comment #7) > Seems more likely the printing and export to PDF would be reworked for > HB/FreeType and use of a skia back end rather than restamping as "static > glyphs" and sub-setted fonts. > > Lets let the devs decide... Skia is now integrated into LibreOffice.
I have noticed that Skia is now integrated as new graphics backend, so which API would be help to work with this?
I believe skia does not change much here: you are focusing on printing, PDF export or EPUB export, none of these are affected by the GL -> skia/vulkan change. Skia still renders the same text layout harfbuzz produces and still works with the Windows-specific APIs (directwrite, etc.) when it comes to the actual fonts. See these changes: https://gerrit.libreoffice.org/c/core/+/90582 https://gerrit.libreoffice.org/c/core/+/91968
*** Bug 146577 has been marked as a duplicate of this bug. ***