Введение

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 build
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]);

// 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

Поддерживаемые форматы

ФорматРасширениеЧтениеЗапись
PDFpdf✓✓
Markdownmd✓✓
SVGsvg✓✓
TIFFtiff✓✓
DOCXdocx—✓
HTMLhtml—✓
PNGpng—✓
EPUBepub—✓

Открытый исходный код и лицензирование

Aspose.PDF FOSS для TypeScript выпущен под лицензией MIT, исходный код опубликован на GitHub. Нет водяного знака оценки, ограничения по использованию или отдельного лицензионного файла для управления, и библиотеку можно использовать в коммерческих продуктах без роялти.

В данный момент пакет имеет версию 0.1.0, что отражает активную раннюю разработку. Node.js (>=22) — единственное требование к среде выполнения, и у пакета нет других сторонних зависимостей.


Начало работы

Связанные ресурсы