Wyodrębnij obramowanie w pliku PDF
Wstęp
Podczas pracy z plikami PDF wyodrębnianie określonych elementów, takich jak obramowania lub ścieżki graficzne, może wydawać się zniechęcającym zadaniem. Ale dzięki Aspose.PDF dla .NET możesz łatwo wyodrębnić obramowania lub kształty z pliku PDF i zapisać je jako obraz. W tym samouczku zagłębimy się w proces wyodrębniania obramowania z pliku PDF i zapisywania go jako obrazu PNG. Przygotuj się na przejęcie kontroli nad zawartością graficzną swojego pliku PDF!
Wymagania wstępne
Zanim zagłębimy się w kod, upewnij się, że wszystko jest skonfigurowane:
- Aspose.PDF dla .NET: Jeśli jeszcze nie zainstalowałeś biblioteki Aspose.PDF, możesz to zrobićpobierz tutaj. Będziesz musiał również zastosować licencję, albo poprzez bezpłatną wersję próbną, albo zakupioną licencję.
- Konfiguracja IDE: Skonfiguruj projekt C# w Visual Studio lub innym IDE .NET. Upewnij się, że dodałeś niezbędne odwołania do biblioteki Aspose.PDF.
- Wprowadź plik PDF: Przygotuj plik PDF, z którego wyodrębnisz obramowania. Ten samouczek będzie odwoływał się do pliku o nazwie
input.pdf
.
Importowanie wymaganych pakietów
Zacznijmy od zaimportowania wymaganych przestrzeni nazw. Te pakiety zapewniają narzędzia potrzebne do manipulowania zawartością PDF.
using System.IO;
using System;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Collections;
using Aspose.Pdf;
using Aspose.Pdf.Annotations;
Teraz, gdy omówiliśmy już podstawy, możemy przejść do przewodnika krok po kroku, w którym szczegółowo wyjaśnimy każdą część kodu.
Krok 1: Ładowanie dokumentu PDF
Pierwszym krokiem jest załadowanie dokumentu PDF zawierającego obramowanie, które chcesz wyodrębnić. Pomyśl o tym jak o otwarciu książki przed rozpoczęciem czytania — potrzebujesz dostępu do treści!
Zaczniemy od określenia katalogu, w którym przechowywany jest plik PDF i wczytania dokumentu za pomocąAspose.Pdf.Document
klasa.
string dataDir = "YOUR DOCUMENT DIRECTORY";
Document doc = new Document(dataDir + "input.pdf");
Ten kod ładujeinput.pdf
plik z określonego katalogu. Upewnij się, że ścieżka do pliku jest poprawna, w przeciwnym razie może pojawić się błąd „plik nie znaleziony”.
Krok 2: Konfigurowanie grafiki i mapy bitowej
Zanim zaczniemy wyodrębniać, musimy utworzyć płótno, na którym będziemy rysować. W świecie .NET oznacza to skonfigurowanie obiektów Bitmap i Graphics. Bitmap reprezentuje obraz, a obiekt Graphics pozwoli nam rysować kształty, takie jak obramowania, wyodrębnione z pliku PDF.
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap((int)doc.Pages[1].PageInfo.Width, (int)doc.Pages[1].PageInfo.Height);
System.Drawing.Drawing2D.GraphicsPath graphicsPath = new System.Drawing.Drawing2D.GraphicsPath();
System.Drawing.Drawing2D.Matrix lastCTM = new System.Drawing.Drawing2D.Matrix(1, 0, 0, -1, 0, 0);
System.Drawing.Drawing2D.Matrix inversionMatrix = new System.Drawing.Drawing2D.Matrix(1, 0, 0, -1, 0, (float)doc.Pages[1].PageInfo.Height);
System.Drawing.PointF lastPoint = new System.Drawing.PointF(0, 0);
System.Drawing.Color fillColor = System.Drawing.Color.FromArgb(0, 0, 0);
System.Drawing.Color strokeColor = System.Drawing.Color.FromArgb(0, 0, 0);
Oto szczegółowe informacje:
- Tworzymy obraz bitmapowy o rozmiarze pierwszej strony dokumentu PDF.
- GraphicsPath służy do definiowania kształtów (w tym przypadku obramowań).
- Macierz definiuje sposób transformacji grafiki. Potrzebujemy macierzy inwersji, ponieważ PDF i .NET mają różne układy współrzędnych.
Krok 3: Przetwarzanie zawartości pliku PDF
Plik PDF zawiera serię poleceń rysunkowych. Musimy przetworzyć każde z tych poleceń, aby zidentyfikować i wyodrębnić informacje o obramowaniu.
foreach (Operator op in doc.Pages[1].Contents)
{
// Polecenia przetwarzania, takie jak zapisywanie/przywracanie stanu, rysowanie linii, wypełnianie kształtów itp.
}
Kod przechodzi przez każdy operator rysowania w strumieniu treści PDF. Każdy operator może reprezentować linię, prostokąt lub inną instrukcję graficzną.
Krok 4: Obsługa operatorów PDF
Każdy operator w pliku PDF kontroluje akcję. Aby wyodrębnić obramowanie, musimy zidentyfikować polecenia, takie jak „move to”, „line to” i „draw rectangle”. Następujące operatory obsługują te akcje:
- MoveTo: Przenosi kursor do punktu początkowego.
- LineTo: Rysuje linię od bieżącego punktu do nowego punktu.
- Re: Rysuje prostokąt (może to być część obramowania).
Aspose.Pdf.Operators.MoveTo opMoveTo = op as Aspose.Pdf.Operators.MoveTo;
Aspose.Pdf.Operators.LineTo opLineTo = op as Aspose.Pdf.Operators.LineTo;
Aspose.Pdf.Operators.Re opRe = op as Aspose.Pdf.Operators.Re;
if (opMoveTo != null)
{
lastPoint = new System.Drawing.PointF((float)opMoveTo.X, (float)opMoveTo.Y);
}
else if (opLineTo != null)
{
System.Drawing.PointF linePoint = new System.Drawing.PointF((float)opLineTo.X, (float)opLineTo.Y);
graphicsPath.AddLine(lastPoint, linePoint);
lastPoint = linePoint;
}
else if (opRe != null)
{
System.Drawing.RectangleF re = new System.Drawing.RectangleF((float)opRe.X, (float)opRe.Y, (float)opRe.Width, (float)opRe.Height);
graphicsPath.AddRectangle(re);
}
W tym kroku:
- Rejestrujemy punkty dla każdej narysowanej linii lub kształtu.
- Dla prostokątów (
opRe
), dodajemy je bezpośrednio dographicsPath
, którego użyjemy później do narysowania granicy.
Krok 5: Rysowanie granicy
Gdy już zidentyfikujemy linie i prostokąty tworzące obramowanie, musimy je narysować na obiekcie Bitmap. Tutaj wkracza obiekt Graphics.
using (System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bitmap))
{
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.DrawPath(new System.Drawing.Pen(strokeColor), graphicsPath);
}
- Tworzymy obiekt graficzny na podstawie mapy bitowej.
- SmoothingMode.HighQuality zapewnia uzyskanie ładnego, gładkiego obrazu.
- Na koniec używamy DrawPath, aby narysować obramowanie.
Krok 6: Zapisywanie wyodrębnionej ramki
Teraz, gdy wyodrębniliśmy obramowanie, czas zapisać je jako plik obrazu. Spowoduje to zapisanie obramowania jako PNG.
dataDir = dataDir + "ExtractBorder_out.png";
bitmap.Save(dataDir, ImageFormat.Png);
- Mapa bitowa jest zapisywana jako obraz PNG.
- Teraz możesz otworzyć ten obraz, aby obejrzeć wyodrębnioną ramkę.
Wniosek
Wyodrębnianie obramowań z pliku PDF za pomocą Aspose.PDF dla .NET może wydawać się trudne na początku, ale po rozłożeniu staje się proste. Rozumiejąc operatory rysowania w pliku PDF i wykorzystując potężne biblioteki .NET, możesz sprawnie manipulować i wyodrębniać zawartość graficzną. Ten przewodnik daje solidne podstawy do rozpoczęcia manipulowania plikami PDF!
Najczęściej zadawane pytania
Jak radzić sobie z wieloma stronami w pliku PDF?
Możesz przeglądać każdą stronę dokumentu, powtarzając jądoc.Pages
zamiast kodowania na stałedoc.Pages[1]
.
Czy mogę wyodrębnić inne elementy, np. tekst, stosując to samo podejście?
Tak, Aspose.PDF oferuje rozbudowane interfejsy API umożliwiające wyodrębnianie tekstu, obrazów i innej zawartości z plików PDF.
Jak ubiegać się o licencję, aby uniknąć ograniczeń?
Możeszzastosować licencję ładując go przezLicense
klasa udostępniona przez Aspose.
Co zrobić, jeśli mój plik PDF nie ma obramowań?
Jeśli Twój plik PDF nie zawiera widocznych obramowań, proces ekstrakcji grafiki może nie dać żadnego rezultatu. Upewnij się, że zawartość pliku PDF zawiera rysowalne obramowania.
Czy mogę zapisać dane wyjściowe w formatach innych niż PNG?
Tak, po prostu zmieńImageFormat.Png
do innego obsługiwanego formatu, takiego jakImageFormat.Jpeg
.