Informacje o obrazie w pliku PDF
Ten przewodnik poprowadzi Cię krok po kroku, jak wyodrębnić informacje o obrazach z pliku PDF za pomocą Aspose.PDF dla .NET. Upewnij się, że masz już skonfigurowane środowisko i wykonaj poniższe czynności:
Krok 1: Zdefiniuj katalog dokumentów
Upewnij się, że ustawiłeś prawidłowy katalog dokumentów. Zastępować"YOUR DOCUMENT DIRECTORY"
w kodzie ścieżką do katalogu, w którym znajduje się Twój dokument PDF.
string dataDir = "YOUR DOCUMENT DIRECTORY";
Krok 2: Załaduj źródłowy plik PDF
W tym kroku załadujemy źródłowy plik PDF przy użyciu formatuDocument
klasa Aspose.PDF. UżyjDocument
konstruktor i podaj ścieżkę do dokumentu PDF.
Document doc = new Document(dataDir + "ImageInformation.pdf");
Krok 3: Ustaw domyślną rozdzielczość
W tym kroku ustawimy domyślną rozdzielczość obrazów. W przykładzie domyślna rozdzielczość jest ustawiona na 72.
int defaultResolution = 72;
Krok 4: Zainicjuj obiekty i liczniki
W tym kroku zainicjujemy obiekty i liczniki potrzebne do pobrania informacji o obrazie.
System.Collections.Stack graphicsState = new System.Collections.Stack();
System.Collections.ArrayList imageNames = new System.Collections.ArrayList(doc.Pages[1].Resources.Images.Names);
Krok 5: Przełączaj operatory na pierwszej stronie dokumentu
W tym kroku omówimy operatory znajdujące się na pierwszej stronie dokumentu, aby zidentyfikować operacje związane z obrazami.
foreach(Operator op in doc.Pages[1].Contents)
{
Krok 6: Zarządzaj operatorami i wyodrębniaj informacje o obrazie
Na tym etapie będziemy zarządzać różnymi typami operatorów i wyodrębniać informacje o obrazach.
Aspose.Pdf.Operators.GSave opSaveState = op as Aspose.Pdf.Operators.GSave;
Aspose.Pdf.Operators.GRestore opRestoreState = op as Aspose.Pdf.Operators.GRestore;
Aspose.Pdf.Operators.ConcatenateMatrix opCtm = op as Aspose.Pdf.Operators.ConcatenateMatrix;
Aspose.Pdf.Operators.Do opDo = op as Aspose.Pdf.Operators.Do;
//Obsługuj operacje GSave i GRestore dla transformacji
if (opSaveState != null)
{
graphicsState.Push(((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Clone());
}
else if (opRestoreState != null)
{
graphicsState. Pop();
}
// Obsługuj operację ConcatenateMatrix dla transformacji
else if (opCtm != null)
{
// Zastosuj macierz transformacji
System.Drawing.Drawing2D.Matrix cm = new System.Drawing.Drawing2D.Matrix(
(float)opCtm.Matrix.A,
(float)opCtm.Matrix.B,
(float)opCtm.Matrix.C,
(float)opCtm.Matrix.D,
(float)opCtm.Matrix.E,
(float)opCtm.Matrix.F);
((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Multiply(cm);
keep on going;
}
// Obsługuj operację Do dla obrazów
else if (opDo != null)
{
if (imageNames.Contains(opDo.Name))
{
// Odzyskaj obraz
XImage image = doc.Pages[1].Resources.Images[opDo.Name];
// Pobierz wymiary obrazu
double scaledWidth = Math.Sqrt(Math.Pow(lastCTM.Elements[0], 2) + Math.Pow(lastCTM.Elements[1], 2));
double scaledHeight = Math.Sqrt(Math.Pow(lastCTM.Elements[2], 2) + Math.Pow(lastCTM.Elements[3], 2));
// Oblicz rozdzielczość na podstawie powyższych informacji
double resHorizontal = originalWidth * defaultResolution / scaledWidth;
double resVertical = originalHeight * defaultResolution / scaledHeight;
// Wyświetl informacje o obrazie
Console.Out.WriteLine(
string.Format(dataDir + "image {0} ({1:.##}:{2:.##}): res {3:.##} x {4:.##}",
opDo.Name, scaledWidth, scaledHeight, resHorizontal,
resVertical));
}
}
Przykładowy kod źródłowy informacji o obrazie przy użyciu Aspose.PDF dla .NET
// Ścieżka do katalogu dokumentów.
string dataDir = "YOUR DOCUMENT DIRECTORY";
// Załaduj źródłowy plik PDF
Document doc = new Document(dataDir+ "ImageInformation.pdf");
// Określ domyślną rozdzielczość obrazu
int defaultResolution = 72;
System.Collections.Stack graphicsState = new System.Collections.Stack();
// Zdefiniuj obiekt listy tablic, który będzie przechowywać nazwy obrazów
System.Collections.ArrayList imageNames = new System.Collections.ArrayList(doc.Pages[1].Resources.Images.Names);
// Wstaw obiekt do ułożenia w stos
graphicsState.Push(new System.Drawing.Drawing2D.Matrix(1, 0, 0, 1, 0, 0));
// Pobierz wszystkie operatory na pierwszej stronie dokumentu
foreach (Operator op in doc.Pages[1].Contents)
{
// Użyj operatorów GSave/GRestore, aby przywrócić poprzednio ustawione przekształcenia
Aspose.Pdf.Operators.GSave opSaveState = op as Aspose.Pdf.Operators.GSave;
Aspose.Pdf.Operators.GRestore opRestoreState = op as Aspose.Pdf.Operators.GRestore;
// Utwórz instancję obiektu ConcatenateMatrix, ponieważ definiuje on bieżącą macierz transformacji.
Aspose.Pdf.Operators.ConcatenateMatrix opCtm = op as Aspose.Pdf.Operators.ConcatenateMatrix;
// Utwórz operator Do, który rysuje obiekty z zasobów. Rysuje obiekty Form i obiekty Image
Aspose.Pdf.Operators.Do opDo = op as Aspose.Pdf.Operators.Do;
if (opSaveState != null)
{
//Zapisz poprzedni stan i wypchnij bieżący stan na górę stosu
graphicsState.Push(((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Clone());
}
else if (opRestoreState != null)
{
// Wyrzuć obecny stan i przywróć poprzedni
graphicsState.Pop();
}
else if (opCtm != null)
{
System.Drawing.Drawing2D.Matrix cm = new System.Drawing.Drawing2D.Matrix(
(float)opCtm.Matrix.A,
(float)opCtm.Matrix.B,
(float)opCtm.Matrix.C,
(float)opCtm.Matrix.D,
(float)opCtm.Matrix.E,
(float)opCtm.Matrix.F);
// Pomnóż aktualną macierz przez macierz stanu
((System.Drawing.Drawing2D.Matrix)graphicsState.Peek()).Multiply(cm);
continue;
}
else if (opDo != null)
{
// W przypadku, gdy jest to operator rysowania obrazu
if (imageNames.Contains(opDo.Name))
{
System.Drawing.Drawing2D.Matrix lastCTM = (System.Drawing.Drawing2D.Matrix)graphicsState.Peek();
// Utwórz obiekt XImage do przechowywania obrazów pierwszej strony PDF
XImage image = doc.Pages[1].Resources.Images[opDo.Name];
// Uzyskaj wymiary obrazu
double scaledWidth = Math.Sqrt(Math.Pow(lastCTM.Elements[0], 2) + Math.Pow(lastCTM.Elements[1], 2));
double scaledHeight = Math.Sqrt(Math.Pow(lastCTM.Elements[2], 2) + Math.Pow(lastCTM.Elements[3], 2));
// Uzyskaj informacje o wysokości i szerokości obrazu
double originalWidth = image.Width;
double originalHeight = image.Height;
// Oblicz rozdzielczość na podstawie powyższych informacji
double resHorizontal = originalWidth * defaultResolution / scaledWidth;
double resVertical = originalHeight * defaultResolution / scaledHeight;
// Wyświetlanie informacji o wymiarach i rozdzielczości każdego obrazu
Console.Out.WriteLine(
string.Format(dataDir + "image {0} ({1:.##}:{2:.##}): res {3:.##} x {4:.##}",
opDo.Name, scaledWidth, scaledHeight, resHorizontal,
resVertical));
}
}
}
Wniosek
Gratulacje! Nauczyłeś się teraz, jak wyodrębnić informacje o obrazie z pliku PDF przy użyciu Aspose.PDF dla .NET. Możesz wykorzystać te informacje do różnych zadań przetwarzania obrazu w swoich aplikacjach.
Często zadawane pytania dotyczące informacji o obrazie w pliku PDF
P: Jaki jest cel wyodrębniania informacji o obrazie z dokumentu PDF przy użyciu Aspose.PDF dla .NET?
O: Wyodrębnianie informacji o obrazie z dokumentu PDF zapewnia wgląd w wymiary, rozdzielczość i inne atrybuty obrazów w dokumencie. Informacje te można wykorzystać do przetwarzania obrazu, analizy lub zadań optymalizacyjnych.
P: W jaki sposób Aspose.PDF dla .NET pomaga w wyodrębnianiu informacji o obrazie z dokumentu PDF?
Odp.: Aspose.PDF dla .NET zapewnia narzędzia umożliwiające dostęp i analizę zawartości dokumentu PDF, w tym jego obrazów. Dostarczony kod demonstruje, jak wyodrębnić i wyświetlić informacje o obrazie przy użyciu różnych operatorów.
P: Jakiego rodzaju informacje o obrazie można wyodrębnić za pomocą tej metody?
Odp.: Ta metoda umożliwia wyodrębnienie i wyświetlenie informacji, takich jak skalowane wymiary, rozdzielczość i nazwy obrazów w dokumencie PDF.
P: W jaki sposób kod identyfikuje i przetwarza operatory związane z obrazami w dokumencie PDF?
Odpowiedź: Kod iteruje po operatorach na określonej stronie dokumentu PDF. Identyfikuje i przetwarza operatory związane z operacjami na obrazach, transformacjami i renderowaniem.
P: Jakie jest znaczenie domyślnej rozdzielczości i jak jest ona używana w kodzie?
Odp.: Rozdzielczość domyślna służy jako punkt odniesienia do obliczenia rzeczywistej rozdzielczości obrazów. Kod oblicza rozdzielczość każdego obrazu na podstawie jego wymiarów i domyślnego ustawienia rozdzielczości.
P: W jaki sposób wyodrębnione informacje o obrazie można wykorzystać w rzeczywistych scenariuszach?
Odp.: Wyodrębnione informacje o obrazie można wykorzystać do takich zadań, jak ocena jakości obrazu, optymalizacja obrazu, generowanie miniatur obrazów i ułatwianie procesów decyzyjnych związanych z obrazami.
P: Czy mogę zmodyfikować kod, aby wyodrębnić dodatkowe atrybuty związane z obrazem?
O: Tak, możesz dostosować kod, aby wyodrębnić dodatkowe atrybuty obrazów, takie jak przestrzeń kolorów, głębokość pikseli lub typ obrazu.
P: Czy proces wyodrębniania informacji o obrazie wymaga dużych zasobów lub czasu?
O: Proces wyodrębniania informacji o obrazie jest wydajny i zoptymalizowany pod kątem wydajności, zapewniając minimalny wpływ na wykorzystanie zasobów i czas przetwarzania.
P: Jakie korzyści mogą odnieść programiści z identyfikowania i wyodrębniania informacji o obrazach z dokumentów PDF?
O: Programiści mogą uzyskać wgląd w charakterystykę obrazów w dokumentach PDF, umożliwiając im podejmowanie świadomych decyzji dotyczących manipulacji, przetwarzania i optymalizacji obrazów.
P: Czy tej metody można używać do przetwarzania wsadowego dokumentów PDF zawierających obrazy?
O: Tak, tę metodę można rozszerzyć na przetwarzanie wsadowe, przeglądając wiele stron lub dokumentów, wyodrębniając informacje o obrazie i wykonując zadania związane z obrazami.