Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Text not rendering when deployed to vercel #2499

Closed
vixalien opened this issue Dec 27, 2020 · 19 comments
Closed

Text not rendering when deployed to vercel #2499

vixalien opened this issue Dec 27, 2020 · 19 comments
Labels

Comments

@vixalien
Copy link

Using latest version

Yes, probably (installed it like a week ago)

Steps to reproduce

Create any nextJS app that renders an SVG into PNG with sharp.js then deploy it to vercel

What is the expected behaviour?

The svg will render correctly

Code sample

Sorry but the code is in JSX

Component

import { useState, useMemo, useEffect } from 'react';

import variables from "lib/variables";

let VerticalText = ({ fill="#fff", fontWeight = 200, x, text, ...style }) => {
  return (
    <svg x={x} y="50%" style={{overflow: "visible"}}>
      <text fill={fill} fontWeight={fontWeight} textAnchor="middle" dominantBaseline="central"
        transform="rotate(90)" style={{...style, fontWeight}}>{text}</text>
    </svg>)
}

let SVG = ({ reservation, code, ...props }) => {
  code = code.replace(`<svg `, `<svg x="60" y="155" width="120" height="120" `)
  return (
    <svg width={645} height={330} viewBox="0,0,645,330" xmlns="http://www.w3.org/2000/svg" {...props}>
      <rect x="2.5" y="2.5" width={640} height={325} style={{fill: 'black', strokeWidth: 5, stroke: 'white'}} />
      <path strokeDasharray="8,8" d="M530 5 l 0 320" style={{strokeWidth: 2, stroke: '#333'}} />
      <VerticalText  x="560" text={"No. " + reservation._id.padStart(7, "0")} fontWeight={700} fontSize="35px"/>
      <VerticalText  x="505" text={variables.app_name} fontWeight={500} fontSize="24px"/>
      <VerticalText  x="485" text={variables.url} fontWeight={300} fontSize="14px" fill="#8a8f98"/>
      <text x={60} y={80} fill="white" style={{fontSize: '40px', fontWeight: 700}}>{reservation.names}</text>
      <text x={60} y={110} fill="#8a8f98" style={{fontSize: '20px'}}>{reservation.email}</text>
      <text x={60} y={135} fill="#8a8f98" style={{fontSize: '20px'}}>{reservation.phone}</text>
      <g dangerouslySetInnerHTML={{__html: code}}/>
      <text x={200} y={175} fill="white" style={{fontSize: '24px'}}>{new Date(parseInt(reservation.date)).toLocaleDateString()}</text>
      <text x={200} y={205} fill="white" style={{fontSize: '24px'}}>{reservation.time}</text>
      <text x={200} y={265} fill="#8a8f98" style={{fontSize: '20px'}}>{reservation.noPeople} - {parseInt(reservation.noPeople) > 1 ? "People" : "Person"}</text>
      <style>{`
        @font-face {
          font-family: 'Inter';
          font-weight: 100 900;
          font-display: block;
          src: url('data:application/x-font-woff;charset=utf-8;base64,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')
            format('woff2');
        }
        text {
          font-family: 'Inter';
          font-weight: 600;
          letter-spacing: 0.2px;
          line-height: 1.64706;
        }
      `}</style>
    </svg>
  )
}

let Style = () => {
  let scale = 1;
  if (process.browser) {
    let [ tempScale, setScale ] = useState((window.innerWidth - 40)  / (330));

    addEventListener("resize", () => setScale((window.innerWidth - 40)  / (330)))
    scale = useMemo(() => tempScale > 0.5 ? tempScale : 0.5, [tempScale]);
  }
  return (
    <style>{`
      @media (max-width: 400px) and (min-width: 250px) {
        .wrapper-1 {
          display: table;
        }
        .wrapper-2 {
          padding: 50% 0;
          height: 0;
        }
        svg.svg {
          transform: rotate(90deg) scale(${scale}) translate(0, -100%);
          transform-origin: top left;
          margin-top: -50%;
        }
    `}</style>
  )

}

let Card = ({ reservation = {}, code , ...props }) => {
	return (
    <div className="wrapper-1">
      <div className="wrapper-2">
    		<SVG reservation={reservation} code={code} className="svg" {...props}/>
      </div>
    </div>
	);
};

export default Card;

export { SVG };

Note that I use a custom font loaded through font face in css

API

import qrcode from "qrcode";
import sharp from "sharp";
import { renderToString } from "react-dom/server";

import { SVG } from "components/card"

import { getReservation } from "utils/fn/db";

import variables from "lib/variables";

let btoa = (str) => Buffer.from(str).toString('base64');

