Πυρήνας 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 μιας σελίδας

Δείτε επίσης

 Ελληνικά