Нажмите "Enter", чтобы перейти к содержанию

Nyelvi beállítás az upc mediaboxban

Hozzon létre PDF-dokumentumot Pythonban a pText használatával

A pdf létrehozásának egyik legrugalmasabb és legismertebb módja a kód írása LaTeX-ben és a megfelelő program használata. De vannak más módszerek is, amelyek egyszerűbbek és világosabbak, mint a LaTeX. Kifejezetten a Fullstack Python fejlesztői tanfolyam kezdetekor bemutatunk egy cikk fordítását, amely a pText könyvtár használatával PDF generálására vonatkozik; ezt a cikket Joris Schellekens írta — a pText fejlesztője.

Ebben az oktatóanyagban a pText, egy Python könyvtárat fogjuk használni PDF-dokumentumok olvasásához, feldolgozásához és létrehozásához. Egyszerre kínál alacsony szintű modellt (lehetővé teszi, hogy hozzáférjen a pontos koordinátákhoz és elrendezéshez, ha úgy dönt, hogy használja őket), és egy magas szintű modellt (ahol delegálhatja a margók, pozíciók stb. pontos számításait). d.). Megvizsgáljuk, hogyan hozhatunk létre és érvényesíthetünk PDF-dokumentumot Pythonban a pText használatával, valamint hogyan lehet néhány LayoutElement [elrendezési elemet] használni vonalkódok és táblázatok hozzáadásához.

A Portable Document Format (PDF) nem WYSIWYG (What You See Is What You Get) formátum. Úgy tervezték, hogy platformfüggetlen legyen, független az alapul szolgáló operációs rendszertől és a renderelő motoroktól.

Ennek elérése érdekében a PDF-et úgy tervezték, hogy kölcsönhatásba lépjen valamivel, mint egy programozási nyelv, és utasítások és műveletek sorozatára támaszkodik az eredmény elérése érdekében. Valójában a PDF a PostScript szkriptnyelven alapul, amely az első eszközfüggetlen oldalleíró nyelv volt. Operátorai vannak, amelyek megváltoztatják a grafikus állapotokat, magas szinten valahogy így néznek ki:

  • Telepítse a Helvetica betűtípust.

  • Állítsa a körvonal színét feketére.

  • Ugrás ide: (60 700).

  • Rajzolj karakterjelet "H".

Ez több dolgot megmagyaráz:

  • Miért olyan nehéz pontosan kivonatolni a szöveget a PDF-ből?.

  • Miért nehéz szerkeszteni egy PDF-dokumentumot?.

  • Miért alkalmazza a legtöbb PDF-könyvtár nagyon alacsony szintű megközelítést a tartalom létrehozásához (meg kell adnia a szöveg, mezők stb. megjelenítési koordinátáit?. d.).

A pText telepítése

A pText letölthető a GitHubról, vagy pip-en keresztül telepíthető:

jegyzet. Az írás idején az 1-es verzióban.nyolc.6 alapértelmezés szerint nincsenek telepítve olyan külső függőségek, mint a python-vonalkód és a qrcode. Ha hibaüzenet jelenik meg, telepítse manuálisan:

Hozzon létre PDF-dokumentumot Pythonban a pText használatával

A pTextnek két intuitív kulcsosztálya van, a Dokumentum és az Oldal, amelyek a dokumentumot és a benne lévő oldalakat képviselik. Ez a PDF dokumentumok létrehozásának alapstruktúrája. Ezenkívül a PDF osztály egy API az általunk létrehozott dokumentumok betöltésére és mentésére. Ezt szem előtt tartva hozzunk létre egy üres PDF fájlt:

A legtöbb kód itt beszél magának. Kezdjük egy üres dokumentum létrehozásával, majd a hozzáfűzés () funkcióval adjunk hozzá egy üres oldalt a dokumentumhoz, végül mentsük el a fájlt PDF-ben.szemétlerakók ().

Érdemes megjegyezni, hogy a zászlót használtuk "wb" bináris módban történő íráshoz, mivel nem akarjuk, hogy a Python kódolja ezt a szöveget. Ez egy üres PDF-et kap, amelyet kimenetnek neveznek.pdf a fájlrendszerében:

Hello World dokumentum létrehozása a pText használatával

Természetesen az üres PDF dokumentumok nem tartalmaznak sok információt. Adjunk hozzá tartalmat az oldalhoz, mielőtt hozzáadnánk a dokumentumpéldányhoz.

A korábban leírt két osztályhoz hasonlóan az oldal tartalom hozzáadásához egy PageLayout-ot adunk hozzá, amely jelzi az elrendezés típusát, amelyet látni szeretnénk, és adjunk hozzá egy vagy több bekezdést az elrendezéshez.