export default async (req, res) => {
	let id = req.body.id || req.query.id;
	if (id) {
		let reservationPresent = true;
		let reservation = await getReservation(id).catch(() => (reservationPresent = false));
		if (reservationPresent) {
			let code = await qrcode.toString(variables.links.ticket+id, { type: "svg" });

			
			let svg = renderToString(<SVG reservation={reservation} code={code} />);

			// Generate high quality images
			svg = svg.replace(`width="645" height="330"`, `width="${645 * 3}" height="${330 * 3}"`);

			res.setHeader('Content-disposition', 'attachment; filename=ZIYA_Ticket_'+reservation._id+'.png');
			res.statusCode = 200;
			res.setHeader('Content-type', 'image/png');
			res.send(await sharp(Buffer.from(svg)).png());
			
		} else {
			res.statusCode = 404;
			res.json({ ok: false, error: "No reservation was found for this id" });
		}
	} else {
		res.statusCode = 400;
		res.json({ ok: false, error: "ID is not present" });
	}
};

Are you able to provide a sample image that helps explain the problem?

When rendered on my PC

20201224_192300

Text was blurred for privacy otherwise it rendered correctly

When rendered on vercel

ZIYA_Ticket_0 (2)

You can view the full source at Github and you can access the rendering api hosted here

I noted that this only happens on vercel, not on my local PC. so I suspect the problem is the linux container or whatever that vercel uses to host our apps.

You may clone my app and run it locally and check (If you need instructions tell me)

What is the output of running npx envinfo --binaries --system?

I can't access that right now

@lovell
Copy link
Owner

lovell commented Dec 27, 2020

I noted that this only happens on vercel, not on my local PC. so I suspect the problem is the linux container or whatever that vercel uses to host our apps.

What did Vercel say when you asked them?

Please see #1875 for a similar discussion involving the AWS Lambda runtime environment.

@lovell lovell added question and removed triage labels Dec 27, 2020
@vixalien
Copy link
Author

I am yet to ask them because I don't think the problem is related to the font as it is stored as a base64 string and not as a file.

@lovell
Copy link
Owner

lovell commented Feb 11, 2021

@vixalien Were you able to make any progress with this?

@vixalien
Copy link
Author

No, not yet.

Still produces an image with no text

@dmihal
Copy link

dmihal commented Apr 17, 2021

Here's what I did to solve this issue:

Create a folder inside the root of your Next app called fonts. Inside this folder create a file fonts.conf with the following contents:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <dir>/var/task/fonts/</dir>
  <cachedir>/tmp/fonts-cache/</cachedir>
  <config></config>
</fontconfig>

Also, copy the font you want to use into this folder (I used a TTF font, but others may work as well).

Next, inside any Next route that needs the font, add the following lines:

import path from 'path';

path.resolve(process.cwd(), 'fonts', 'fonts.conf');
path.resolve(process.cwd(), 'fonts', 'MyFontName.ttf');

These lines may look pointless, but they make Next bundle these files into the lambda.

Finally, in the Vercel settings, set the environment variable FONTCONFIG_PATH to /var/task/fonts

@vixalien
Copy link
Author

Oh thank you I will try this and share with you the results

vixalien added a commit to vixalien/ziya-ui that referenced this issue Apr 18, 2021
@vixalien
Copy link
Author

Hello again!

I tried the fix but unfortunately it doesn't work, at least for me.

@elrumordelaluz
Copy link
Contributor

elrumordelaluz commented Apr 26, 2021

Same issue here, adding simple <text> into an svg processed with sharp that when deployed on Vercel the fonts are missing. Also tried the @dmihal solution but nothing change.

@elrumordelaluz
Copy link
Contributor

Here is a small reproduction of this issue deployed on Vercel: https://vercel-sharp-svg-fonts.vercel.app/

In this reproduction I tried:

  • no declaring font-family into <text/> elements
  • declaring font-family as generic 'sans-serif'
  • declaring font-family from a font file included with the technique explained here and here, declaring @font-face in one svg only as a further test.

Maybe is the case to open an issue on the Vercel side.

Here is the repo of the reproduction: https://github.com/elrumordelaluz/vercel-test-sharp-svg-fonts

@vixalien
Copy link
Author

@elrumordelaluz I can approve the bug is still persistent.
@dmihal can you please provide more details about your fix as it did not seem to work?

It may very well be the time to open an issue on Vercel's side.

@elrumordelaluz
Copy link
Contributor

And now this example works!

Seems that including includeFiles into vercel.json config file do the trick, as suggested by Vercel support!

@vixalien can you try in your NextJS project, which includeFiles isn't supported yet, moving the endpoint from /pages/api/download-ticket.png into /api/download-ticket.png? (following the technique described by @dmihal but adding vercel.json)?

