Skip to content
This repository was archived by the owner on May 30, 2023. It is now read-only.
This repository was archived by the owner on May 30, 2023. It is now read-only.

font rendering on linux messes up letter spacing #14853

@Dirgecaller

Description

@Dirgecaller

First off, phantomjs is amazing. It has saved me so much time and has truly produced some great pdfs for my work. To all those that helped produce phantomjs...a huge thank you!

I include examples in the additional info below...mainly, note the letter spacing issues. at 16px, it's less noticeable...as you start to shrink the font though, it becomes more apparent.

Now, I did solve the problem by using an SVG version of OpenSans by converting the woff file from google thru onlinefontconverter.com (but then the text becomes unselectable in the pdf...not a huge deal to me but could be annoying to someone) I only submit this issue in the hopes that someday it gets fixed so that I can use normal font files.

  1. Which version of PhantomJS are you using? Tip: run phantomjs --version.
    2.1.1

  2. What steps will reproduce the problem?
    use a web font like Open Sans from google
    produce html output that uses the font at 16px and then another paragraph at a smaller font size.

  3. Which operating system are you using?
    centos 6.7

  4. Did you use binary PhantomJS or did you compile it from source?
    binary

  5. Please provide any additional information below.
    Here is a working sample to show the problem

http://chiaroscurosantafe.com/pdf/bugged-font.php
produces
http://chiaroscurosantafe.com/pdf/bugged-font.pdf

I used the following rasterize.js file

"use strict";
var page = require('webpage').create(),
    system = require('system'),
    address, output, size, pageWidth, pageHeight;

if (system.args.length < 3 || system.args.length > 5) {
    console.log('Usage: rasterize.js URL filename [paperwidth*paperheight|paperformat] [zoom]');
    console.log('  paper (pdf output) examples: "5in*7.5in", "10cm*20cm", "A4", "Letter"');
    console.log('  image (png/jpg output) examples: "1920px" entire page, window width 1920px');
    console.log('                                   "800px*600px" window, clipped to 800x600');
    phantom.exit(1);
} else {
    address = system.args[1];
    output = system.args[2];
    page.viewportSize = { width: 600, height: 600 };
    if (system.args.length > 3 && system.args[2].substr(-4) === ".pdf") {
        size = system.args[3].split('*');
        page.paperSize = size.length === 2 ? { width: size[0], height: size[1], margin: '0px' }
                                             : { format: system.args[3], orientation: 'portrait', margin: '0px' };
    } else if (system.args.length > 3 && system.args[3].substr(-2) === "px") {
        size = system.args[3].split('*');
        if (size.length === 2) {
            pageWidth = parseInt(size[0], 10);
            pageHeight = parseInt(size[1], 10);
            page.viewportSize = { width: pageWidth, height: pageHeight };
            page.clipRect = { top: 0, left: 0, width: pageWidth, height: pageHeight };
        } else {
            console.log("size:", system.args[3]);
            pageWidth = parseInt(system.args[3], 10);
            pageHeight = parseInt(pageWidth * 3/4, 10); // it's as good an assumption as any
            console.log ("pageHeight:",pageHeight);
            page.viewportSize = { width: pageWidth, height: pageHeight };
        }
    }
    if (system.args.length > 4) {
        page.zoomFactor = system.args[4];
    }
    page.open(address, function (status) {
        if (status !== 'success') {
            console.log('Unable to load the address!');
            phantom.exit(1);
        } else {
            window.setTimeout(function () {
                page.render(output);
                phantom.exit();
            }, 200);
        }
    });
}

and I used the following command line
phantomjs rasterize.js 'http://chiaroscurosantafe.com/pdf/bugged-font.php' bugged-font.pdf Letter 1.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions