2012-07-10 12 views
8

मैं पीडीएफ के अंदर छवियों को सम्मिलित करने की कोशिश कर रहा हूं लेकिन गुणवत्ता छवियों को पढ़ने योग्य बनाती है। अंतिम पीडीएफ दस्तावेज की गुणवत्ता में सुधार कैसे हो सकता है?जावा में पीडीएफ पर डालने पर पीडीएफबॉक्स ब्लूरी छवि

मैंने अन्य मुफ्त गैर जीपीएल लाइसेंस पुस्तकालयों की कोशिश की है और मुझे लगता है कि पीडीएफबॉक्स सबसे अच्छा है, इसलिए मैं पीडीएफबॉक्स का उपयोग करने में सक्षम होना चाहता हूं।

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

import org.apache.pdfbox.exceptions.COSVisitorException; 
import org.apache.pdfbox.pdmodel.PDDocument; 
import org.apache.pdfbox.pdmodel.PDPage; 
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream; 
import org.apache.pdfbox.pdmodel.font.PDFont; 
import org.apache.pdfbox.pdmodel.font.PDType1Font; 
import org.apache.pdfbox.pdmodel.graphics.xobject.PDJpeg; 
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage; 


public class pdfBoxTest { 


    public static void WritteBufferedImageToPDF(BufferedImage buff) 
    { 

     PDDocument doc = null; 
     PDPage page = null; 
     PDXObjectImage ximage = null; 
     try { 
      doc = new PDDocument(); 
      page = new PDPage(); 
      doc.addPage(page); 

      ximage = new PDJpeg(doc, buff, 1.0f); 

      PDPageContentStream content = new PDPageContentStream(doc, page); 


      content.drawImage(ximage, 0, 0); 
      content.close(); 
      doc.save("C:/Users/crusader/Desktop/Hello World.pdf"); 
      doc.close(); 

     } 
     catch (IOException ie){ 
      ie.printStackTrace(); 
      //handle exception 
     } 
     //save and close 
catch (COSVisitorException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
    public static void main(String []args) 
    { 
     BufferedImage buff= null; 

     try{ 

      buff = ImageIO.read(new File("C:/Users/crusader/Desktop","tests.jpg")); 

     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 

     System.out.println(buff.getWidth()); 
     System.out.println(buff.getHeight()); 
     pdfBoxTest.WritteBufferedImageToPDF(buff); 
    } 
} 
+0

समस्या से PDFBox केवल दस्तावेज़ है, जो एक हानिपूर्ण प्रारूप है में छवियों के लिए छवि प्रारूप के रूप में जेपीईजी का उपयोग करने में सक्षम होने उपजा कर दिया गया है चलो। मुझे अभी तक कोई उचित समाधान नहीं मिला है। – iddo

+1

@iddo: नवीनतम संस्करण – Gilead

+0

@Crusader में PDPixelMap आज़माएं: मैंने आपके कोड की कोशिश की है और यह अच्छा काम कर रहा है, लेकिन मुझे केवल पीडीएफ दस्तावेज़ में पेज सामग्री (चौड़ाईवार) का आधा हिस्सा मिल रहा है। क्या आप कृपया मेरी मदद कर सकते हैं –

उत्तर

5

मैं एक चाल आप PDFBOX, छवि (मैं जानता हूँ कि यह एक बहुत ही स्मार्ट समाधान नहीं है, CPU उपयोग बढ़ जाती है, फ़ाइल आकार पैमाने पर करने के है जिसके साथ कुछ परिस्थितियों में गुणवत्ता को बढ़ाने में मदद कर सकते पता है ... लेकिन यह काम करता है)।

public class PdfBoxTest { 

    public static void WritteBufferedImageToPDF(BufferedImage buff, int width, int height) 
    { 

     PDDocument doc = null; 
     PDPage page = null; 
     PDXObjectImage ximage = null; 
     try { 
      doc = new PDDocument(); 
      page = new PDPage(); 
      doc.addPage(page); 

      ximage = new PDJpeg(doc, buff, 1.0f); 

      PDPageContentStream content = new PDPageContentStream(doc, page); 

      content.drawXObject(ximage, 0, 0, width, height); 
      content.close(); 
      doc.save("C:/Users/crusader/DesktopHello World.pdf"); 
      doc.close(); 

     } 
     catch (IOException ie){ 
      ie.printStackTrace(); 
      //handle exception 
     } 
     //save and close 
     catch (COSVisitorException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

    private static final int SCALE_FACTOR = 3;//increases file size and quality 

    public static void main(String []args) 
    { 
     BufferedImage buff= null; 
     BufferedImage resized = null; 
     try{ 
      buff = ImageIO.read(new File("C:/Users/crusader/Desktop","tests.jpg")); 
      resized = new BufferedImage(buff.getWidth()*SCALE_FACTOR, buff.getHeight()*SCALE_FACTOR, buff.getType()); 
      Graphics2D g = resized.createGraphics(); 
      g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); 
      g.drawImage(buff, 0, 0, resized.getWidth(), resized.getHeight(), 0, 0, buff.getWidth(), buff.getHeight(), null); 
      g.dispose();   
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 

     System.out.println(buff.getWidth()); 
     System.out.println(buff.getHeight()); 

     PdfBoxTest.WritteBufferedImageToPDF(resized, buff.getWidth(), buff.getHeight()); 
    } 
} 

* कृपया, मुझे पता है कि अगर यह किसी भी तरह उपयोगी

+0

मैंने आपके कोड और उसके अच्छे काम करने की कोशिश की है, लेकिन मुझे केवल पीडीएफ दस्तावेज़ में पेज सामग्री (चौड़ाईवार) का आधा हिस्सा मिल रहा है। क्या आप कृपया मुझे –

+0

सामग्री में 0.5f के साथ चौड़ाई और ऊंचाई गुणा कर सकते हैं। DRXXbbject() कॉल करें। –

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