PerfectVector
Yazan Irene Kim7 dk okuma

fpdf2 ile SVG: Python PDF'nizde yolları koruyun

fpdf2 ile Python PDF'nize SVG logo yerleştirin, boyutunu ayarlayın, kaydedilen yolları inceleyin ve raster seçeneğine geçmeden eksik metin veya şekilleri teşhis edin.

Bu sayfada

Bir SVG'yi fpdf2 belgesine yerleştirmek için pdf.image("logo.svg", x=20, y=20, w=60) kullanın. Desteklenen SVG geometrisi PDF çizim yollarına dönüşür. Önce logoyu PNG olarak oluşturmanız gerekmez. Resmî SVG belgeleri bu doğrudan yöntemi ve sınırlarını açıklar.

Bu dosya biçimiyle yeni tanışıyorsanız SVG dosyası rehberi yolları ve görüntü kapsayıcılarını açıklar. Başarılı bir içe aktarma işleminin ardından da kontrol yapmanız gerekir. Dosya gömülü pikseller içerebilir, içe aktarıcının yeniden üretemediği özelliklere dayanabilir veya çizimin çevresinde boşluk bulunabilir. Bu rehberde küçük, özgün bir logo oluşturuyor, onu belirli bir boyutta yerleştiriyor ve ortaya çıkan PDF'yi kontrol ediyoruz. Elinizde özgün bir vektör ana dosyası varsa onu koruyun; PNG veya JPG'den çizimi geri elde etmek, bu işlemlerden önce gerçekleştirilen ayrı bir adımdır.

Bilinen bir SVG ve sabitlenmiş fpdf2 sürümüyle başlayın

Örneği Python 3.12 ve fpdf2 2.8.8 ile çalıştırdık. Bu, test edilen sürümdür; sonraki tüm sürümlerin aynı davranacağı anlamına gelmez. Paketin resmî PyPI sayfası kurulumu fpdf2 dağıtım adı altında açıklar; Python'da içe aktarma adı fpdf şeklindedir.

Örneğin başka bir projenin paketlerinden bağımsız olması için yeni bir ortam kullanın:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install "fpdf2==2.8.8"

Windows'ta ortamı bunun yerine .venv\Scripts\activate ile etkinleştirin. Bu özgün dikdörtgen amblemi logo.svg adıyla kaydedin:

<svg xmlns="http://www.w3.org/2000/svg"
     width="120" height="80" viewBox="0 0 120 80">
  <path fill="#137d89" fill-rule="evenodd"
        d="M10 10H110V70H10Z M30 25H90V55H30Z"/>
</svg>

İki kapalı alt yol vardır. Dış dikdörtgen doldurulur; iç dikdörtgen ise evenodd dolgu kuralı sayesinde bir açıklığa dönüşür. Yazı tipi, görüntü veya efekt kullanılmadığı için ilk testte sorunları teşhis etmek kolaydır.

Aşağıdaki kodu SVG'nin yanına place_logo.py adıyla kaydedin:

from pathlib import Path
from fpdf import FPDF
 
folder = Path(__file__).resolve().parent
pdf = FPDF(unit="mm")
pdf.add_page()
pdf.image(str(folder / "logo.svg"), x=20, y=20, w=60)
pdf.output(str(folder / "logo.pdf"))

python place_logo.py komutunu çalıştırın. logo.pdf dosyasını açın ve sol üst köşeye yakın, ortasından sayfanın göründüğü turkuaz bir dikdörtgen çerçeve olup olmadığını kontrol edin.

SVG tuvalini boyalı logodan ayrı değerlendirin

Kaynak tuvalin oranı 3:2'dir: 120 birim genişliğinde ve 80 birim yüksekliğindedir. w=60 değerinde bu örnek 60 × 40 mm'lik bir tuval kaplar. Çizim, tuvalin kenarından 10 kaynak birim içeride başlar; dolayısıyla boyalı dış dikdörtgen 50 × 30 mm boyutundadır ve sayfada 25, 25 mm konumundan başlar. Bu değerler, örnek dosyanın koordinatlarından ve ölçeğinden hesaplanmıştır.

Bu kenar boşluğu, renkli şekli ölçmekle yerleştirme tuvalini ölçmenin neden aynı sonucu vermediğini açıklar. Bir müşterinin logosu çok küçük görünüyorsa PDF'deki genişliğini artırmadan önce kaynak dosyanın kenar boşluklarını inceleyin.

fpdf2 görüntü rehberi boyutların nasıl ele alındığını ve belirlenen bir kutu içinde oranları koruma seçeneğini açıklar. Bu ilk örnekte yalnızca genişliği ayarlayın. Daha sonra her iki boyutu da verirseniz tüm kaynakların aynı oranlara sahip olacağını varsaymak yerine istediğiniz sığdırma davranışını özellikle test edin.

