[ https://issues.apache.org/jira/browse/PDFBOX-1578?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13660423#comment-13660423 ]
Maruan Sahyoun commented on PDFBOX-1578: ---------------------------------------- Hi, testing with Arial.ttf (as I don't have Monika.ttf) the image looks fine and is created correctly. To enhance the quality you could change the resolution to a higher value in page.convertToImage(). Works with and wo reloading the document although it's always advisable to reload. BR Maruan > The English Words are shown as Symbols and wrongly displayed > ------------------------------------------------------------- > > Key: PDFBOX-1578 > URL: https://issues.apache.org/jira/browse/PDFBOX-1578 > Project: PDFBox > Issue Type: Bug > Components: FontBox, JempBox > Affects Versions: 1.7.0, 1.8.1 > Environment: Java, MacOS, Linux > Reporter: Harippriya Parameswaran > Assignee: Andreas Lehmkühler > Priority: Blocker > Attachments: Test.pdf, Test.pdf, text.jpeg, text.jpeg > > > When i run the below piece of code in my server continuously it is creating > the text with symbols and showing incorrect word. > 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