2017-01-04 7 views
8

मैं जावास्क्रिप्ट के माध्यम से पीडीएफ उत्पन्न करने के लिए PDFKit.org का उपयोग कर रहा हूं।क्या पीडीएफकिट में टेक्स्ट घुमाने के लिए कोई चाल है?

प्रलेखन बहुत आत्म-व्याख्यात्मक है, लेकिन मुझे एक अनसुलझा समस्या का सामना करना पड़ रहा है, और मुझे लगता है कि कुछ स्टैक ओवरफ्लो सदस्यों को पहले से ही यह करने के लिए एक चाल मिल सकती है।

मुझे किसी बिंदु पर एक पाठ घुमाने के लिए है, और दस्तावेज़ीकरण केवल एक आकार को घुमाए जाने की व्याख्या करता है (जैसे rect())।

मैंने पहले से ही कई चीजों की कोशिश की है, लेकिन उनमें से कोई भी अब तक काम नहीं करता है।

तो मैं कोड को ट्वीव करके इसे घुमाए जाने का कोई तरीका ढूंढ रहा हूं, या शायद आप में से कुछ मुझे दस्तावेज का एक हिस्सा दिखा सकते हैं जो मुझे याद आ सकता है?

+0

पढ़ने के बाद [उदाहरणों का वह हिस्सा] (http://pdfkit.org/docs/vector.html), मुझे यह पूछना है: आपके लिए काम क्यों नहीं घुमाया गया? – usr2564301

+1

असल में, 'घुमाएं()' काम किया, लेकिन गायब हिस्सा 'save()' और 'restore() 'फ़ंक्शंस था, और यह ओलिवियर लांस उत्तर द्वारा हल किया गया था! तो मूल रूप से, मेरे पहले प्रयासों पर, मैंने दस्तावेज़ को एक बार घुमाया, और मेरा दूसरा 'घुमावदार()' पीडीएफ प्रतिपादन को गड़बड़ कर रहा था, और अब, 'सहेजें()' के कारण मैं पाठ वाले तत्व को घुमाने में सक्षम था , चीज़ों को गड़बड़ किए बिना :) – LukyVj

उत्तर

12

कोई विशेष चाल नहीं है, लेकिन यह समझना महत्वपूर्ण है कि पीडीएफकिट में परिवर्तन कैसे लागू होते हैं।

समझने की मुख्य बात यह है कि आप पाठ या आकार को घुमाने नहीं देते हैं: आप द्वारा निहित आपके दस्तावेज़ घुमाते हैं।

यह आपके दस्तावेज़ को भौतिक गुणों के साथ कैनवास के रूप में देखने में आपकी सहायता कर सकता है। इसकी संपत्तियों में से एक इसकी घूर्णन है।
यदि आप कागज के किसी पृष्ठ पर घुमावदार पाठ खींचना चाहते हैं, तो आप जो भी करेंगे, वह आपके पृष्ठ को भौतिक रूप से घुमाएगा, फिर आमतौर पर कुछ पाठ क्षैतिज रूप से लिखें जैसा कि आप आमतौर पर करते हैं, फिर पृष्ठ को सामान्य स्थिति में वापस घुमाएं।

यह ठीक है कि कैसे PDFKit काम करता है:: यदि आप अपने दस्तावेज़ पर एक परिवर्तन लागू होते हैं, सब कुछ आकर्षित आप इस में आकर्षित करने की आवश्यकता
क्या आप तो अंत सीधी पृष्ठ पर एक घुमाया पाठ है रूपांतरित संदर्भ, और दस्तावेज़ को अपने पिछले राज्य में वापस सेट करें।

यह प्राप्त करने के लिए कि आपके पास दो विधियां हैं: doc.save() और doc.restore()

  • उपयोग save() से पहले, एक परिवर्तन को लागू करने के लिए इतना है कि सब कुछ है कि उससे पहले तैयार किया गया है प्रभावित नहीं है।
  • तब आप अपने कैनवास को बदलने और आकर्षित आपको क्या चाहिए
  • एक बार जब आप सब कुछ बदल जाने की आवश्यकता है कि तैयार किया है सकते हैं, दस्तावेज़ वापस लाने के लिए अपनी आरंभिक अवस्था में restore() कहते हैं। यह मूल रूप से नवीनतम save() कॉल के बाद किए गए सभी परिवर्तनों (यानी रोटेशन, स्केलिंग, अनुवाद) को वापस रोल करने जा रहा है।