Daha büyük tuvali içindeki dikdörtgen logoyu ve ardından bir belge sayfasına yerleştirilmesini gösteren çizim
Yerleştirme tuvali, çizimin çevresindeki boş alanı da içerir. Bu çizim iki sınırı açıklar; gerçek boyutlarınızı doğrulamak için dışa aktarılan PDF'yi inceleyin.

Kaydedilen PDF'nin yollar içerdiğini doğrulayın

PDF önizlemesi görünümü gösterir, ancak bir görüntü düşük bir yakınlaştırma düzeyinde keskin görünebilir. Dosyayı da inceleyin. Bu bağımsız örneği pypdf 6.1.1 ile kontrol ettik:

python -m pip install "pypdf==6.1.1"
from pathlib import Path
from pypdf import PdfReader
 
folder = Path(__file__).resolve().parent
page = PdfReader(folder / "logo.pdf").pages[0]
print("Page images:", len(page.images))
print(page.get_contents().get_data().decode("latin-1"))

Çıktımız sıfır sayfa görüntüsü bildirdi. Çözümlenen içerikte, çizim noktasını taşıma, çizgi çizme ve yolu kapatma işlemleriyle ifade edilen dikdörtgen konturları ve ardından tek-çift dolgu işlemi olan f* bulunuyordu. Görüntülenen açıklıkla birlikte bu bulgular, gömülü görüntü içermeyen bu örneğin kaydedilen PDF'de çizim geometrisi olarak kaldığı sonucunu destekler.

Kontrol etmeden bu sonucu başka bir girdiye uygulamayın. Bir raporun başka bölümlerinde fotoğraflar bulunması normaldir; SVG'nin kendisi de bir görüntü içerebilir. Gömülü raster görüntü teşhisi, yollardan oluşan bir logo ile SVG işaretlemesinin içine yerleştirilmiş bir raster görüntüyü ayırt etmenize yardımcı olur. Daha karmaşık PDF'ler çizim içeriğini başvurulan nesnelerin içine de yerleştirebilir. Bu nedenle yukarıdaki kısa betik, bu bağımsız örnek için bir başlangıç noktasıdır; her PDF'ye uygulanabilecek kapsamlı bir denetim değildir.

Eksik çizimi kurulu sürümünüzle teşhis edin

Önce yukarıdaki küçük amblemi çalıştırın. Bu örnek çalışıyor ama gerçek kullanımda logonuz başarısız oluyorsa sorunu kaynak çizime veya kullandığı özelliklere daraltmış olursunuz. Özgün dosyayı koruyun ve bir kopyasını her seferinde tek bir özelliği sadeleştirerek düzenleyin.

Belirtiİlk kontrolYararlı sonraki adım
Sayfa boşDosya yolu, yerleşim, boyutlar ve içe aktarıcı uyarılarıBasit amblemi açıkça belirlenmiş koordinatlarda test edin
Logo çok küçük görünüyorKaynak tuvalin içindeki boş alanBoyalı sınırları viewBox ile karşılaştırın
Orta kısım doluyorBileşik yol yapısı ve dolgu kuralıDüzenlerken veya dışa aktarırken açıklığı koruyun
Yazılar eksik veya farklıKurulu sürüm, yazı tipi seçimi ve metin özellikleriAyrı bir metin örneği test edin veya logonun onaylanmış, kontura dönüştürülmüş yazılarını kullanın
Bir süsleme kayboluyorDesteklenmeyen SVG özellikleriBir kopyadan bu özelliği kaldırıp sonucu karşılaştırın
PDF keskin ama piksel içeriyor olabilirKaynakta ve PDF'de gömülü görüntülerÖnizlemenin yanı sıra dosya yapısını da inceleyin

Eski yanıtları burada dikkatle değerlendirmek gerekir. Basit bir <text> öğesi içeren ayrı 2.8.8 denememiz, çıkarılabilir HELLO metni üretti; temel bir doğrusal gradyan dikdörtgeni de başarıyla dışa aktarıldı. Bu sınırlı kontroller, SVG metinleri, yazı tipleri, CSS veya gradyanlarla tam uyumluluğu kanıtlamaz. Ancak tüm SVG metinlerinin veya tüm gradyanların desteklenmediğini söyleyen eski bir ifadenin sizi neden gereksiz rasterleştirmeye yönlendirebileceğini gösterir.

Güncel SVG özellik listesi hâlâ işaretçiler, desenler, yol üzerindeki metin ve karmaşık veya haricî CSS gibi sınırlamaları belirtir. Teşhis sırasında içe aktarıcı uyarılarını görünür tutun ve kaydedilen sayfayı kaynakla karşılaştırın. Tek başına temiz bir günlük, tüm görsel özelliklerin korunduğunun kanıtı değildir.

