diegomura / diegomura/react-pdf

Custom font causes infinite pending of `toBlob`

Open
#2,743 3 comments 3 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
16.8k
Forks
1.3k
Avg merge
5h 6m
Merged PRs (30d)
52

Description

**Describe the bug**

Using custom font will cause an infinite pending of the `toBlob` method.

**To Reproduce**

I've reproduced this in both CRA and Vite project.

To reproduce it:
1. register and **use** some font (just registering will not trigger this)
2. invoke the `toBlob` method of the PDF instance

An example:
```tsx
import { pdf, Document, Page, Text, View, Font } from "@react-pdf/renderer";

export const run = async () => {
const dom = () => {
return (



Test
{/* Test */}



);
};

Font.register({
family: "SomeFont",
src: "/assets/Roboto-Regular.ttf",
});

pdf(dom())
.toBlob()
.then((blob) => {
console.log(blob);
})
.catch((err) => {
console.error(err);
});
};

```
P.S. once use the builtin `Helvetica` the blob could be properly generated.

I've dived into the root cause, and it seems **it's related to the `_fontFamily` property of the `PDFDocument`**

Custom font seems not to be properly added to the `_fontFamily`, thus related `PDFReference` will not be finalized on the document's ending. In `packages/pdfkit/src/mixins/fonts.js:64-66`, the `_font.name` is `null` for a custom font, so it would not be added to the `_fontFamilies` and will not be finalized in `packages/pdfkit/src/document.js:262-265`.

As for the `_font.name`, I found the initializing in `packages/pdfkit/src/font/embedded.js:21`, and the `postscriptName` seems to be initialized in the constructor of `FontSource`. While I tryed add a `postscriptName` to the option of register, an error was thrown:

```shell
Error: Variations require a font with the fvar, gvar and glyf, or CFF2 tables.
```

Any idea on it? Please let know if this is a misusage.

---

**Version Used**

- `renderer`: 3.4.4
- `fns`: 2.2.1
- `font`: 2.5.1
- `layout`: 3.12.1
- `pdfkit`: 3.1.10
- `primitives`: 3.1.1
- `render`: 3.4.4
- `stylesheet`: 4.2.5
- `textkit`: 4.4.1
- `types`: 2.5.0

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.