करने के लिए (थोड़े) पुन: पेश ऊपर चित्र

तुम क्या चाहते हैं:

doc.text('text', ...) 
doc.save() 
doc.rotate(90).text('rotated text', ...) 
doc.restore() 

को समझने के लिए एक आखिरी बात यह है कि जो आपके दस्तावेज़ के निर्देशांक प्रणाली परिवर्तनों को प्रभावित करती है:

तो text को (0, 0) निर्देशांक पर खींचा गया था, तो rotated text(0, documentHeight/2 - offset) जैसे कुछ पर खींचा गया था।
यह जब 90 डिग्री रोटेशन के गुणकों का उपयोग कर से निपटने के लिए बहुत आसान है, लेकिन क्या आप वाकई बारी बारी से करने के लिए अन्यथा त्रिकोणमिति :)

चीजों को सुविधाजनक बनाने के लिए, आप रोटेशन की उत्पत्ति के साथ खेल सकते साथ खेलने के लिए होगा एक बिंदु के आसपास दस्तावेज़ जो आपके अगले चित्रों को समझ में आता है!

+2

इसके लिए एक फ़ंक्शन लिखना सर्वोत्तम है, फिर: 'drawRotatedText (x, y, कोण, टेक्स्ट); '। (और इसे पीडीएफकिट में जोड़ें ...) – usr2564301

+0

यह कार्यान्वयन विवरण है, लेकिन हाँ :) –

+0

रैड लेक्सस, यह एक दिलचस्प विकल्प है, समस्या यह है कि मैं पीडीएफकिट में नया हूं, इसलिए, मुझे यकीन नहीं है कि कैसे आगे बढ़ना है । अगर आपको लगता है कि आप इसे बाहर निकालना चाहते हैं, तो आगे बढ़ें :) इसकी सराहना की जाएगी! – LukyVj

1

मैंने जवाब में वर्णित उस समस्या या तथ्य के साथ अपने बालों को थोड़ा सा खींच लिया। कई चीजों की कोशिश की लेकिन टेक्स्ट हमेशा अपने तरीके से जा रहा है।

यहां छोटी क्लिप है जिसे मैं विभिन्न उन्मुखताओं में ग्रंथों का उपयोग करता था। यह फ़ंक्शन घूर्णन समन्वय प्रणाली में नए एक्स और वाई की गणना करता है।

var doTransform = function (x, y, angle) { 
var rads = angle/180 * Math.PI; 
var newX = x * Math.cos(rads) + y * Math.sin(rads); 
var newY = y * Math.cos(rads) - x * Math.sin(rads); 

return { 
    x: newX, 
    y: newY, 
    rads: rads, 
    angle: angle 
    }; 
}; 

यह तब एक्स, वाई, रोटेशन वाले ग्रंथों की सरणी के माध्यम से जाता है। लापरवाही के लिए इस्तेमाल किया गया Uncercore।

var drawTexts = function (doc, texts) { 

_.each(texts, t => { 
    doc.save(); 
    doc.fontSize(t.size); 
    var loc = doTransform(t.x, t.y, t.rotation);   
    doc.rotate(t.rotation);   
    doc.text(t.text, loc.x, loc.y);    
    doc.restore(); 
    }); 

}; 

पहले 'दुनिया' में घुमाया जाता है और फिर पाठ नई (एक्स, वाई) को रखा गया है जो (t.x, t.y) के रूप में लेकिन घुमाया दुनिया में एक ही जगह है।

1

घुमावदार पाठ लिखने का सबसे अच्छा तरीका कुछ बिंदुओं के आसपास पीडीएफ को घुमाने के लिए है (जहां आप अपने पाठ का प्रारंभिक बिंदु चाहते हैं), फिर इसे लिखें और पीडीएफ दस्तावेज़ को पीछे घुमाएं। कोड उदाहरण:

doc.rotate(angle, { origin: [x,y] }; 
doc.text('TEST', x, y); 
doc.rotate(angle * (-1), { origin: [x,y] }; 

इस तरह से आप नई स्थिति की गणना की जरूरत नहीं है।

यह भी जानना उचित है कि पीडीएफकिट हमारे पाठों के एक्स और वाई को हमारे ग्रंथों के बाएं शीर्ष बिंदु के रूप में लेता है "बॉक्स" (यह मेरे मामले में कोई फर्क नहीं पड़ता)।

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