You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@pdfbox.apache.org by "Maruan Sahyoun (JIRA)" <ji...@apache.org> on 2013/05/17 09:17:17 UTC
[jira] [Updated] (PDFBOX-1578) The English Words are shown as
Symbols and wrongly displayed
[ https://issues.apache.org/jira/browse/PDFBOX-1578?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Maruan Sahyoun updated PDFBOX-1578:
-----------------------------------
Priority: Minor (was: Blocker)
> 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: Minor
> 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