2011-07-13 13 views
7

के साथ आयातित पीडीएफ टेम्पलेट के आकार के साथ समस्या मैं एक जटिल परिस्थिति में फंस गया हूं। मैं ग्रीटिंग कार्ड के लिए एक PHP वेब ऐप्स पर काम कर रहा हूं।एफपीडीआई + टीसीपीडीएफ

इसके लिए, मैं कुछ लिनक्स टूल और टीसीपीडीएफ और एफपीडीआई का उपयोग कर रहा हूं। मुझे बताएं कि यह सब कैसे काम करता है:

4 पेज ग्रीटिंग कार्ड टेम्पलेट पीडीएफ फ़ाइल है। यह कस्टम आकार 5x7 इंच 300 डीपीआई पीडीएफ फाइल है। मैं TCPDF में कस्टम आकार को शामिल किया है और साथ ही

case 'STANDARD_CARD'  : {$pf = array(1500.00,2100.00);break;} 

मुझे क्या करना है, मैं का उपयोग करें:

pdftk templateX.pdf burst output page_%2d.pdf 

मंदिर के प्रत्येक पृष्ठ अलग करने के लिए।

अब मैं का उपयोग करें:

$pdf = new FPDI($cardDetails['ORIENTATION'],"mm",$cardDetails['SIZE']);  


    //set source file for 
    $pdf->setSourceFile($pdfFile); 
    $templateIndex = $pdf->importPage(1); 
    $pdf->AddPage($cardDetails['ORIENTATION'],$cardDetails['SIZE']); 
    $pdf->useTemplate($templateIndex,0,0); 

अन्य चीजों की तरह, संदेश मुद्रण छवियों लेखन। (5x7 इंच) Original pdf file संशोधित पीडीएफ और कुछ पीडीएफ संचालन: (29x20 इंच) modified PDF

अब

और अंत में फ़ाइल का उपयोग कर बचाने के लिए:

$pdf->output("file_name.pdf","F"); 

मूल पीडीएफ फाइल (केवल 1 पेज) मुझे जो आउटपुट मिल रहा है वह 5x7 पीडीएफ नहीं है, यह 2 9 x 20 इंच फ़ाइल है और यह मेरी गणना और पीडीएफ को भी नष्ट कर रहा है।

कृपया मुझे बताओ कि मैं गलत क्या कर रहा हूँ ...

+0

'$ cardDetails' की सामग्री क्या है? – Orbling

+0

$ कार्ड विवरण में कार्ड का आकार और अभिविन्यास 'कोड' $ कार्ड विवरण ['अभिविन्यास'] = 'एल' होता है; $ कार्ड विवरण ['SIZE'] = 'STANDARD_CARD'; 'code' STANDARD_CARD की आकार TCPDF कक्षा में अशुद्ध है के रूप में ' code' मामले 'STANDARD_CARD': {$ पीएफ = सरणी (360.00,504.00); तोड़;} 'code' अच्छी तरह से, मेरे पास मेरे समस्या हल हो गई (कुछ हद तक, 100% नहीं) मैं पीडीएफ के आकार को पीडीएफ के आकार में सेट करना चाहता था, आयातित पीडीएफ 5.27 एक्स 7.1 है। फिर तदनुसार आकार निर्धारित करें। लेकिन, इसमें कोई भाग्य नहीं है, बस कुछ व्यावहारिक समाधान, 100% नहीं, लेकिन, मेरे लिए काम कर रहा है ... – Ravish

उत्तर

18

हाय रवीश,

मैं भी इस मुद्दे का सामना करना पड़ा। असल में मेरा परिदृश्य यह है। मेरे पास एक मूल फ़ाइल है जो कानूनी आकार (8.5 मिमी x 14 मिमी मिमी) है। जब मैं आपके द्वारा किए गए एफपीडीआई आउटपुट का उपयोग करके इसे प्रदर्शित करता हूं, तो यह केवल अक्षर आकार (8.5 मिमी x 11 मिमी) प्रदर्शित करता है। तो परिणाम यह है: क्रॉप पीडीएफ फाइल।

मैंने कई googling बनाये और विभिन्न पदों से भी कई जवाब मिल गए। यहां पाया गया सबसे प्रासंगिक समाधान यहां दिया गया है।

पहले नीचे समारोह कोड के इस टुकड़े है: useTemplate

$this->useTemplate($templateIndex, null, null, 0, 0, true); 

आम तौर पर, कुछ डेवलपर्स अंतिम तर्क के लिए इस रूप में सही निर्धारित किया है। हां, यह सही है अगर आप चौड़ाई और लंबाई निर्धारित नहीं करते हैं।हालांकि, मैं इस बात पर जोर देना चाहूंगा कि चौथा और 5 वां तर्क आयातित पीडीएफ की चौड़ाई और लंबाई निर्दिष्ट करता है। इसलिए, यदि आप आयातित दस्तावेज़ के वास्तविक आकार को अपनाएंगे या प्राप्त करेंगे, तो अंतिम तर्क FALSE पर सेट करें क्योंकि यह बताएगा कि यह आपके द्वारा निर्धारित वास्तविक या विशिष्ट आकार लेगा।

