Вступ
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() і у GitHub-сумісний Markdown за допомогою 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) — єдина вимога до середовища виконання, і у пакета немає інших сторонніх залежностей.