Введение
Aspose.PDF FOSS for TypeScript — это новая библиотека с открытым исходным кодом для работы с PDF-документами из кода Node.js. Она выпускается под лицензией MIT и поставляется в виде пакета @asposefoss/pdf, требующего только Node.js (>=22) во время выполнения — других зависимостей во время выполнения нет.
Библиотека построена вокруг классов Document и Page. Document.OpenFile() и Document.Open() загружают PDF с диска или из байтов в памяти, а Document.New() создаёт пустой документ; каждая страница в doc.Pages предоставляет методы для добавления текста, изображений, аннотаций и полей AcroForm, а также для преобразования в другие форматы. Далее, API охватывает разбиение, объединение и переупорядочивание страниц, преобразование документов в HTML, Markdown, DOCX, SVG и растровые изображения, добавление и уплощение аннотаций, создание интерактивных форм, а также шифрование, подпись или замазывание результата.
Этот релиз предназначен для разработчиков, которым требуется обработка PDF внутри кодовой базы Node.js или TypeScript без коммерческой лицензии: конвейеры сборки документов, инструменты публикации, преобразующие PDF в веб-готовые форматы, автоматизация заполнения форм и сервисы, которым необходимо замазывать или шифровать конфиденциальные PDF перед распространением. На данный момент проект находится на версии 0.1.0 и активно разрабатывается на ранней стадии, поэтому API и набор функций могут измениться до выхода стабильной версии.
Что входит
Управление документами и страницами
Document.OpenFile() / Document.Open() загружают PDF с диска или из Uint8Array в памяти; Document.New() создаёт пустой документ. Страницы можно разделить на отдельные документы с помощью Document.Split(), извлечь с помощью Document.ExtractPages(), объединить с помощью Document.Merge() или добавить к существующему документу с помощью Document.Append(). Document.WriteTo() записывает результат обратно, при желании сжатым.
import { Document } from '@asposefoss/pdf';
// Open from disk (or Document.Open(uint8array) for in-memory data)
const doc = Document.OpenFile('input.pdf');
// Inspect and edit pages
const pages = doc.Pages;
console.log(pages.length);
pages[0].Rotate = 90;
doc.RemovePage(2); // 1-based page number
doc.Reorder([3, 1, 2]);
// Save
doc.WriteTo('output.pdf'); // or: const bytes = doc.Save();
Преобразование формата
Полные документы рендерятся в HTML с помощью Document.ToHtml() и в Markdown в стиле GitHub с использованием Document.ToMarkdown(). Отдельные страницы рендерятся в отдельный SVG с помощью Page.ToSvg() или в растровые PNG-байты с помощью Page.ToImage(). Document.ToDocx() / Page.ToDocx() производят вывод .docx с перетеканием текста или фиксированным макетом.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
const png = doc.Pages[0].ToImage({ scale: 2 }); // Uint8Array of PNG bytes @144 DPI
const html = doc.ToHtml(); // standalone semantic HTML, all pages
const md = doc.ToMarkdown(); // GFM Markdown, all pages
const docx = doc.ToDocx(); // .docx bytes, reflowed, images in the package
Аннотации
Каждый Page напрямую предоставляет методы аннотации: Page.AddHighlight(), Page.AddUnderline(), Page.AddSquiggly() и Page.AddStrikeOut() добавляют разметку текста; Page.AddTextNote(), Page.AddFreeText() и Page.AddStamp() добавляют стикеры, отдельный текст и аннотации-штампы. Типизированные подтипы, такие как MarkupAnnotation и StampAnnotation, предоставляют метод Flatten() для встраивания аннотации в содержимое страницы.
AcroForms
Класс Form напрямую создает интерактивные поля: каждый из AddTextField(), AddCheckbox(), AddRadioGroup(), AddComboBox(), AddListBox() и AddPushButton() возвращает типизированный подкласс Field. Вызов SetStyle() или GenerateAppearance() для поля обновляет его визуальное отображение, а Document.FlattenForm() встраивает текущие значения всех полей в статическое содержимое страницы.
function addFormFields(doc: Document, page: Page): void {
const form = doc.Form;
const pageNum = page.Number;
// Text field
form.AddTextField({
page: pageNum, rect: [200, 670, 450, 690], name: 'FullName', value: 'Alice Sample',
});
// Checkbox
form.AddCheckbox({
page: pageNum, rect: [200, 630, 218, 648], name: 'Subscribe',
checked: true,
});
}
Безопасность и редактирование
Document.WriteTo() принимает параметр encrypt, поддерживающий AES-128, AES-256 или RC4, с отдельными паролями пользователя и владельца и детализированным Permissions. Чувствительные области или найденный текст могут быть окончательно удалены с помощью Document.Redact(), Document.RedactText() и Page.ApplyRedactions(), настраиваемых через RedactOptions.
import { Document } from '@asposefoss/pdf';
const doc = Document.OpenFile('in.pdf');
doc.WriteTo('locked.pdf', {
encrypt: {
userPassword: 'open-me', // required to open (default '')
ownerPassword: 'full-rights', // default: same as userPassword
algorithm: 'aes256', // 'aes256' (default) | 'aes128' | 'rc4'
permissions: { copying: false, modifying: false },
encryptMetadata: true,
},
});
Быстрый старт
Установите пакет, затем откройте существующий PDF, отредактируйте его страницы и метаданные и сохраните результат:
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildimport { Document } from '@asposefoss/pdf';
// Open from disk (or Document.Open(uint8array) for in-memory data)
const doc = Document.OpenFile('input.pdf');
// Inspect and edit pages
const pages = doc.Pages;
console.log(pages.length);
pages[0].Rotate = 90;
doc.RemovePage(2); // 1-based page number
doc.Reorder([3, 1, 2]);
// Metadata
doc.SetMetadata({ title: 'Report', author: 'Jane', custom: { Dept: 'R&D' } });
// Save
doc.WriteTo('output.pdf'); // or: const bytes = doc.Save();
doc.WriteTo('small.pdf', { compressed: true }); // xref stream + object streams
Поддерживаемые форматы
| Формат | Расширение | Чтение | Запись |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Открытый исходный код и лицензирование
Aspose.PDF FOSS для TypeScript выпущен под лицензией MIT, исходный код опубликован на GitHub. Нет водяного знака оценки, ограничения по использованию или отдельного лицензионного файла для управления, и библиотеку можно использовать в коммерческих продуктах без роялти.
В данный момент пакет имеет версию 0.1.0, что отражает активную раннюю разработку. Node.js (>=22) — единственное требование к среде выполнения, и у пакета нет других сторонних зависимостей.