कृपया ले इस नमूने कोड मैंने किया था: इस कोड के साथ

$pdf = new FPDI(); 
$pdf -> setSourceFile('birform2316.pdf'); 
$tplIdx = $pdf -> importPage(1); 
$size = $pdf->getTemplateSize($tplIdx); 
$pdf -> AddPage(); 
$pdf ->useTemplate($tplIdx, null, null, $size['w'], 310, FALSE); 
$pdf -> SetFont('Arial'); 
$pdf -> SetTextColor(0, 0, 0); 
$pdf -> SetXY(18, 174); 
$pdf -> Write(0, $employer_address); 
$pdf -> Output('myOwn.pdf', 'D'); 

, मैं आयात की गई फ़ाइल है कि मैं सेट कांट-छांट के बिना एक नया पीडीएफ का उत्पादन किया है। मतलब, टेम्पलेट के सभी विवरण (मूल फ़ाइल) प्रदर्शित किया गया है।

कृपया नोट भी ले कि मैं कुछ मनाया मेरी पीडीएफ के आकार सेट करते समय:

सबसे पहले, मेरी फाइल 215.6mm की एक मूल चौड़ाई है और इसकी लंबाई 350.9mm है। अब जब मैं कार्यों का उपयोग कर getTemplateSize और useTemplate मेरी पीडीएफ के आकार को निर्धारित जैसे:

$size = $pdf->getTemplateSize($tplIdx); 
$pdf ->useTemplate($tplIdx, null, null, $size['w'], $size['h'],FALSE); 

या बस:

$pdf ->useTemplate($tplIdx, null, null, 215.6, 350.9,FALSE); 

परिणाम है, मेरी नई पीडीएफ फाइल काट-छांट की है नीचे और मुझे नहीं पता क्यों।

इस अवलोकन के साथ, मैंने कारण जानने के लिए कई परीक्षण किए। और नतीजा यह हुआ कि एफपीडीआई का उपयोग करके पीडीएफ फाइल बनाने में लंबाई की सीमा है। जैसा कि आप उपरोक्त मेरे कोड में देख सकते हैं, मैंने अपनी फ़ाइल की वास्तविक लंबाई का उपयोग नहीं किया। 350.9 मिमी का उपयोग करने के बजाय जिसे $size[h'] से लिया जा सकता है, मैंने इसका उपयोग नहीं किया क्योंकि यह एक फसल वाली फाइल देगा। मैंने बस इसके पास एक संख्यात्मक मूल्य और वांछित परिणाम उत्पन्न करने के लिए वास्तविक चौड़ाई पारित की।

$pdf->useTemplate($tplIdx, null, null, $size['w'], 310, false); 

वैसे, 310 मिमी (लम्बाई) सबसे बड़ा संख्यात्मक मान मैं एक नया पीडीएफ फाइल है जो काटी नहीं का उत्पादन किया जाता है।

मुझे आशा है कि मैंने एफपीडीआई का उपयोग करके सभी डेवलपर्स को कुछ इनपुट दिए हैं जो क्रॉप्ड पीडीएफ परिणामों की समस्या का सामना करते हैं।

सभी को धन्यवाद ...

लेवी पामर

+0

पृष्ठों को फसल का कारण यह है कि एफपीडीआई/एफपीडीएफ 'पृष्ठ आकार' सरणी में कोई प्रविष्टि तब तक बनाई जाती है जब तक न तो पृष्ठ का अभिविन्यास और न ही उसका आकार बदलता है (देखें [स्रोत कोड] (https://github.com/hanneskod/ fpdi/ब्लॉब/c4fa110b8a8a6940616ec1a1ef323eafd8601664/src/FPDI.php # L137))। चूंकि '$ आकार' सरणी में फ्लोट मान होते हैं, इसलिए यह चौड़ाई या ऊंचाई के लिए मैन्युअल रूप से 'उपयोग टेम्पलेट()' के लिए एक पूर्णांक पास करने के लिए काम करता है, क्योंकि फ्लोट और int के बीच का अंतर एक बदले गए पृष्ठ आकार के रूप में पहचाना जाता है और इसलिए एक प्रविष्टि 'पेजसाइज' में जोड़ा गया है। – Mennny

8

के बजाय

$pdf->useTemplate($templateIndex,0,0); 

उपयोग

$this->useTemplate($templateIndex, null, null, 0, 0, true); 

अंतिम तर्क $adjustPageSize डिफ़ॉल्ट रूप से 'गलत' पर सेट है।

+1

इसके लिए धन्यवाद! मुझे भी यही समस्या आ रही थी। जहां आपके पास नल हैं, मेरे पास 0 थी। उन्हें नल के साथ बदलकर चाल थी! – Chemdream

संबंधित मुद्दे