Skip to content

Commit

Permalink
feat(fonts): make name/object null (#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
itsachen committed Jul 13, 2018
1 parent e0aca0b commit 1912e6f
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 8 deletions.
21 changes: 16 additions & 5 deletions src/pdffonts.cc
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,9 @@ class FontsWorker : public Nan::AsyncWorker {
const Ref fontRef = font->getRef();

v8::Local<v8::Object> fontObj = Nan::New<v8::Object>();
v8::Local<v8::Object> objectObj = Nan::New<v8::Object>();

if (font->getName() == NULL) {
fontObj->Set(Nan::New("name").ToLocalChecked(), Nan::EmptyString());
fontObj->Set(Nan::New("name").ToLocalChecked(), Nan::Null());
} else {
fontObj->Set(Nan::New("name").ToLocalChecked(), Nan::New(font->getName()->getCString()).ToLocalChecked());
}
Expand All @@ -81,9 +80,21 @@ class FontsWorker : public Nan::AsyncWorker {
fontObj->Set(Nan::New("subset").ToLocalChecked(), Nan::New(font->getSubset()));
fontObj->Set(Nan::New("unicode").ToLocalChecked(), Nan::New(font->getToUnicode()));

objectObj->Set(Nan::New("number").ToLocalChecked(), Nan::New(fontRef.num));
objectObj->Set(Nan::New("generation").ToLocalChecked(), Nan::New(fontRef.gen));
fontObj->Set(Nan::New("object").ToLocalChecked(), objectObj);
// Invalid object generation number should set object metadata to null
// Logic taken from pdffonts.cc
// See: https://cgit.freedesktop.org/poppler/poppler/tree/utils/pdffonts.cc?id=eb1291f86260124071e12226294631ce685eaad6#n207
if (fontRef.gen >= 100000) {
fontObj->Set(Nan::New("object").ToLocalChecked(), Nan::Null());
} else {
// PDF object reference metadata
// For context see: http://www.printmyfolders.com/understanding-pdf
v8::Local<v8::Object> objectObj = Nan::New<v8::Object>();

objectObj->Set(Nan::New("number").ToLocalChecked(), Nan::New(fontRef.num));
objectObj->Set(Nan::New("generation").ToLocalChecked(), Nan::New(fontRef.gen));

fontObj->Set(Nan::New("object").ToLocalChecked(), objectObj);
}

fontArray->Set(i, fontObj);
delete font;
Expand Down
Binary file added test/assets/invalid-object-id.pdf
Binary file not shown.
14 changes: 11 additions & 3 deletions test/pdffonts.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,11 @@ const Path = require('path');
const PDFFonts = require('../lib/pdffonts');

const EMBEDDED_FONTS_PATH = Path.resolve(__dirname, 'assets/embedded-fonts.pdf');
const NONEMBEDDED_FONTS_PATH = Path.resolve(__dirname, 'assets/nonembedded-fonts.pdf');
const INVALID_OBJECT_ID_PATH = Path.resolve(__dirname, 'assets/invalid-object-id.pdf');
const NO_FONTS_PATH = Path.resolve(__dirname, 'assets/no-fonts.pdf');
const NONEXISTENT_PATH = Path.resolve(__dirname, 'assets/nonexistent.pdf');
const NON_PDF_PATH = Path.resolve(__dirname, 'assets/non-pdf.png');
const NONEMBEDDED_FONTS_PATH = Path.resolve(__dirname, 'assets/nonembedded-fonts.pdf');
const NONEXISTENT_PATH = Path.resolve(__dirname, 'assets/nonexistent.pdf');
const TYPE_3_FONT_PATH = Path.resolve(__dirname, 'assets/type-3-font.pdf');

describe('pdffonts', () => {
Expand Down Expand Up @@ -53,7 +54,7 @@ describe('pdffonts', () => {
return PDFFonts.fonts(TYPE_3_FONT_PATH)
.then((fonts) => {
expect(fonts).to.eql([{
name: '',
name: null,
type: 'Type 3',
encoding: 'Custom',
embedded: true,
Expand All @@ -67,6 +68,13 @@ describe('pdffonts', () => {
});
});

it('handles fonts with invalid object ID', () => {
return PDFFonts.fonts(INVALID_OBJECT_ID_PATH)
.then(([font]) => {
expect(font.object).to.be.null;
});
});

it('throws an error if a file name is not passed in', () => {
return PDFFonts.fonts()
.catch((err) => err)
Expand Down

0 comments on commit 1912e6f

Please sign in to comment.