@elrumordelaluz
Copy link
Contributor

Can confirm that this also works in a nextjs project, just moving the /pages/api route into /api and running vercel dev instead of next dev.

@mtimofiiv
Copy link

mtimofiiv commented Jul 6, 2021

For anyone else having this issue with a Next.js app (and therefore working with a /pages/api directory), the only solution I found to work was the combination of these: #2499 (comment) + vercel/next.js#8251 (comment).

  1. Do the fonts directory thing including the fonts/fonts.conf file
  2. Add the FONTCONFIG_PATH config var
  3. Install the copy-webpack-plugin module
  4. Add to your next.config.js file
// next.config.js
module.exports = {
  target: 'serverless',
  webpack5: true,

  webpack: function (config, { dev, isServer }) {
    // Fixes npm packages that depend on `fs` module
    if (!isServer) config.resolve.fallback.fs = false

    // copy files you're interested in
    if (!dev) {
      config.plugins.push(
        new CopyPlugin({ patterns: [{ from: 'fonts', to: 'fonts' }] })
      )
    }

    return config
  }
}
  1. Alter the loading path in your serverless function
// In your severless function file
let basePath = process.cwd()
if (process.env.NODE_ENV === 'production') {
  basePath = path.join(process.cwd(), '.next/server/chunks')
}

path.resolve(basePath, 'fonts', 'fonts.conf')
path.resolve(basePath, 'fonts', 'myfont.ttf')
  1. Use @elrumordelaluz's @font-face method, which they used here: https://github.com/elrumordelaluz/vercel-test-sharp-svg-fonts/blob/main/api/with-font-file.js#L17

The font file did not actually need to be loaded (for example no need to fs.readFile()), but the path must be there and resolved.

@shrugs
Copy link

shrugs commented Sep 18, 2021

Chiming in for anyone still struggling to use fonts in a sharp svg within a next.js pages/api route as I was:

When using the copy plugin, the fonts.conf file ended up living at /var/task/.next/server/chunks/fonts/, which means I set the FONTCONFIG_PATH variable to /var/task/.next/server/chunks/fonts/. Note that relative paths in your svg (i.e. the font-face's src property) will be resolve relative to the dir property in fonts.conf, so instead of ./fonts/Helvetica.ttf, i needed ./Helvetica.ttf and have dir set to /var/task/.next/server/chunks/fonts/

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <dir>/var/task/.next/server/chunks/fonts/</dir>
  <cachedir>/tmp/fonts-cache/</cachedir>
  <config></config>
</fontconfig>

The target: "serverless" config option was not needed (afaik that's the default on vercel anyway).

The path.resolve lines for the font files also ended up being unnecessary, as the copy-files plugin ensures that they exist in the bundle already.

@mtimofiiv
Copy link

Lately, this has broken for me again, including the updated instructions @shrugs posted. It's possible it might be because I upgraded to Next.js 12.

@mtimofiiv
Copy link

I created a reproducible example repo here: https://github.com/mtimofiiv/vercel-fonts-demo

And it's deployed here: https://vercel-fonts-demo.vercel.app

Readme file in the repo has all the things I tried.

@lovell
Copy link
Owner

lovell commented Nov 23, 2021

I can't help with commercial vendor-specific runtimes, but the FC_DEBUG environment variable is probably your friend when debugging font file discovery. https://www.freedesktop.org/software/fontconfig/fontconfig-user.html#DEBUG

@charlyBerthet
Copy link

charlyBerthet commented Dec 7, 2021

Here's what I did to solve this issue:

Create a folder inside the root of your Next app called fonts. Inside this folder create a file fonts.conf with the following contents:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
  <dir>/var/task/fonts/</dir>
  <cachedir>/tmp/fonts-cache/</cachedir>
  <config></config>
</fontconfig>

Also, copy the font you want to use into this folder (I used a TTF font, but others may work as well).

Next, inside any Next route that needs the font, add the following lines:

import path from 'path';

path.resolve(process.cwd(), 'fonts', 'fonts.conf');
path.resolve(process.cwd(), 'fonts', 'MyFontName.ttf');

These lines may look pointless, but they make Next bundle these files into the lambda.

Finally, in the Vercel settings, set the environment variable FONTCONFIG_PATH to /var/task/fonts

@mtimofiiv I have also upgraded to next.js 12 and this fix worked for me.

irahopkinson added a commit to bethbapchurch/easter-journey that referenced this issue Mar 31, 2023
@Justbeingjustin
Copy link

To the folks that are still struggling.

Switch libraries to jimp and follow this answer:
vercel/next.js#64768

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

8 participants