2013-10-18 29 views
8

PDF belgeleri oluşturmak için bir TCPDF kullanıyorum ve üstbilgiye bir logo eklemeye çalışıyorum, ancak görüntü kalitesiyle ve daha sonra da ölçekleme ile öğrendiğim gibi bir sorun yaşıyorum.TCPDF görüntü kalitesi sorunları

TCPDF ile PDF belgelerine eklenen görüntüler kalite kayıplarından ve boyut sorunlarından muzdariptir. Boyut için o kadar çok umrumda değil çünkü onu değiştirebilirim, ancak görüntü kalitesini geri yükleyemiyorum. Ben denedim ne

: Ben de HTML koduna başlığını dönüştürdük

  • TCPDF scaling and quality issue
  • tcpdf: poor image quality
  • , aynı kalitede bozulma occurrs.
  • $pdf->Image() için diğer tüm seçenekleri kaldırıldı ve her şeyi varsayılan olarak bıraktı - görüntü kalitesi sorunları olan (muhtemelen) orijinal boyutuna yükseltilmiş görüntü .

budur ben bir resim eklemek için kullanıyorum kod:

$this->Image("../images/logo.jpg", 8, 10, 35, '', 'JPG', '', 'T', false, 0, '', false, false, 0, false, false, false); 

Ve bu createPDF() fonksiyonun başlangıcıdır:

$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 
$pdf->SetCreator('PHP TC-PDF Generator'); 
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); 
$pdf->SetMargins(8, 50, 8); // page margins 
$pdf->SetAutoPageBreak(TRUE, 30); 
$pdf->setImageScale(1); 
$pdf->setFontSubsetting(true); 
$pdf->SetFont('helvetica', '', 12, '', true); 
$pdf->AddPage(); 
$pdf->setTextShadow(array('enabled'=>false)); 

Başka önerileri?

Alternatif: HTML tablolarını destekliyorsa ve daha iyi kalitede görüntü ekleyebiliyorsa, başka bir PDF üreteci ile TCPDF'yi değiştirmeye hazırım.

Yardımınız büyük memnuniyetle karşılanacaktır.

+0

TCPDF'nin bunu yaptığını gerçekten şaşırdım. Merak ediyorum, JPG'yi PNG'ye dönüştürürseniz ve JPG yerine PNG dosyasını eklerseniz ne olur? – JamesG

+0

Aynı kalitede bozulma meydana gelir. –

+0

GD kitaplığı ve/veya imagick uzantıları etkin mi? – JamesG

cevap

7

Resmi büyütmek için, tanımlanan genişliğini artırın. Varsayılan mm ünitelerini kullanıyorsunuz, bu yüzden 35 mm'lik bir genişlik belirliyorsunuz. Daha büyük bir görüntü istiyorsanız, bu sayıyı istediğiniz genişliğe getirin.

Daha kaliteli bir görüntü için, daha büyük bir resimle başlayın. Deneme yapmanız gerekebilir, ancak 1.53 kat daha büyük deneyin. Eğer çok büyük yaparsanız, ölçeklendiğinde dalgalı görünebilir.

PNG kullanırım. PNG formatı, sizin gibi metin ve düz renklerle görüntülere daha uygundur. Ancak, JPG'yi kullanmak istiyorsanız, , görüntü kalitesini SetJPEGQuality() yöntemiyle artırmayı deneyin. Ben varsayılan bir boyut, daha sonra görüntü ölçek değeri kullanılmaz belirtirseniz

Ölçekleme 75.

olduğuna inanıyoruz. Boyutu açıkça belirtmek istemiyorsanız, ölçek faktörünü setImageScale() yöntemiyle uygun şekilde ayarlayın. Böylece, görüntünüzü istediğiniz boyuttan 1,53 kat büyük yaparsanız, ölçeği 1,53 olarak ayarlayın.

Not: setImageScale() için belgelerdeki açıklama yanıltıcı, IMO'dur. Pikselleri kullanıcı birimlerine dönüştürmekle ilgili hiçbir şey yok. Bu dönüşüm, komut dosyası tarafından dahili olarak ele alınır.

Yakınlaştırma Düzeyi

görüntü olursa olsun yaptıklarınızdan tüm yakınlaştırma seviyelerinde iyi bakacağız unutmayın. İlk yakınlaştırma seviyesini SetDisplayMode() yöntemiyle ayarlayabilirsiniz. TCPDF varsayılan olarak sayfa genişliğine, en modern masaüstü bilgisayarlarda ve dizüstü bilgisayarlarda% 100'den fazla olacak. Image() yönteme geçirilen

Resim Boyutu

boyutları tanımlanan kullanıcı birimleri (varsayılan mm) kullanır. Dpi ile ppi arasında bazı teknik farklılıklar olsa da, sadece baskı için geçerlidir. Bizim amaçlarımız için çok

: 40 mm genişliğinde bir görüntü istiyorsanız