Ebből a célból a Dokumentum a legalacsonyabb szintű példány az objektumhierarchiában, a bekezdés pedig a legmagasabb szintű példány, amely a PageLayout és így az oldal tetején helyezkedik el. Adjunk hozzá egy bekezdést az oldalunkhoz:

Észre fogja venni, hogy 2 további objektumot adtunk hozzá:

  • Egy PageLayout példány, pontosabban a SingleColumnLayout alosztályán keresztül: Ez az osztály nyomon követi, hogy hol kerül tartalom az oldalhoz, milyen területek állnak rendelkezésre a jövőbeli tartalom számára, mik az oldal margói, és mi legyen a vezető (a bekezdés objektumok közötti szóköz).

Mivel itt csak egy oszloppal dolgozunk, SingleColumnLayoutot használunk. Alternatív megoldásként használhatjuk a MultiColumnLayout-ot.

  • Bekezdéspéldány: Ez az osztály egy szövegblokkot jelöl. Beállíthat olyan tulajdonságokat, mint a font, font_size, font_color és még sok más. További példákat találhat a dokumentációban.

A kód generálja a fájl kimenetét.bekezdésünket tartalmazó pdf:

A generált PDF ellenőrzése a pText segítségével.

jegyzet: ez a rész nem kötelező, ha nem érdekli a PDF-dokumentum belső működése.

De nagyon hasznos lehet, ha ismerkedünk a formátummal (például a klasszikus „miért jelenik meg a tartalom ezen az oldalon?” hibakereséskor). A PDF-olvasó általában az utolsó bájtoktól kezdve olvassa be a dokumentumot:

Itt látunk egy fájlvégi jelölőt (%% EOF) és egy kereszthivatkozási táblázatot (általában xrefként rövidítve).

A külső hivatkozás a «startxref» és az «xref» tokenekre korlátozódik.

Az xref (több is lehet a dokumentumban) referencia táblázatként szolgál a PDF-olvasó számára.

Tartalmazza a PDF minden egyes objektumának bájteltolását (a fájl tetejétől kezdve). Az xref első sora (0 11) azt mondja, hogy ebben az xrefben 11 objektum van, és az első objektum 0-val kezdődik.

Minden következő sor egy bájteltolásból áll, amelyet az úgynevezett generációs szám és az f vagy n betű követ:

  • Az f-vel jelölt objektumok szabadok, nem várható, hogy megjelenjenek.

  • Az n-nel jelölt objektumok «használatban vannak».

Az xref alján találjuk a trailer szótárat. A PDF szintaxis szótárait szimbólumok és szimbólumok választják el >>. Ez a szótár a következő párokat tartalmazza:

  • / Root 1 0 R

  • / Info 2 0 R

  • / 11-es méret

  • / ID [61e6d144af4b84e0e0aa52deab87cfe9> 61e6d144af4b84e0e0aa52deab87cfe9>]

A Trailer Dictionary a PDF-olvasó kiindulópontja, és minden más adatra hivatkozik. Ebben az esetben:

  • / Gyökér: Ez egy másik szótár, amely a dokumentum tényleges tartalmára utal.

  • / Info: Ez egy szótár, amely a dokumentum metainformációit tartalmazza (szerző, cím stb.).

Az olyan karakterláncokat, mint az 1 0 R, a PDF szintaxisban «hivatkozásoknak» nevezik. Itt jön jól az xref táblázat. Az 1 0 R-hez tartozó objektum megtalálásához nézzük az 1. objektumot (0. generációs szám). Az xref keresési táblázat azt mondja, hogy ezt az objektumot a dokumentum 15. bájtjában találhatjuk meg. Ha ezt ellenőrizzük, a következőket találjuk:

Vegye figyelembe, hogy az objektum 1 0 obj-val kezdődik és endobj-vel végződik. Ez egy újabb megerősítése annak, hogy valójában az 1-es tárggyal van dolgunk. Ez a szótár azt mondja nekünk, hogy a 3. objektumban találhatunk dokumentumoldalakat:

Ez egy szótár / Oldalak, és azt mondja nekünk, hogy ebben a dokumentumban egy oldal van (bejegyzés / Szám). A / Kids bejegyzés általában egy tömb, oldalanként egy objektumhivatkozással. Várhatóan megtaláljuk az első oldalt a 4. objektumban:

Ez a szótár több érdekes bejegyzést tartalmaz:

  • / MediaBox: az oldal fizikai méretei (jelen esetben egy A4-es oldal).

  • / Tartalom: hivatkozás a (általában tömörített) PDF tartalomnyilatkozatok adatfolyamára.

  • / Erőforrások: hivatkozás egy szótárra, amely tartalmazza az oldal megjelenítéséhez használt összes erőforrást (betűtípusok, képek stb.).

