2015-12-14 9 views
9

पर आधारित एंड्रॉइड पीडीएफ दस्तावेज़ का उपयोग कर टेक्स्ट आकार सेट करना मैं एंड्रॉइड पीडीएफ डॉक्यूमेंट क्लास का उपयोग कर लाइनरलाउट को पीडीएफ में बदलने की कोशिश कर रहा हूं। मैं एक व्यू ग्रुप में लेआउट को बढ़ाता हूं, कैनवास को दृश्य स्केल करता हूं, और कैनवास पर खींचता हूं। मुझे पीडीएफ बनाने में सफलता मिल रही है, लेकिन फ़ॉन्ट का आकार डिवाइस रिज़ॉल्यूशन/घनत्व के आधार पर तैयार किया गया है, न कि पीडीएफ आकार। असल में, वास्तविक पीडीएफ पर फ़ॉन्ट बहुत बड़ा होता है। मेरा मानना ​​है कि यह डिवाइस स्क्रीन के आयामों और घनत्व के संबंध में देखा जा रहा दृश्य के कारण है और फिर कैनवास में अनुवाद किया गया है।पीडीएफ दस्तावेज़/कैनवास आकार

मैंने पीएक्स और पीटी में आयामों को सेट करने का प्रयोग किया है, लेकिन मुझे यह सही नहीं लगता है। फ़ॉन्ट सही आकार के बारे में प्रकट होता है जब आयाम बहुत छोटे (1-2 डीपी या पीएक्स) सेट होते हैं, लेकिन मुझे पता है कि विभिन्न उपकरणों में इसे चलाने पर मुझे समस्या होगी।

टेक्स्ट को स्केल करने और आयाम देखने का सबसे अच्छा तरीका क्या है ताकि वे अंतिम पीडीएफ (लगभग 12pt फ़ॉन्ट 300 डीपीआई) पर उचित आकार दिखाई दे? क्या मुझे डिवाइस स्क्रीन से कुछ प्रकार के आयाम खींचने की आवश्यकता होगी और फिर डिवाइस और पीडीएफ कैनवास के बीच अनुपात के आधार पर सभी दृश्यों का आकार बदलना होगा ??

मेरा सिर दीवार से इसे मारने से परेशान है।

धन्यवाद, एंडी

//Sets print options 
 
PrintAttributes printAttrs = new PrintAttributes.Builder(). 
 
setColorMode(PrintAttributes.COLOR_MODE_COLOR). 
 
setMediaSize(PrintAttributes.MediaSize.NA_LETTER). 
 
setResolution(new PrintAttributes.Resolution("res1", PRINT_SERVICE, 300, 300)). 
 
setMinMargins(PrintAttributes.Margins.NO_MARGINS).build(); 
 

 
//create PDF Document 
 
PdfDocument document = new PrintedPdfDocument(context, printAttrs); 
 
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(pageWidth, pageHeight, 1).create(); 
 

 

 
//Inflate an XML template into a view with a LinearLayout root 
 
LinearLayout container = new LinearLayout(context); 
 
LayoutInflater inflater = LayoutInflater.from(context); 
 
View view = new View(context); 
 
view = inflater.inflate(R.layout.layout_pdf_meal_template, container, true); 
 

 
//Pull data/strings from SQLite 
 
//My codes goes through and populates the data gathered from the database to the LinearLayout's subviews 
 

 
//create page 
 
PdfDocument.Page page = document.startPage(pageInfo); 
 
Canvas canvas = page.getCanvas(); 
 

 
//Draw view on the page 
 
int measureWidth = View.MeasureSpec.makeMeasureSpec(canvas.getWidth(), View.MeasureSpec.EXACTLY); 
 
int measuredHeight = View.MeasureSpec.makeMeasureSpec(canvas.getHeight(), View.MeasureSpec.EXACTLY); 
 
container.measure(measureWidth, measuredHeight); 
 
container.layout(0, 0, canvas.getWidth(), canvas.getHeight()); 
 

 

 
container.draw(canvas); 
 
document.finishPage(page);

+0

समाधान मिला है? –

उत्तर

0

मैं यह मेरा पीडीएफ दस्तावेज़ के साथ एक समस्या के रूप में अच्छी तरह से हो पाया। तो मेरे कैनवास पर दृश्य खींचने के बजाय, मैंने एक टेक्स्टपेंट ऑब्जेक्ट बनाया और विधि canvas.drawtext ("स्ट्रिंग", एक्स-पोजिशन, वाई-पोजीशन, टेक्स्टपेंट) का उपयोग किया।

0

canvas.setDensity(72) आज़माएं क्योंकि यह बिटमैप्स के लिए काम कर रहा है? here देखें।

या PrintAttributes.Resolution के लिए 72 का उपयोग करें?