Jak pracować z obrazami i grafiką w TypeScript
Ten przewodnik pokazuje, jak umieścić obrazy i grafiki wektorowe na stronie PDF przy użyciu Aspose.PDF FOSS dla TypeScript. Page.AddImage() osadza bajty rastrowe, Page.Graphics() zwraca PageGraphics do rysowania kształtów, a Document.OptionalContent grupuje je w przełączalne warstwy. Wymaga Node.js 22 lub nowszej wersji.
Przewodnik krok po kroku
Krok 1: Zainstaluj pakiet
git clone https://github.com/aspose-pdf-foss/Aspose.PDF-FOSS-for-TypeScript.git
cd Aspose.PDF-FOSS-for-TypeScript
npm install
npm run buildZweryfikuj instalację, importując klasę Document w nowym pliku TypeScript — ta linia powinna zostać rozwiązana bez błędu po zainstalowaniu pakietu:
import { Document } from '@asposefoss/pdf';Krok 2: Zaimportuj wymagane klasy
Importuj Document, aby otworzyć plik; AddImage(), Graphics() i AddBarcode() są wywoływane bezpośrednio na zwróconych przez niego instancjach Page:
import { Document } from '@asposefoss/pdf';Krok 3: Osadź obraz rastrowy
Page.AddImage(data, rect, opts) umieszcza bajty JPEG lub PNG wewnątrz ograniczającego rect, skalowane do dopasowania:
const doc = Document.OpenFile('input.pdf');
const page = doc.Pages[0];
const imgW = 300;
const imgH = 237; // aspect preserved from a 1280x1014 source
page.AddImage(imageBytes, [150, 400, 150 + imgW, 400 + imgH]);Krok 4: Rysuj grafikę wektorową
Page.Graphics() zwraca PageGraphics, który buforuje wywołania rysowania, aż apply() je zatwierdzi. Łącz setStrokeColor(), setFillColor(), setLineWidth() oraz metody kształtów, takie jak rect(), circle() i drawLine(), a następnie stroke() / fill() / fillStroke():
const g = page.Graphics();
g.save()
.setStrokeColor([0.55, 0.60, 0.75])
.setLineWidth(1)
.rect(80, 300, 435, 340)
.stroke()
.restore();
g.setFillColor([0.88, 0.91, 0.98])
.setStrokeColor([0.45, 0.52, 0.75])
.setLineWidth(1)
.circle(120, 340, 13)
.fillStroke();
g.apply();Krok 5: Powiąż obrazy i grafikę z warstwami opcjonalnej zawartości
doc.OptionalContent.AddLayer(name, opts) tworzy Layer, który można przełączać w panelu warstw przeglądarki. Przekaż go jako layer do AddImage(), lub otocz wywołania PageGraphics w BeginLayer() / EndLayer():
const oc = doc.OptionalContent;
const grid = oc.AddLayer('Grid', { visible: false }); // default off
const branding = oc.AddLayer('Branding');
const g2 = page.Graphics();
g2.BeginLayer(grid);
g2.save().setStrokeColor([0.72, 0.76, 0.88]).setLineWidth(0.4).setDash([3, 3]);
g2.drawLine(80, 300, 515, 300);
g2.stroke().restore();
g2.EndLayer();
g2.apply();
page.AddImage(logoBytes, [370, 606, 480, 640], { layer: branding });Krok 6: Dodaj kod kreskowy
Page.AddBarcode(spec, rect, opts) rysuje symbol kodu kreskowego; spec.type wybiera symbologię, a spec.data jest zakodowanym ładunkiem. Podobnie jak AddImage(), przyjmuje opcję layer:
page.AddBarcode({ type: 'code128', data: 'ROOM-204' }, [370, 340, 500, 384], {
layer: branding,
text: true, // draw the human-readable payload beneath the symbol
});Typowe problemy i rozwiązania
Grafika rysowana przy użyciu PageGraphics nie pojawiają się na stronie. Wywołuje bufor aż do apply() jest wywoływany — każdy PageGraphics sekwencja wymaga dopasowanego apply() przed zapisaniem strony.
Warstwa nigdy nie pojawia się w panelu warstw przeglądarki. Confirm AddLayer() został wywołany przez doc.OptionalContent, nie utworzony jako samodzielny obiekt — warstwy muszą być zarejestrowane w konfiguracji zawartości opcjonalnej dokumentu, aby były wymienione.
Obraz lub kod kreskowy ignoruje przełącznik widoczności warstwy. Only AddImage(), AddBarcode(), oraz treść otoczona w PageGraphics.BeginLayer() / EndLayer() wiąże się z warstwą przez /OC — inna podstawowa zawartość strony (np. zwykły tekst rysowany bez opcji warstwy) nie jest wpływana przez żaden przełącznik warstwy.
Page.AddImage() zniekształca obraz. rect ustawia bezpośrednio umieszczoną szerokość i wysokość — najpierw oblicz je na podstawie własnego stosunku boków obrazu źródłowego, jeśli obraz nie ma być rozciągany.
Najczęściej zadawane pytania
Czy warstwa może domyślnie być ukryta?
Tak — przekaż { visible: false } do OptionalContent.AddLayer().
Czy jedna warstwa może być zagnieżdżona pod inną?
Tak — przekaż { parent: someLayer } przy wywoływaniu AddLayer(), aby zagnieździć nową warstwę pod istniejącą w /D /Order panelu warstw.
Jakie formaty obrazów akceptuje Page.AddImage()?
Bajty rastrowe JPEG i PNG.
Czy rysowanie przy użyciu PageGraphics obsługuje przezroczystość i linie przerywane?
Tak — setOpacity(alpha) ustawia fill/stroke alpha i setDash(pattern, phase) ustawia wzór przerywania; oba są łańcuchowe jak pozostałe PageGraphics settery.