Nézzük meg az 5. objektumot, hogy lássuk, mi is jelenik meg valójában ezen az oldalon:

Mint korábban említettük, ez a tartalomfolyam tömörített. A / Szűrés írásával meghatározhatja, hogy melyik tömörítési módszert használta. Ha kicsomagoljuk az 5-ös objektumot, akkor a tényleges tartalom utasításokat kell kapnunk:

Végül azon a szinten vagyunk, ahol meg tudjuk dekódolni a tartalmat. Minden sor argumentumokból áll, amelyeket az operátor követ. Menjünk gyorsan az operátorokon:

  • q: az aktuális grafikus állapot mentése (verembe tolva);

  • BT: kezdőszöveg;

  • 0 0 0 rg: az aktuális körvonalszín beállítása (0,0,0) rgb-re. Ez fekete;

  • / F1 1 Tf: állítsa az aktuális betűtípust / F1-re (ez a forrásszótár korábban említett bejegyzése), a betűméretet pedig 1-re.

  • húsz.000000 0 0 20.000 000 60.000 000 738.000000 Tm: a szöveges mátrix beállítása, amelyhez külön kézikönyv szükséges. Elég azt mondani, hogy ez a mátrix beállítja a betűméretet és a szöveg helyzetét. Itt méretezzük a betűtípust 20-as méretre, és a kurzort a szöveg megrajzolásához 60 738-ra állítjuk. A PDF koordinátarendszer az oldal bal alsó sarkában kezdődik. Tehát a 60 738 valahol az oldal bal felső részén található (tekintve, hogy az oldal magassága 842 egység).

  • (Hello world) Tj: a PDF-szintaxis karakterláncai el vannak választva (és). Ez a parancs arra utasítja a PDF-olvasót, hogy jelenítse meg a „Hello world” karakterláncot azon a helyen, amelyet korábban a szövegmátrix segítségével megadtunk, a parancsokban korábban megadott betűtípussal, mérettel és színnel.

  • ET: a szöveg vége.

  • K: A grafikus állapot kiemelése a veremből (ezzel visszaállítva a grafikus állapotot).

Egyéb pText elrendezési elemek hozzáadása az oldalakhoz

A pText a LayoutElement objektumok széles választékával érkezik. Az előző példában röviden megvizsgáltuk a bekezdést. De vannak más elemek is, mint az UnorderedList, OrderedList, Image, Shape, Vonalkód és Table. Hozzunk létre egy kicsit bonyolultabb táblázatot és vonalkódos példát. A táblák TableCells-ből állnak, amelyeket hozzáadunk a Table példányhoz. A vonalkód sokféle vonalkód egyike lehet – QR-kódot fogunk használni:

Néhány megvalósítási részlet:

  • A pText számos színmodellt támogat, beleértve az RGBColor, HexColor, X11Color és HSVColor.

  • Hozzáadhat LayoutElement objektumokat közvetlenül a Table objektumhoz, de becsomagolhatja őket egy TableCell objektumba is, ami további lehetőségeket ad, mint például a col_span és a row_span, vagy ebben az esetben a background_color.

  • Ha a font, font_size vagy font_color nincs megadva, a bekezdés alapértelmezés szerint Helvetica, 12-es méret, fekete.

A kód egy ilyen dokumentumot generál:

Következtetés

Ebben az oktatóanyagban bemutattuk a pText-et, a PDF-fájlok olvasására, írására és kezelésére szolgáló könyvtárat. Lefedtük a kulcsfontosságú osztályokat, például a dokumentumot és az oldalt, valamint néhány elemet, például a bekezdést, a vonalkódot és az oldalelrendezést. Végül több különböző tartalmú PDF-et készítettünk, és azt is teszteltük, hogy a PDF-ek hogyan tárolják az adatokat a motorháztető alatt.

A PDF dokumentum kellemes a szemnek és kellően kényelmes az elektronikus dokumentumfolyamatban történő felhasználáshoz, különféle számlák és jelentések készítéséhez, különösen nagy szervezetekben és azok belső hálózatában, ezért nagy és összetett webes projektek fejlesztése gyakran PDF generálással járnak együtt. Ha érdekel az összetett webes projektekkel való munka, és nem szeretne választani a háttér vagy a front-end között, akkor alaposabban megtekintheti a Fullstack Python fejlesztői tanfolyamot.

Tudja meg, hogyan léphet fel más szakterületeken, vagy sajátítsa el azokat a semmiből:

Комментарии закрыты, но обратные ссылки и pingbacks ещё работают.