Question

I'm having an issue with an RDLC report printing empty characters when produced as a PDF. It only affects font ligatures which I understand to be letter combinations such as:

  • ti
  • ft
  • fi
  • tt

My research shows these character combinations are combined into a single glyph, which I see as an empty space when printed out. Example clippings:

On PDF:

enter image description here

enter image description here

Printed:

enter image description here

enter image description here

Therefore the symptoms are:

  • The PDF appears fine on the screen
  • When printed (physically or using the XPS writer) all ligatures appear as a blank space

So far I have narrowed it down to a particular font (Calibri) and a particular server (Windows Server 2003 R2). The PDF has the font embedded:

enter image description here

I order to resolve this I'd be happy with:

  • Prevent LocalReport.Render from combining ligatures
  • Enable Server 2003 to treat the font as my Windows 7 machine is

I'm not sure how / where I would begin in comparing the font environments, therefore ideas and pointers are much appreciated.

UPDATE:

Thanks to the answers below I have checked the charmaps on both machines but they look identical:

Server (where issue lies):

enter image description here

Local (no issue):

enter image description here

This also reminded me that I installed the font by copying over the font files and installing them directly. Both versions are 5.72, Digitally Signed, TrueType Outlines, however the server displays OpenType Font whereas local displays OpenType Layout (could just be different operating system display).

An interesting point is if I use Calibri Regular 48 locally I see the ligature:

enter image description here

whereas the server doesn't use it:

enter image description here

In addition both PDFs are PRINTED on the same machine, but it's only the PDF generated on the server that exhibits the issue, therefore I think printer drivers cannot be the issue?

No correct solution

OTHER TIPS

Can you do a search and replace and break the ligatures by inserting between the characters a word joiner character (U+2060) or on older systems, with a zero width no break space (U+FEFF)? This should force it not to use ligatures.

In general, PDFs generated by ReportViewer and even from Reporting Services won't embed fonts:

The PDF rendering extension does not embed fonts. Fonts that are used in the report must be installed on the report server and on the client computers used to view the report.

Thus I would:

  1. Check that the Calibrì font version in the 2003 server is the same present in the client (browse to %windir%\fonts in the two machines, click Calibrì, right-click each ttf file, select Properties and look for File version in the Details tab).
  2. Fix differences: delete the older version from the 2003 server and import the new ttf that you find in the windows 7 one, all using the tool provided by the os (see the picture below) tool provided by the os
  3. Try your process again: if you get what you need, you have done.
  4. If you actually need to distribute the produced reports to clients that could have the same issue, you have to install GhostScript and to post-process your pdfs with something like the following (that will produce a PDF/A output file)
gs -dPDFA -dBATCH -dNOPAUSE -dUseCIEColor -dHaveTransparency=false -sProcessColorModel=DeviceCMYK -sDEVICE=pdfwrite -sPDFACompatibilityPolicy=1 -sOutputFile=output_filename.pdf input_filename.pdf

A few side notes:

  • in the past I had similar issues with custom fonts that disappear after rebooting the server, thus after step 2 try to reboot the server before proceeding
  • GhostScript is a venerable free software, double-licensed under Affero GNU/General Public Licence (suitable only for open source projects using the same license) and under the Artifex Commercial License for everybody else. Here you can find details.
  • In the past I've been asked to try a lot of cheaper alternatives to GhostScript, and believe me: there's no cheaper alternative that works.

There is a solution, if you have access to the font definition (in the code).

xaml: FontFamily="Calibri" Typography.StandardLigatures="False"

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top