Πυρήνας API
Κύριο API
Αυτός ο οδηγός δείχνει πώς να ανοίγετε, να επεξεργάζεστε, να συναρμολογείτε και να αποθηκεύετε έγγραφα PDF με τις κλάσεις Document και Page — τα σημεία εισόδου για κάθε λειτουργία στο Aspose.PDF FOSS για TypeScript. Το Document φορτώνει, δημιουργεί, συναρμολογεί και αποθηκεύει ολόκληρα αρχεία PDF· το Page, που προσεγγίζεται μέσω του doc.Pages, εκθέτει λειτουργίες κειμένου, εικόνας, σημειώσεων και ροής περιεχομένου ανά σελίδα.
Κύκλος ζωής εγγράφου
Document.OpenFile() ανοίγει ένα PDF από διαδρομή αρχείου· Document.Open() δέχεται ένα Uint8Array στη μνήμη. Οι σελίδες μπορούν να ελεγχθούν και να επεξεργαστούν επί τόπου, και το Document.WriteTo() γράφει το αποτέλεσμα έξω — προαιρετικά με συμπίεση xref-stream και object-stream.
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
Διαίρεση, Συγχώνευση και Εξαγωγή Σελίδων
Document.Split() επιστρέφει ένα Document ανά σελίδα. Το Document.ExtractPages() παίρνει μια λίστα σελίδων που ξεκινά από 1 και επιτρέπει επαναλήψεις και επιστρέφει ένα νέο Document μόνο με αυτές τις σελίδες. Τα Document.Append() και Document.InsertPage() αντιγράφουν σελίδες μεταξύ εγγράφων, και το Document.Merge() συνδυάζει πολλά έγγραφα σε ένα.
const parts = doc.Split(); // one Document per page
const chapter = doc.ExtractPages([3, 4, 5]); // subset (1-based, repeats allowed) as a new Document
docA.Append(docB); // copy all of docB's pages onto docA
docA.InsertPage(1, docB.Pages[0]); // copy a single page across documents
Δημιουργία Νέου Εγγράφου
Document.New() ξεκινά ένα κενό έγγραφο σε ένα δεδομένο PageFormat. Page.AddText() τοποθετεί κείμενο σε θέση, και Document.AddPage() προσθέτει περαιτέρω σελίδες, συμπεριλαμβανομένης μιας περιστρεφόμενης μορφής όπως PageFormat.A4.landscape().
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');Υδατογραφήματα και Αριθμοί Σελίδων
Page.AddText() υποστηρίζει επίσης περιστροφή, χρώμα και διαφάνεια, κάτι που αρκεί για την απόδοση ενός αριθμού σελίδας και ενός διαγώνιου υδατογραφήματος χωρίς πρόσθετες κλάσεις.
const doc = Document.OpenFile('in.pdf');
const page = doc.Pages[0];
// Page number, right-aligned near the bottom-right corner.
const w = page.Rect[2] - page.Rect[0];
page.AddText(`Page ${page.Number}`, w - 40, 20, { fontSize: 10, align: 'right' });
// Semi-transparent diagonal watermark, centered on the page.
page.AddText('DRAFT', page.Rect[2] / 2, page.Rect[3] / 2, {
font: 'Times-Bold', fontSize: 64, color: [0.7, 0.7, 0.7], opacity: 0.4, rotate: 45, align: 'center',
});
doc.WriteTo('out.pdf');Ενδοσκόπηση Ροής Περιεχομένου
parseContentStream() αποκωδικοποιεί τη ακατέργαστη ροή /Contents μιας σελίδας σε μια λίστα ζευγών τελεστή/τελεστέου, και serializeContentStream() μετατρέπει μια επεξεργασμένη λίστα τελεστών πίσω σε bytes.
import { parseContentStream, serializeContentStream } from '@asposefoss/pdf';
const ops = parseContentStream(doc.Pages[0].Contents);
// ops: { operator: string, operands: PdfObject[], inlineImage?: {...} }[]
for (const op of ops) {
if (op.operator === 'Tj') console.log('text op:', op.operands);
}
const bytes = serializeContentStream(ops); // round-trips operators + operands
Ροή Κειμένου Πολλαπλών Στηλών
Page.AddTextBlock() ρέει μια μακριά αλφαριθμητική αλυσίδα κειμένου σε μια ορθογώνια περιοχή και επιστρέφει τυχόν κείμενο που δεν χωράει, το οποίο μπορεί να δοθεί σε μια δεύτερη κλήση για να συνεχιστεί η ροή σε άλλη στήλη.
const rest = page.AddTextBlock(longText, [72, 600, 200, 150], {
font: 'Times-Roman', fontSize: 11, align: 'justify', valign: 'top', leading: 14,
});
if (rest) page.AddTextBlock(rest, [300, 600, 200, 150]); // continue into a 2nd column
Συμβουλές και Καλύτερες Πρακτικές
- Χρησιμοποιήστε το
Document.OpenFile()για διαδρομές αρχείων και τοDocument.Open()για δεδομέναUint8Arrayστη μνήμη. - Οι αριθμοί σελίδων που περνούν σε μεθόδους όπως το
RemovePage()και τοExtractPages()είναι 1-βάση, ενώ τοdoc.Pagesείναι πίνακας 0-βάσης. - Περάστε το
{ compressed: true }στοDocument.WriteTo()για να ενεργοποιήσετε τη συμπίεση xref-stream και object-stream στην έξοδο. - Το
Document.ExtractPages()δέχεται επαναλαμβανόμενους αριθμούς σελίδων, ώστε η ίδια πηγή σελίδας να μπορεί να εμφανίζεται περισσότερες από μία φορές στο αποτέλεσμα. - Διαβάστε το
page.Rectγια να υπολογίσετε τις θέσεις σε σχέση με το πραγματικό πλάτος και ύψος της σελίδας αντί να κωδικοποιείτε σκληρά τις συντεταγμένες.
Συνηθισμένα Προβλήματα
| Πρόβλημα | Αιτία | Διόρθωση |
|---|---|---|
Document.Open() / OpenFile() προκαλεί InvalidPasswordError | Το PDF είναι προστατευμένο με κωδικό πρόσβασης και δεν δόθηκε κωδικός (ή δόθηκε λανθασμένος) | Περάστε { password: '...' } στο Document.OpenFile() / Document.Open() |
RemovePage() αφαιρεί τη λανθασμένη σελίδα | Οι αριθμοί σελίδας που περνιούνται στο RemovePage() είναι 1-βάση, όχι 0-βάση | Δώστε έναν αριθμό σελίδας που ξεκινά από 1, διαφορετικό από την αρίθμηση πινάκων doc.Pages |
Η έξοδος WriteTo() είναι μεγαλύτερη από το αναμενόμενο | Η προεπιλεγμένη αποθήκευση δεν χρησιμοποιεί συμπίεση xref/object-stream | Περάστε το { compressed: true } στο Document.WriteTo() |
FAQ
Το Document.Open() δέχεται τόσο διαδρομές αρχείων όσο και δεδομένα στη μνήμη;
Document.OpenFile() ανοίγει από διαδρομή αρχείου; Document.Open() δέχεται ένα Uint8Array από bytes στη μνήμη.
Η αρίθμηση των σελίδων είναι 0-βάση ή 1-βάση;
Και τα δύο, ανάλογα με το API: το doc.Pages είναι ένας απλός πίνακας 0-βάσης, αλλά μέθοδοι όπως τα RemovePage() και ExtractPages() παίρνουν αριθμούς σελίδων 1-βάσης.
Μπορώ να κρυπτογραφήσω ένα έγγραφο κατά την αποθήκευσή του;
Ναι — περάστε μια επιλογή encrypt στο WriteTo() / Save() με algorithm: 'aes256' | 'aes128' | 'rc4' και προαιρετικούς κωδικούς χρήστη/ιδιοκτήτη.
Πώς μπορώ να μειώσω το μέγεθος του αρχείου εξόδου;
Περάστε το { compressed: true } στο Document.WriteTo() για να ενεργοποιήσετε τη συμπίεση xref-stream και object-stream.
Μπορώ να εξετάσω τους ακατέργαστους χειριστές ροής περιεχομένου μιας σελίδας;
Ναι — parseContentStream(doc.Pages[0].Contents) επιστρέφει τη λίστα των τελεστών, και serializeContentStream() μετατρέπει μια επεξεργασμένη λίστα ξανά σε bytes.
API Reference Περίληψη
| Κλάση / Μέθοδος | Περιγραφή |
|---|---|
Document | Κεντρικό σημείο εισόδου για τη δημιουργία, τη φόρτωση και την αποθήκευση εγγράφων PDF |
Document.OpenFile() / Document.Open() | Φορτώστε ένα PDF από διαδρομή αρχείου ή από bytes στη μνήμη |
Document.New() | Ξεκινήστε ένα κενό έγγραφο με δεδομένο PageFormat |
Document.WriteTo() / Document.Save() | Γράψτε το έγγραφο σε διαδρομή αρχείου ή επιστρέψτε bytes |
Document.Split() / Document.Merge() / Document.ExtractPages() | Διαχωρίστε, συγχωνεύστε και εξάγετε σελίδες μεταξύ εγγράφων |
Document.Append() / Document.InsertPage() | Αντιγράψτε σελίδες από ένα έγγραφο σε άλλο |
Page | Μία μόνο σελίδα PDF· εκθέτει τις μεθόδους text, image, annotation και content-stream |
Page.AddText() / Page.AddTextBlock() | Προσθέστε κείμενο με τοποθέτηση ή ροή σε μια σελίδα |
parseContentStream() / serializeContentStream() | Αναλύστε και επανα-σειριακοποιήστε τους ακατέργαστους τελεστές content-stream μιας σελίδας |