72 pixels = 72 points = 1 inch = 2.54 cm = 25.4 mm 

nedenle, 173 piksel genişliğinde bir görüntü oluşturmayı deneyin. Görüntü kalitesi gerçekten önemli ise

40 mm * 72 px/25.4 mm * 1.53 scale factor 

Vektör Görüntüler

, vektör biçimlerinden birini kullanmayı düşünmelisiniz. ImageSvg() veya ImageEps() yöntemleri için TCPDF kılavuzunu kontrol edin.


Dipnotlar

  1. Ben orijinal görüntü istenen boyuttan daha 1.53 kat daha büyük olduğu zaman% 100 zumda, kalite kayda değer bir iyileşme olduğunu tespit ettik. İlk kez TCPDF ve görüntü kalitesi ile uğraşmaya başladığımda, sayısız kez 1.53 numaraya rastladım. Ancak, bu rakamın nereden geldiği ile ilgili hiçbir açıklama yapılmadı. Sonunda bunu anladığımı düşünüyorum. Adobe Reader, varsayılan olarak 110 ppi çözünürlük kullanır ve TCPDF, 72 dpi olan bir belge oluşturur. 110/72 = 1.53
1

Aynı sorunu yaşadım ve önceki önerilerin hiçbiri benim için de işe yaramadı. Benim kurtuluşum THIS idi.

enter image description here

1) Bir PDF logosu sürüm 1.4 (güncel PDF sürümleri are not supported) gerekir: gizli Google logosunu kullanarak sonucunu görmek, şablon olarak pdf logosunu kullanmaktır. Bunu yapmak için yüksek kaliteli png, jpeg, etc logosunu seçin ve this site'u kullanarak PDF 1.4'e dönüştürün. 2)Download FPDI library.

3)

ilk bağlantıdan talimatları uygulayın ve burada taklit ediyorum o:

<?php 
// just require TCPDF instead of FPDF 
require_once('tcpdf.php'); 
require_once('fpdi.php'); 

class PDF extends FPDI 
{ 
/** 
* "Remembers" the template id of the imported page 
*/ 
var $_tplIdx; 

/** 
* Draw an imported PDF logo on every page 
*/ 
function Header() 
{ 
    if (is_null($this->_tplIdx)) { 
     $this->setSourceFile("logo.pdf"); 
     $this->_tplIdx = $this->importPage(1); 
    } 
    $size = $this->useTemplate($this->_tplIdx, 130, 5, 60); 

    $this->SetFont('freesans', 'B', 20); 
    $this->SetTextColor(0); 
    $this->SetXY(PDF_MARGIN_LEFT, 5); 
    $this->Cell(0, $size['h'], 'TCPDF and FPDI'); 
} 

function Footer() 
{ 
    // emtpy method body 
} 
} 

// initiate PDF 
$pdf = new PDF(); 
$pdf->SetMargins(PDF_MARGIN_LEFT, 40, PDF_MARGIN_RIGHT); 
$pdf->SetAutoPageBreak(true, 40); 
$pdf->setFontSubsetting(false); 

// add a page 
$pdf->AddPage(); 

// get external file content 
$utf8text = file_get_contents('examples/data/utf8test.txt', true); 

$pdf->SetFont('freeserif', '', 12); 
// now write some text above the imported page 
$pdf->Write(5, $utf8text); 

$pdf->Output(); 
+0

Girişiniz için teşekkür ederiz. O zamanlar bu konuyu nasıl sıraladığımı bilmiyorum ama daha sonra TCPDF'den mPDF'ye geçtim. Çok daha hızlıdır ve HTML ve CSS'yi TCPDF'den çok daha iyi işler. Hızla ilgili bir örnek olarak: Tabloda birkaç yüz satırlık bir raporum vardı, TCPDF'nin PDF oluşturmak için bir dakikadan fazla bir süre gerekiyordu, mPDF 10 saniyenin altındaydı. –

+0

@KristjanO. Bilmek güzel. MPDF, herhangi bir şansla içeriği hücrenin ortasında hizalayabilir mi? Çünkü TCPDF sadece üstte hizalanabilir. Bu durumda, belki de kütüphaneleri değiştiriyorum ... – carla

+0

Geç yanıtım için özür dilerim. Dürüst olmak gerekirse, şu ana kadar buna hiç ihtiyacım olmadı. Google'a sahip olmalısın. –

0

Eh, bu eski bir soru olacak ama durumda birileri gibi bu çevrede tökezledi Ben PNG görüntülerini 150 dpi ile kullanmanızı öneriyorum. Bunu TCPDF ile kişisel deneyimimden söyleyebilirim. Genelde arka plan görüntüsü olan ve PNG-150dpi'nin güzel bir şekilde uyumu için belgeler istemekteyim.Daha büyük bir dosya elde edersiniz, ancak benim durumumda, baskı kalitesi daha önemlidir, bu nedenle dosya boyutu bir sorun değildir.