Szegély kibontása PDF fájlból
Bevezetés
Amikor PDF-ekkel dolgozik, bizonyos elemek, például szegélyek vagy grafikus útvonalak kinyerése ijesztő feladatnak tűnhet. Az Aspose.PDF for .NET segítségével azonban könnyedén kivonhatja a szegélyeket vagy alakzatokat egy PDF-fájlból, és képként mentheti őket. Ebben az oktatóanyagban belevetjük magunkat a szegély PDF-ből való kivonásához és PNG-képként való mentéséhez. Készüljön fel arra, hogy átvegye PDF-je grafikus tartalmát!
Előfeltételek
Mielőtt belemerülnénk a kódba, győződjön meg arról, hogy mindent beállított:
- Aspose.PDF for .NET: Ha még nem telepítette az Aspose.PDF könyvtárat, megtehetitöltse le itt. A licencet is alkalmaznia kell, akár az ingyenes próbaverzióval, akár egy megvásárolt licenccel.
- IDE beállítása: Állítson be egy C#-projektet a Visual Studióban vagy bármely más .NET IDE-ben. Győződjön meg arról, hogy hozzáadta a szükséges hivatkozásokat az Aspose.PDF könyvtárhoz.
- PDF-fájl bevitele: Készítsen PDF-fájlt, amelyből kivonhatja a szegélyeket. Ez az oktatóanyag egy nevű fájlra hivatkozik
input.pdf
.
A szükséges csomagok importálása
Kezdjük a szükséges névterek importálásával. Ezek a csomagok biztosítják a PDF-tartalom kezeléséhez szükséges eszközöket.
using System.IO;
using System;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Collections;
using Aspose.Pdf;
using Aspose.Pdf.Annotations;
Most, hogy az alapokkal foglalkoztunk, térjünk át a lépésről lépésre szóló útmutatóra, ahol a kód minden egyes részét lebontjuk, hogy részletesen elmagyarázzuk.
1. lépés: A PDF-dokumentum betöltése
Az első lépés a kibontandó szegélyt tartalmazó PDF dokumentum betöltése. Gondolj úgy, mintha kinyitnál egy könyvet, mielőtt elkezdesz olvasni – hozzá kell férned a tartalomhoz!
Kezdjük azzal, hogy megadjuk a könyvtárat, ahol a PDF-fájl tárolva van, és betöltjük a dokumentumot a segítségévelAspose.Pdf.Document
osztály.
string dataDir = "YOUR DOCUMENT DIRECTORY";
Document doc = new Document(dataDir + "input.pdf");
Ez a kód betölti ainput.pdf
fájlt a megadott könyvtárból. Győződjön meg arról, hogy a fájl elérési útja helyes, különben a fájl nem található hibaüzenetet kaphat.
2. lépés: A grafika és a bitkép beállítása
Mielőtt elkezdené a kibontást, létre kell hoznunk egy vásznat, amelyre rajzolhatunk. A .NET világában ez egy Bitmap és Graphics objektumok beállítását jelenti. A Bitmap a képet ábrázolja, a Graphics objektum pedig lehetővé teszi a PDF-ből kinyert alakzatok, például szegélyek rajzolását.
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);
Íme egy bontás:
- A PDF első oldalának megfelelő méretű bittérképes képet készítünk.
- A GraphicsPath alakzatok (ebben az esetben szegélyek) meghatározására szolgál.
- A mátrix meghatározza a grafika átalakításának módját; szükségünk van egy inverziós mátrixra, mert a PDF és a .NET eltérő koordinátarendszerrel rendelkezik.
3. lépés: A PDF-tartalom feldolgozása
A PDF-fájl rajzparancsok sorozata, és mindegyik parancsot fel kell dolgoznunk a határinformációk azonosításához és kibontásához.
foreach (Operator op in doc.Pages[1].Contents)
{
// Parancsok feldolgozása, például állapot mentése/visszaállítása, vonalak rajzolása, alakzatok kitöltése stb.
}
A kód végigfut minden rajzoperátoron a PDF tartalomfolyamában. Mindegyik operátor egy vonalat, téglalapot vagy más grafikus utasítást jelenthet.
4. lépés: PDF-kezelők kezelése
A PDF-fájl minden operátora egy-egy műveletet vezérel. A szegély kibontásához olyan parancsokat kell azonosítanunk, mint a „mozgatás ide”, „sor ide” és „téglalap rajzolása”. A következő operátorok kezelik ezeket a műveleteket:
- MoveTo: A kurzort egy kezdőpontra mozgatja.
- LineTo: vonalat húz az aktuális ponttól egy új pontig.
- Re: Rajzol egy téglalapot (ez lehet a szegély része).
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);
}
Ebben a lépésben:
- Minden megrajzolt vonalhoz vagy alakzathoz rögzítjük a pontokat.
- Téglalapokhoz (
opRe
), közvetlenül hozzáadjuk őket agraphicsPath
, amelyet később a határ meghúzásához használunk.
5. lépés: Rajzolja meg a határt
Miután azonosítottuk a szegélyt alkotó vonalakat és téglalapokat, ténylegesen rá kell rajzolnunk őket a Bitmap objektumra. Itt jön be a Graphics objektum.
using (System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bitmap))
{
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.DrawPath(new System.Drawing.Pen(strokeColor), graphicsPath);
}
- A bittérkép alapján létrehozunk egy grafikus objektumot.
- A SmoothingMode.HighQuality biztosítja, hogy szép sima képet kapjunk.
- Végül a DrawPath segítségével rajzoljuk meg a határt.
6. lépés: A kivont szegély mentése
Most, hogy kibontottuk a szegélyt, ideje elmenteni képfájlként. Ezzel a szegélyt PNG-ként menti el.
dataDir = dataDir + "ExtractBorder_out.png";
bitmap.Save(dataDir, ImageFormat.Png);
- A bitkép PNG-képként kerül mentésre.
- Most megnyithatja ezt a képet a kivont szegély megtekintéséhez.
Következtetés
A szegélyek kinyerése egy PDF-fájlból az Aspose.PDF for .NET használatával eleinte bonyolultnak tűnhet, de ha egyszer lebontja, ez egyszerűvé válik. A PDF-ben található rajzoperátorok megértésével és a hatékony .NET-könyvtárak használatával hatékonyan kezelheti és bonthatja ki a grafikus tartalmat. Ez az útmutató szilárd alapot nyújt a PDF-kezelés megkezdéséhez!
GYIK
Hogyan kezelhetek több oldalt a PDF-ben?
A dokumentum egyes oldalai között ismétléssel lépkedhetdoc.Pages
keménykódolás helyettdoc.Pages[1]
.
Kivonhatok más elemeket, például szöveget, ugyanezzel a megközelítéssel?
Igen, az Aspose.PDF gazdag API-kat biztosít a szövegek, képek és egyéb tartalmak PDF-fájlokból való kinyerésére.
Hogyan kérhetek engedélyt a korlátozások elkerülése érdekében?
Megtehetiengedélyt alkalmazni keresztül töltve beLicense
osztály által biztosított Aspose.
Mi van, ha a PDF-emnek nincsenek határai?
Ha a PDF-fájl nem tartalmaz látható szegélyeket, előfordulhat, hogy a grafikai kinyerési folyamat nem hoz eredményt. Győződjön meg arról, hogy a PDF-tartalom rajzolható szegélyeket tartalmaz.
Elmenthetem a kimenetet nem PNG formátumban?
Igen, egyszerűen változtassa meg aImageFormat.Png
másik támogatott formátumra, mint plImageFormat.Jpeg
.