Sonuç gerektiriyorsa raster seçeneğini kullanın

Seçtiğiniz işlem hattında bir efekt yeniden üretilemiyorsa görünümünü korumanın geometriyi korumaktan daha önemli olup olmadığına karar verin. Belgenin o kısmında işlenmiş bir PNG kullanmak uygun olabilir. Son fiziksel boyutunda kontrol edin ve çıktıyı doğru biçimde tanımlayın; raster olarak işlenmiş bir görüntüyü gömmek özgün yolları korumaz.

Bir marka logosu için onaylanmış, kontura dönüştürülmüş yazılar veya daha basit bir vektör dışa aktarımı daha iyi bir seçim olabilir. Düzenlenebilir belge metni için yazı tipi ve metin yönetimini belge iş akışında tutun. Bir cümlenin ekran görüntüsündeki kenarları izleyerek vektörleştirmek, tipografisini geri getirmez veya onu seçilebilir metne dönüştürmez.

Mevcut PDF kodunuz başka bir Python kütüphanesi kullanıyorsa ReportLab SVG iş akışının kendine özgü içe aktarma ve boyut kontrolleri vardır. Kütüphane değiştirmek ayrı bir uygulama kararıdır; bu nedenle belgeyi yeniden oluşturmadan önce gerçekten sorun çıkaran özelliği test edin.

Yalnızca raster biçimindeki çizimi PDF adımından önce hazırlayın

Elinizde yalnızca PNG veya JPG logo kaldığında, PerfectVector'ın logo vektörleştirme aracı fpdf2 ile içe aktarmadan önce bir SVG adayı hazırlayabilir. Konturları, küçük açıklıkları ve renk bölgelerini kaynakla karşılaştırın; ardından adayı aynı yerleştirme ve PDF kontrollerinden geçirin.

Varsa özgün vektörü kullanın. Marka yazılarının birebir korunması için yeniden yazma veya elle düzeltme gerekebilir; logo vektörleştirme rehberi bu seçimi açıklar. Bu makaledeki amblem, elle yazılmış özgün bir SVG'dir; ölçülmüş bir PerfectVector dönüşüm sonucu değildir. PerfectVector çizimi hazırlar, fpdf2 ise PDF içindeki yerleşimini kontrol eder.

Sık sorulan sorular

fpdf2 bir SVG'yi doğrudan ekleyebilir mi? Evet. SVG dosyasını image metoduna iletin ve yerleşimini ve boyutunu ayarlayın. Desteklenen geometri PDF yollarına dönüşebilir; ancak kendi çiziminiz için dışa aktarılan dosyayı ve görünümünü inceleyin.

fpdf2 SVG metnini destekliyor mu? Temel metin denememiz fpdf2 2.8.8 ile çalıştı. Bu, her yazı tipinin, yerleşim özelliğinin veya yol üzerindeki metin yapısının çalışacağını garanti etmez. Kurulu sürümünüzü kontrol edin ve belgenizin gerçekten kullandığı yazıları test edin.

60 mm'lik bir görüntü neden 60 mm'den dar görünüyor? İstenen boyut yerleştirme tuvaline uygulanır. SVG'nin içindeki boş kenar alanları bu tuvalin parçası olarak kalır; dolayısıyla boyalı şekil daha dar olabilir.

PNG logomu eklemeden önce SVG'ye dönüştürmeli miyim? Yalnızca düzenlenebilir yollara ihtiyacınız varsa ve çizim, kenarları izlenerek vektörleştirmeye uygunsa. Fotoğrafları raster görüntü olarak tutun; varsa özgün vektör logoyu kullanın. Kenarları izlenerek oluşturulan adayı eklemeden önce kontrol edin.

Kaynaklar

  1. fpdf2 — SVG — Doğrudan SVG eklemeyi, özellik desteğini ve uyarı günlüklerini belgeler.
  2. fpdf2 — Images — Görüntü yerleşimini, boyutları ve en-boy oranına göre sığdırmayı açıklar.
  3. fpdf2 — PyPI package — Kurulabilir dağıtımı ve Python'daki içe aktarma adlandırmasını tanımlar.

Elinizde yalnızca raster logo mu var? PerfectVector ile bir SVG adayı hazırlayın, konturlarını ve açıklıklarını inceleyin, ardından fpdf2 ile gereken boyutta yerleştirip kaydedilen PDF'yi kontrol edin.

Bloga daha fazlası

Düzenlemesi daha kolay,
daha temiz bir SVG ile başlayın