[ 
https://issues.apache.org/jira/browse/PDFBOX-1571?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Harippriya Parameswaran updated PDFBOX-1571:
--------------------------------------------

    Description: 
I tried to create a image and superimpose on the PDF, the image looks fuzzy. 
Also if i try to zoom the image created it looks fuzzy even for the first Zoom 
Out. 
I tried increasing the resolution this is increasing the image size while 
superimposing and even looks more fuzzy with a huge image. Tried with the below 
piece of code.

             String fontFile = "Monika.ttf";
              String text="Hello";
             float fontSize = 20;            
            Font font = null;        
        try {
                
                 font = Font.createFont(Font.TRUETYPE_FONT,
                 Sample.class.getClassLoader()
                 .getResource(fontFile).openStream());
                 font = font.deriveFont(fontSize);
        } catch (Exception e) {                
                throw new IOException("could not load TrueTypeFont for file: "
                                + fontFile, e);
        }

        FontRenderContext fc = new FontRenderContext(null, true, true);

        Rectangle2D bounds = font.getStringBounds(text, fc);

        int width = (int) bounds.getWidth();
        int height = (int) bounds.getHeight();

        int maxWidth = 500;
        int maxHeight = 50;
        int minFontSize = 20;

        while (width > (maxWidth - 2 * 5)
                        || height > (maxHeight - 2 * 5)) {
                if (fontSize <= minFontSize) {
                        break;
                }
                fontSize--;
                font = font.deriveFont(fontSize);
                bounds = font.getStringBounds(text, fc);
                width = (int) bounds.getWidth();
                height = (int) bounds.getHeight();
        }

        int paddingWidth = 5;
        int paddingHeight = 5;        
        BufferedImage buffer = null;
                PDDocument doc = new PDDocument();
                PDPage page = new PDPage(new PDRectangle(width + 2 * 
paddingWidth,
                                height + 2 * paddingHeight));
                
                BufferedImage newBufferedImage = ImageIO.read(Sample.class
                                .getClassLoader()
                                
.getResource(Sample.get("image.blue.background"))
                                .openStream());
                PDJpeg newImage = new PDJpeg(doc, newBufferedImage);

                PDFont pdffont = null;
                try {
                        
                         pdffont = PDTrueTypeFont.loadTTF(doc,
                         
Sample.class.getClassLoader().getResource(fontFile).openStream());
                        
                } catch (Exception e) {                        
                        throw new IOException(
                                        "could not load PDTrueTypeFont for 
file: " + fontFile,
                                        e);
                }
                PDPageContentStream stream = new PDPageContentStream(doc, page);
                stream.drawImage(newImage, 0, 0);
                stream.setNonStrokingColor(Color.BLACK);
                stream.setStrokingColor(Color.BLACK);
                stream.beginText();
                stream.setFont(pdffont, fontSize);
                stream.moveTextPositionByAmount(paddingWidth,
                                (float) (height / 2.5 + paddingHeight));
                stream.drawString(text);
                stream.endText();
                stream.close();

                buffer = page.convertToImage(BufferedImage.TYPE_INT_RGB,
                                94);

    
       // Convert image image to PDXObjectImage
        PDXObjectImage watermark = new PDJpeg(doc, buffer);
        @SuppressWarnings("rawtypes")
        List pages = doc.getDocumentCatalog().getAllPages();
        Iterator iterator1 = pages.iterator();
        PDPage page1=null;
        while(iterator1.hasNext()){
            page1 = (PDPage) iterator1.next();
        }

           PDPageContentStream stream1 = new PDPageContentStream(doc, page1, 
true, true);
             stream1.drawImage(watermark,50,60);
            stream1.close();
                 ImageIO.write(buffer, "jpeg", new
                  File("/Users/test/"+"text.jpeg"));
                doc.close();

  was:
I tried to create a image and superimpose on the PDF, the image looks fuzzy. 
Also if i try to zoom the image created it looks fuzzy even for the first Zoom 
Out. 
I tried increasing the resolution this is increasing the image size while 
superimposing and even looks more fuzzy with a huge image. Tried with the below 
piece of code.

             String fontFile = "Monika.ttf";
              String text="Hello";
             float fontSize = 20;            
            Font font = null;        
        try {
                
                 font = Font.createFont(Font.TRUETYPE_FONT,
                 Sample.class.getClassLoader()
                 .getResource(fontFile).openStream());
                 font = font.deriveFont(fontSize);
        } catch (Exception e) {                
                throw new IOException("could not load TrueTypeFont for file: "
                                + fontFile, e);
        }

        FontRenderContext fc = new FontRenderContext(null, true, true);

        Rectangle2D bounds = font.getStringBounds(text, fc);

        int width = (int) bounds.getWidth();
        int height = (int) bounds.getHeight();

        int maxWidth = 500;
        int maxHeight = 50;
        int minFontSize = 20;

        while (width > (maxWidth - 2 * EsignMessages.getInt("PADDING_WIDTH"))
                        || height > (maxHeight - 2 * 5)) {
                if (fontSize <= minFontSize) {
                        break;
                }
                fontSize--;
                font = font.deriveFont(fontSize);
                bounds = font.getStringBounds(text, fc);
                width = (int) bounds.getWidth();
                height = (int) bounds.getHeight();
        }

        int paddingWidth = 5;
        int paddingHeight = 5;        
        BufferedImage buffer = null;
                PDDocument doc = new PDDocument();
                PDPage page = new PDPage(new PDRectangle(width + 2 * 
paddingWidth,
                                height + 2 * paddingHeight));
                
                BufferedImage newBufferedImage = ImageIO.read(Sample.class
                                .getClassLoader()
                                
.getResource(Sample.get("image.blue.background"))
                                .openStream());
                PDJpeg newImage = new PDJpeg(doc, newBufferedImage);

                PDFont pdffont = null;
                try {
                        
                         pdffont = PDTrueTypeFont.loadTTF(doc,
                         
Sample.class.getClassLoader().getResource(fontFile).openStream());
                        
                } catch (Exception e) {                        
                        throw new IOException(
                                        "could not load PDTrueTypeFont for 
file: " + fontFile,
                                        e);
                }
                PDPageContentStream stream = new PDPageContentStream(doc, page);
                stream.drawImage(newImage, 0, 0);
                stream.setNonStrokingColor(Color.BLACK);
                stream.setStrokingColor(Color.BLACK);
                stream.beginText();
                stream.setFont(pdffont, fontSize);
                stream.moveTextPositionByAmount(paddingWidth,
                                (float) (height / 2.5 + paddingHeight));
                stream.drawString(text);
                stream.endText();
                stream.close();

                buffer = page.convertToImage(BufferedImage.TYPE_INT_RGB,
                                94);

    
       // Convert image image to PDXObjectImage
        PDXObjectImage watermark = new PDJpeg(doc, buffer);
        @SuppressWarnings("rawtypes")
        List pages = doc.getDocumentCatalog().getAllPages();
        Iterator iterator1 = pages.iterator();
        PDPage page1=null;
        while(iterator1.hasNext()){
            page1 = (PDPage) iterator1.next();
        }

           PDPageContentStream stream1 = new PDPageContentStream(doc, page1, 
true, true);
             stream1.drawImage(watermark,50,60);
            stream1.close();
                 ImageIO.write(buffer, "jpeg", new
                  File("/Users/test/"+"text.jpeg"));
                doc.close();

    
> Images Look Fuzzy 
> ------------------
>
>                 Key: PDFBOX-1571
>                 URL: https://issues.apache.org/jira/browse/PDFBOX-1571
>             Project: PDFBox
>          Issue Type: Bug
>          Components: FontBox, JempBox
>    Affects Versions: 1.7.0, 1.8.1
>         Environment: Java, Linux, Mac OS
>            Reporter: Harippriya Parameswaran
>            Priority: Blocker
>              Labels: Fuzzy
>         Attachments: Test.pdf, text.jpeg
>
>
> I tried to create a image and superimpose on the PDF, the image looks fuzzy. 
> Also if i try to zoom the image created it looks fuzzy even for the first 
> Zoom Out. 
> I tried increasing the resolution this is increasing the image size while 
> superimposing and even looks more fuzzy with a huge image. Tried with the 
> below piece of code.
>              String fontFile = "Monika.ttf";
>               String text="Hello";
>              float fontSize = 20;            
>             Font font = null;        
>         try {
>                 
>                  font = Font.createFont(Font.TRUETYPE_FONT,
>                  Sample.class.getClassLoader()
>                  .getResource(fontFile).openStream());
>                  font = font.deriveFont(fontSize);
>         } catch (Exception e) {                
>                 throw new IOException("could not load TrueTypeFont for file: "
>                                 + fontFile, e);
>         }
>         FontRenderContext fc = new FontRenderContext(null, true, true);
>         Rectangle2D bounds = font.getStringBounds(text, fc);
>         int width = (int) bounds.getWidth();
>         int height = (int) bounds.getHeight();
>         int maxWidth = 500;
>         int maxHeight = 50;
>         int minFontSize = 20;
>         while (width > (maxWidth - 2 * 5)
>                         || height > (maxHeight - 2 * 5)) {
>                 if (fontSize <= minFontSize) {
>                         break;
>                 }
>                 fontSize--;
>                 font = font.deriveFont(fontSize);
>                 bounds = font.getStringBounds(text, fc);
>                 width = (int) bounds.getWidth();
>                 height = (int) bounds.getHeight();
>         }
>         int paddingWidth = 5;
>         int paddingHeight = 5;        
>         BufferedImage buffer = null;
>                 PDDocument doc = new PDDocument();
>                 PDPage page = new PDPage(new PDRectangle(width + 2 * 
> paddingWidth,
>                                 height + 2 * paddingHeight));
>                 
>                 BufferedImage newBufferedImage = ImageIO.read(Sample.class
>                                 .getClassLoader()
>                                 
> .getResource(Sample.get("image.blue.background"))
>                                 .openStream());
>                 PDJpeg newImage = new PDJpeg(doc, newBufferedImage);
>                 PDFont pdffont = null;
>                 try {
>                         
>                          pdffont = PDTrueTypeFont.loadTTF(doc,
>                          
> Sample.class.getClassLoader().getResource(fontFile).openStream());
>                         
>                 } catch (Exception e) {                        
>                         throw new IOException(
>                                         "could not load PDTrueTypeFont for 
> file: " + fontFile,
>                                         e);
>                 }
>                 PDPageContentStream stream = new PDPageContentStream(doc, 
> page);
>                 stream.drawImage(newImage, 0, 0);
>                 stream.setNonStrokingColor(Color.BLACK);
>                 stream.setStrokingColor(Color.BLACK);
>                 stream.beginText();
>                 stream.setFont(pdffont, fontSize);
>                 stream.moveTextPositionByAmount(paddingWidth,
>                                 (float) (height / 2.5 + paddingHeight));
>                 stream.drawString(text);
>                 stream.endText();
>                 stream.close();
>                 buffer = page.convertToImage(BufferedImage.TYPE_INT_RGB,
>                                 94);
>     
>        // Convert image image to PDXObjectImage
>         PDXObjectImage watermark = new PDJpeg(doc, buffer);
>         @SuppressWarnings("rawtypes")
>         List pages = doc.getDocumentCatalog().getAllPages();
>         Iterator iterator1 = pages.iterator();
>         PDPage page1=null;
>         while(iterator1.hasNext()){
>             page1 = (PDPage) iterator1.next();
>         }
>            PDPageContentStream stream1 = new PDPageContentStream(doc, page1, 
> true, true);
>              stream1.drawImage(watermark,50,60);
>             stream1.close();
>                  ImageIO.write(buffer, "jpeg", new
>                   File("/Users/test/"+"text.jpeg"));
>                 doc.close();

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to