2010-05-25 14 views
6

मैं iText का उपयोग कर पीडीएफ फ़ाइल में छवियों को आउटपुट कर रहा हूं। छवियों को हमेशा उनके मुकाबले बड़ा दिखाई देता है। पुस्तक (iText इन एक्शन) के अनुसार, ऐसा इसलिए है क्योंकि iText हमेशा छवियों की वास्तविक डीपीआई संपत्ति के बावजूद 72 डीपीआई के संकल्प पर छवियों को प्रदर्शित करता है। पुस्तक छवि के डीपीआई को खोजने के लिए image.getDpiX() का उपयोग करने का सुझाव देती है, और उसके बाद छवि को ठीक से प्रदर्शित करने के लिए image.scalePercent (72/actualDpi * 100) का उपयोग कर सुझाव देती है। अब तक, मेरी सभी छवियों की getDpiX() प्रॉपर्टी 0 वापस आ गई है (मैंने 2 gifs और 1 jpg की कोशिश की है)। क्या वास्तविक डीपीआई को समझने का कोई और तरीका है ताकि मेरी छवियां ठीक से स्केल हो जाएं?जावा छवि स्केलिंग

com.lowagie.text.Image graphic = com.lowagie.text.Image.getInstance(imgPath); 
float actualDpi = graphic.getDpiX(); 
if (actualDpi > 0) 
    //Never gets here 
    graphic.scalePercent(72f/actualDpi * 100); 

उत्तर

0

GIF के लिए, वहाँ फ़ाइल में एक "डीपीआई" जानकारी स्टोर करने के लिए कोई जगह नहीं है, इसलिए "actualDpi" उस मामले में कोई अर्थ नहीं है। जेपीईजी के लिए, "डीपीआई" जानकारी फ़ाइल में संग्रहीत की जा सकती है, लेकिन यह अनिवार्य नहीं है, और यदि सेट नहीं है: "वास्तविकDPI" का कोई अर्थ नहीं है। वास्तविक उत्तर यह है: "वास्तविक डीपीआई" जैसी कोई चीज़ नहीं है, या तो जानकारी प्रदान की जाती है (यानी। "इस छवि में मैं 1 पिक्सेल को इस विशिष्ट भौतिक चौड़ाई (या ऊंचाई) के साथ प्रस्तुत करना चाहता हूं"), या यह है नहीं। एक और तत्व आपकी वाक्य में है: "हमेशा उनसे बड़े दिखाई देते हैं"; "माना जाता है" छवि में संग्रहीत डीपीआई जानकारी है। इसलिए यदि यह जानकारी अनुपस्थित है, और आपको लगता है कि जब आप छवि खोलते हैं तो यह स्क्रीन पर सही लगता है, तो आपको अपनी स्क्रीन की घनत्व की गणना करना होगा (आपकी स्क्रीन के इंच में चौड़ाई से विभाजित पिक्सल की चौड़ाई में चौड़ाई) और इसे अपने "वास्तविकDPI" चर के रूप में उपयोग करें।

1

com.lowagie.text.Image JavaDoc के अनुसार, विधि getDpiX एक्स दिशा में डॉट्स प्रति इंच हो जाता है। उपलब्ध नहीं होने पर शून्य लौटाता है।

GetDpiX विधि शून्य लौटाते समय आपको एक मान मानना ​​होगा। 100 डीपीआई किसी भी तरह की धारणा जितनी अच्छी है।

if (actualDpi <= 0) actualDpi = 100f; 
graphic.scalePercent(72f/actualDpi * 100f); 
0

स्क्रीन संकल्प, द्वारा

java.awt.Toolkit.getDefaultToolkit().getScreenResolution() 

लिया गया मदद नहीं की, छवि अभी भी बहुत बड़ी थी। हालांकि, कोई छवि निम्नानुसार पृष्ठ चौड़ाई तक स्केल कर सकता है:

BufferedImage bufferedImage = null; // your image 
Image image = Image.getInstance(bufferedImage,null); 
image.scalePercent((document.right()-document.left())/((float)image.getWidth())*100); 
संबंधित मुद्दे