Giriş
TypeScript için Aspose.PDF FOSS’daki her yetenek iki sınıf aracılığıyla elde edilir: Document ve Page. Document, sayfa koleksiyonunu ve belge kapsamındaki her şeyi — meta veriler, yer imleri, sayfa etiketleri ve kaydet/yükle — yönetirken, doc.Pages içindeki her Page, o tek sayfaya özgü her şeyi — içerik, açıklamalar ve form alanları — yönetir. Bu iki sınıf tanıdık hale geldiğinde, kütüphanenin geri kalan yüzeyi — dönüşüm, açıklamalar, formlar, güvenlik — gerçekte aynı iki nesne üzerindeki daha fazla yöntemden ibarettir.
Bu gönderi, giriş gönderisi’nin sadece geçişte bahsettiği o temel yüzeyin bölümlerine daha yakından bakıyor: diğer belgelerden belge oluşturma, sıfırdan sayfalar inşa etme, gezinme için bir yer imi ağacı ekleme ve erişilebilirlik için içeriği etiketleme. Dördü de basit yöntem çağrılarıdır — içe aktarılacak ayrı bir modül yok, @asposefoss/pdf paketinin kendisi dışında ekstra bir bağımlılık da yok.
Bir PDF işlem hattı “bir dosyayı aç, değiştir, kaydet” aşamasını aştığında ortaya çıkan işlemler şunlardır: birden fazla kaynaktan raporları tek bir belgeye birleştirme, bir şablondan başlamak yerine programlı olarak sayfalar oluşturma ve çıktıyı sadece görsel olarak doğru olmanın ötesinde gezinilebilir ve erişilebilir hâle getirme.
Neler Dahildir
Belgeleri Birleştirme ve Yeniden Düzenleme
Document.Split(), bir belgeyi sayfa sırasına göre her sayfa için bir yeni tek sayfalık Document olarak böler. Document.ExtractPages(), verilen 1-tabanlı sayfa numaraları kümesini yeni, kendi içinde bağımsız bir Document içine, verilen sırayla kopyalar — aynı sayfa tekrarlanabilir. Bir belgeden sayfalar başka bir belgeye de kopyalanabilir: Document.Append(), bir kaynak belgenin tüm sayfalarını hedefin sonuna kopyalar ve Document.InsertPage(), belirli bir 1-tabanlı konumda tek bir sayfayı belgeler arasında kopyalar.
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');
Birçok belge, Document.Merge() ile tek bir çağrıda da birleştirilebilir; bu, ona geçirilen her belgenin her sayfasının kopyalarından yeni bir Document oluşturur, sırasıyla.
Sıfırdan Sayfalar Oluşturma
Document.New(), hiç bir şeyden bir belge oluşturur: bir format belirtilmediğinde sıfır sayfa, bir format verildiğinde ise verilen PageFormat için bir boş sayfa oluşturur. Ek boş sayfalar Document.AddPage() aracılığıyla elde edilir; bu ayrıca bir PageFormat (veya boyutunu kopyalamak için mevcut bir Page) kabul eder. Metin, PDF kullanıcı uzayında (x, y) noktasına konumlandırılan Page.AddText() ile bir sayfaya çizilir.
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');
Yer İşaretleri ve Belge Gezintisi
Belge taslağı (çoğu PDF okuyucunun sayfanın yanında gösterdiği yer işareti paneli), Document.GetOutlines() ile okunur ve tamamen Document.SetOutlines() ile değiştirilir; ikisi de bir OutlineItem değer ağacıyla çalışır. Her OutlineItem, bir Title, bir Dest hedefi ve isteğe bağlı olarak iç içe girdiler için Children taşır, ayrıca Open (varsayılan olarak genişletilmiş) ve Bold gibi görüntüleme ipuçları içerir.
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);
Bu şekilde adlandırılan hedefler ({ name: 'intro' }), belgeye ait adlandırılmış hedef tablosu üzerinden çözülür; bir yer işareti, sayfa içeriğine bağlı olmayan bir hedefe işaret etmesi gerektiğinde Document.GetNamedDestinations() ve Document.SetNamedDestination() doğrudan bu tabloyu yönetir.
Yapılandırılmış Metin ve Erişilebilirlik Etiketleme
Document.GetStructTree(), belgenin mantıksal yapı ağacını döndürür (veya belge etiketlenmemişse null); Document.CreateStructTree() ise bir ağaç oluşturur ve belgeyi Etiketli olarak işaretler. Bir yapı ağacı oluşturulduğunda, Page.GetStructuredText(), sayfanın metnini TextBlock değerleri olarak döndürür — zaten satır ve paragraf benzeri bloklara gruplanmış konumlandırılmış parçacıklar — bu, el ile etiketleme aşamasının girdiği veridir: bloklar arasında gezilir, hangilerinin başlık hangi metin olduğu belirlenir ve ilgili öğeler ağaca eklenir.
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);
}
}
Etiketli bir yapı ağacı, aşağı akış özelliklerinin üzerine inşa edildiği temel unsurdur: anlamsal HTML dışa aktarımı, düz bir sezgisel düzenlemeye geri dönmek yerine ondan yeniden akış yapar ve Document.ValidatePdfUa(), belgeyi PDF/UA erişilebilirlik standardının, etiketlemenin mevcut olmasına bağlı bir alt kümesine göre denetler.
Hızlı Başlangıç
Paketi kurun, ardından bir belge açın, sayfalarının bir alt kümesini çıkarıp yeniden birleştirin ve sonucu kaydedin:
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');
Desteklenen Biçimler
| Biçim | Uzantı | Oku | Yaz |
|---|---|---|---|
| ✓ | ✓ | ||
| Markdown | md | ✓ | ✓ |
| SVG | svg | ✓ | ✓ |
| TIFF | tiff | ✓ | ✓ |
| DOCX | docx | — | ✓ |
| HTML | html | — | ✓ |
| PNG | png | — | ✓ |
| EPUB | epub | — | ✓ |
Açık Kaynak ve Lisanslama
Aspose.PDF FOSS for TypeScript, MIT lisansı altında yayınlanmıştır ve kaynak kodu GitHub üzerinde yayımlanmıştır. Değerlendirme filigranı, kullanım sınırı veya yönetilecek ayrı bir lisans dosyası yoktur ve kütüphane telif ücreti ödemeden ticari ürünlerde kullanılabilir.
Paket şu anda 0.1.0 sürümündedir ve aktif erken aşama geliştirmeyi yansıtmaktadır. Node.js (>=22) tek gereksinim olan çalışma zamanıdır ve paketin başka üçüncü taraf bağımlılığı yoktur.