מבוא
כל יכולת ב-Aspose.PDF FOSS עבור TypeScript מושגת דרך שתי מחלקות: Document ו-Page. Document מחזיקה באוסף הדפים ובכל מה שמתמקד במסמך — מטא-נתונים, סימניות, תוויות דף, ושמירה/טעינה — בעוד שכל Page ב-doc.Pages מחזיקה בכל מה שמתמקד בדף הזה בלבד: תוכן, הערות, ושדות טופס. לאחר שהמחלקות האלה מוכרות, שאר פני הספרייה — המרה, הערות, טפסים, אבטחה — הם בעצם עוד שיטות על אותם שני האובייקטים.
פוסט זה הוא מבט מעמיק יותר על החלקים של פני הליבה שהפוסט המבוא מזכיר רק בקיצור: הרכבת מסמכים ממסמכים אחרים, בניית דפים מאפס, הוספת עץ סימניות לניווט, ותיוג תוכן לנגישות. כל הארבעה הם קריאות שיטה פשוטות — ללא מודול נפרד לייבוא, ללא תלות נוספת מעבר לחבילת @asposefoss/pdf עצמה.
אלו הן הפעולות שמופיעות ברגע שמערכת ה-PDF עוברת את שלב „פתיחת קובץ אחד, שינויו, שמירתו“: שילוב דוחות ממקורות שונים למסמך אחד, יצירת דפים בתכנות במקום להתחיל מתבנית, והפיכת הפלט לניתן ניווט ונגיש במקום להיות רק חזותי נכון.
מה נכלל
הרכבה וארגון מחדש של מסמכים
Document.Split() מחלק מסמך לעמוד Document חדש בעל עמוד יחיד לכל עמוד, לפי סדר העמודים. Document.ExtractPages() מעתיקה קבוצת מספרי עמודים שמתחילים מ-1 לתוך Document חדש עצמאי, לפי הסדר שניתן — ניתן לחזור על אותו עמוד. ניתן גם להעתיק עמודים ממסמך אחד לאחר: Document.Append() מעתיקה כל עמוד של מסמך מקור אל סוף היעד, ו-Document.InsertPage() מעתיקה עמוד יחיד בין מסמכים במיקום ספציפי שמתחיל מ-1.
import { Document } from '@asposefoss/pdf';
const report = Document.OpenFile('report.pdf');
const parts = report.Split(); // one Document per page
const chapter = report.ExtractPages([3, 4, 5]); // subset (1-based, repeats allowed) as a new Document
const cover = Document.OpenFile('cover.pdf');
report.InsertPage(1, cover.Pages[0]); // copy a single page across documents
report.Append(chapter); // copy chapter's pages onto report
report.WriteTo('assembled.pdf');
ניתן גם לשלב כמה מסמכים למסמך אחד בקריאה אחת עם Document.Merge(), אשר בונה Document חדש מהעתקים של כל דף של כל מסמך שמועבר אליו, לפי סדר.
בניית דפים מאפס
Document.New() יוצר מסמך מאפס: אפס דפים כאשר פורמט מושמט, או דף ריק אחד של ה-PageFormat הנתון כאשר מועבר אחד. דפים ריקים נוספים מגיעים מ-Document.AddPage(), שמקבל גם PageFormat (או Page קיים כדי להעתיק את הגודל שלו). טקסט מצויר על דף באמצעות Page.AddText(), ממוקם בנקודה (x, y) במרחב המשתמש של PDF.
import { Document, PageFormat } from '@asposefoss/pdf';
const doc = Document.New(PageFormat.A4); // one blank A4 page
doc.Pages[0].AddText('Hello', 72, 720, { fontSize: 14 });
doc.AddPage(PageFormat.A4.landscape()); // append more as you go
doc.WriteTo('scratch.pdf');
סימניות וניווט במסמך
מתאר המסמך (לוח הסימניות שרוב קוראי ה-PDF מציגים לצד הדף) נקרא עם Document.GetOutlines() ומוחלף באופן מלא ב-Document.SetOutlines(), שכל אחד עובד עם עץ של ערכי OutlineItem. כל OutlineItem נושא Title, יעד Dest, ובאופן אופציונלי Children לכניסות מקוננות, בנוסף לרמזי תצוגה כגון Open (מותח באופן ברירת מחדל) ו-Bold.
import { Document, OutlineItem } from '@asposefoss/pdf';
const items: OutlineItem[] = [
{ Title: 'Introduction', Dest: { name: 'intro' } },
{
Title: 'Chapters',
Open: true,
Children: [
{ Title: 'Chapter 1', Dest: { name: 'ch1' } },
{ Title: 'Chapter 2', Dest: { name: 'ch2' } },
],
},
];
doc.SetOutlines(items);
יעדים שנקראים כך ({ name: 'intro' }) נפתרים דרך טבלת היעדים השמורים של המסמך, אשר Document.GetNamedDestinations() ו-Document.SetNamedDestination() מנהלים ישירות כאשר סימנייה צריכה להפנות ליעד שאינו קשור לתוכן הדף.
טקסט מובנה ותיוג נגישות
Document.GetStructTree() מחזיר את עץ המבנה הלוגי של המסמך (או null כאשר המסמך אינו מתוייג), ו-Document.CreateStructTree() בונה אחד, מסמן את המסמך כמתוייג. ברגע שעץ המבנה קיים, Page.GetStructuredText() מחזיר את הטקסט של הדף כערכי TextBlock — קטעים ממוקמים שכבר מקובצים לשורות ולחסימות דמויות פסקאות — שזה הקלט שממנו עוברת שלב תיוג ידני: הליכה לאורך החסימות, קביעת אילו מהן כותרות לעומת טקסט גוף, והוספת האלמנטים המתאימים לעץ.
function handTagPage(doc: Document, page: Page, heading: string): void {
const root = doc.GetStructTree();
if (!root) throw new Error('handTagPage: the document is not tagged yet');
for (const block of page.GetStructuredText()) {
const text = block.text.trim();
if (text.length === 0) continue;
const el = root.Append(text.startsWith(heading) ? 'H2' : 'P');
el.MarkContent(page, block.quad);
}
}
עץ מבנה מתויג הוא הבסיס שעליו מתבססים תכונות במטה: ייצוא HTML סמנטי מתחדש ממנו במקום לחזור לפריסה היוריסטית הפשוטה, ו-Document.ValidatePdfUa() בודק את המסמך נגד תת-קבוצה של תקן הנגישות PDF/UA שתלויה בנוכחות התיוג.
התחלה מהירה
התקן את החבילה, לאחר מכן פתח מסמך, שלוף ושלב מחדש תת-קבוצה של העמודים שלו, ושמור את התוצאה:
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';
const doc = Document.OpenFile('report.pdf');
const chapter = doc.ExtractPages([3, 4, 5]); // subset (1-based, repeats allowed) as a new Document
const cover = Document.OpenFile('cover.pdf');
doc.InsertPage(1, cover.Pages[0]); // copy a single page across documents
doc.Append(chapter); // copy chapter's pages onto doc
doc.WriteTo('assembled.pdf');
פורמטים נתמכים
| פורמט | סיומת | קריאה | כתיבה |
|---|---|---|---|
| ✓ | ✓ | ||
| 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) הוא דרישת זמן הריצה היחידה, ואין לחבילה תלויות צד שלישי אחרות.