mirror of
https://github.com/foliojs/pdfkit.git
synced 2025-12-08 20:15:54 +00:00
This makes the resulting PDF files smaller. It's cumbersome to filter out all commands that could result in identity transforms in code that's using PDFKit, so it makes sense to have the check in the transform() function.
190 lines
4.1 KiB
JavaScript
190 lines
4.1 KiB
JavaScript
import PDFDocument from '../../lib/document';
|
|
import { logData } from './helpers';
|
|
|
|
describe('Vector Graphics', () => {
|
|
let document;
|
|
|
|
beforeEach(() => {
|
|
document = new PDFDocument({
|
|
info: { CreationDate: new Date(Date.UTC(2018, 1, 1)) },
|
|
compress: false
|
|
});
|
|
});
|
|
|
|
describe('dash', () => {
|
|
test('with numeric length argument', () => {
|
|
const docData = logData(document);
|
|
const vectorStream = Buffer.from(
|
|
'1 0 0 -1 0 792 cm\n50 20 m\n[2 2] 0 d\nS\n',
|
|
'binary'
|
|
);
|
|
|
|
document
|
|
.moveTo(50, 20)
|
|
.dash(2)
|
|
.stroke();
|
|
document.end();
|
|
|
|
expect(docData).toContainChunk([
|
|
`5 0 obj`,
|
|
`<<
|
|
/Length 38
|
|
>>`,
|
|
`stream`,
|
|
vectorStream,
|
|
`\nendstream`,
|
|
`endobj`
|
|
]);
|
|
});
|
|
|
|
test('with array length argument', () => {
|
|
const docData = logData(document);
|
|
const vectorStream = Buffer.from(
|
|
'1 0 0 -1 0 792 cm\n50 20 m\n[1 2] 0 d\nS\n',
|
|
'binary'
|
|
);
|
|
|
|
document
|
|
.moveTo(50, 20)
|
|
.dash([1, 2])
|
|
.stroke();
|
|
document.end();
|
|
|
|
expect(docData).toContainChunk([
|
|
`5 0 obj`,
|
|
`<<
|
|
/Length 38
|
|
>>`,
|
|
`stream`,
|
|
vectorStream,
|
|
`\nendstream`,
|
|
`endobj`
|
|
]);
|
|
});
|
|
|
|
test('with space option', () => {
|
|
const docData = logData(document);
|
|
const vectorStream = Buffer.from(
|
|
'1 0 0 -1 0 792 cm\n50 20 m\n[2 10] 0 d\nS\n',
|
|
'binary'
|
|
);
|
|
|
|
document
|
|
.moveTo(50, 20)
|
|
.dash(2, { space: 10 })
|
|
.stroke();
|
|
document.end();
|
|
|
|
expect(docData).toContainChunk([
|
|
`5 0 obj`,
|
|
`<<
|
|
/Length 39
|
|
>>`,
|
|
`stream`,
|
|
vectorStream,
|
|
`\nendstream`,
|
|
`endobj`
|
|
]);
|
|
});
|
|
|
|
test('with phase option', () => {
|
|
const docData = logData(document);
|
|
const vectorStream = Buffer.from(
|
|
'1 0 0 -1 0 792 cm\n50 20 m\n[2 2] 8 d\nS\n',
|
|
'binary'
|
|
);
|
|
|
|
document
|
|
.moveTo(50, 20)
|
|
.dash(2, { phase: 8 })
|
|
.stroke();
|
|
document.end();
|
|
|
|
expect(docData).toContainChunk([
|
|
`5 0 obj`,
|
|
`<<
|
|
/Length 38
|
|
>>`,
|
|
`stream`,
|
|
vectorStream,
|
|
`\nendstream`,
|
|
`endobj`
|
|
]);
|
|
});
|
|
|
|
describe('validation', () => {
|
|
test('length 1', () => {
|
|
const doc = new PDFDocument();
|
|
|
|
expect(() => doc.dash(1)).not.toThrow();
|
|
});
|
|
|
|
test('length 1.5', () => {
|
|
const doc = new PDFDocument();
|
|
|
|
expect(() => doc.dash(1.5)).not.toThrow();
|
|
});
|
|
|
|
test('length 0 throws', () => {
|
|
const doc = new PDFDocument();
|
|
|
|
expect(() => doc.dash(0)).toThrow(
|
|
'dash(0, {}) invalid, lengths must be numeric and greater than zero'
|
|
);
|
|
});
|
|
|
|
test('length -1 throws', () => {
|
|
const doc = new PDFDocument();
|
|
|
|
expect(() => doc.dash(-1)).toThrow(
|
|
'dash(-1, {}) invalid, lengths must be numeric and greater than zero'
|
|
);
|
|
});
|
|
|
|
test('length null throws', () => {
|
|
const doc = new PDFDocument();
|
|
|
|
expect(() => doc.dash(null)).toThrow(
|
|
'dash(null, {}) invalid, lengths must be numeric and greater than zero'
|
|
);
|
|
});
|
|
|
|
test('length array', () => {
|
|
const doc = new PDFDocument();
|
|
|
|
expect(() => doc.dash([2, 3])).not.toThrow();
|
|
});
|
|
|
|
test('length array containing zeros throws', () => {
|
|
const doc = new PDFDocument();
|
|
|
|
expect(() => doc.dash([2, 0, 3])).toThrow(
|
|
'dash([2,0,3], {}) invalid, lengths must be numeric and greater than zero'
|
|
);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('translate', () => {
|
|
test('identity transform is ignored', () => {
|
|
const docData = logData(document);
|
|
const vectorStream = Buffer.from(`1 0 0 -1 0 792 cm\n1 0 0 1 0 0 cm\n`, 'binary');
|
|
|
|
document
|
|
.translate(0, 0);
|
|
document.end();
|
|
|
|
expect(docData).not.toContainChunk([
|
|
`5 0 obj`,
|
|
`<<
|
|
/Length 33
|
|
>>`,
|
|
`stream`,
|
|
vectorStream,
|
|
`\nendstream`,
|
|
`endobj`
|
|
]);
|
|
});
|
|
});
|
|
});
|