Uploaded image for project: 'PDFBox'
  1. PDFBox
  2. PDFBOX-2482

Support for creating PDF containing OTF fonts

    Details

    • Type: New Feature
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 2.0.0
    • Fix Version/s: 3.0.0 PDFBox
    • Component/s: FontBox, Writing
    • Labels:
      None

      Description

      Good morning!

      I have tried posting this question on the users list and stackOverflow, but no luck ... other than Tilman Hausher's suggestion that I log an enhancement request ... so here it is - it would be beyond wonderful if you might consider supporting OTF fonts in PDF.

      Here's the background - I've just (last week) downloaded the latest PDFbox source from github and am trying to create a HelloWorldOTF.java, based on the HelloWorldTTF.java example, with the hope of creating a PDF file which uses an OTF font (in this case, Adobe Caslon Pro Regular) to add text to the output PDF.

      Here's what I have so far:

              doc = new PDDocument();
      
              PDPage page = new PDPage();
              doc.addPage(page);
      
              String testOtfFontFile =  "c:/windows/fonts/ACaslonPro-Regular.otf";
              String testTtfFontFile = "c:/windows/fonts/arial.ttf";
              String testPdfFile = "c:/tmp/pdfboxtest.pdf";
      
              CFFFont font = loadCFFFont(testOtfFontFile);
      
              PDFont ttfFont = PDTrueTypeFont.loadTTF(doc, new File(testTtfFontFile));
      
              PDPageContentStream contentStream = new PDPageContentStream(doc,
                      page);
              contentStream.beginText();
              // How to set the CFFFont?
              contentStream.setFont(ttfFont, 12);
              contentStream.moveTextPositionByAmount(100, 700);
              contentStream.drawString(text);
              contentStream.endText();
              contentStream.close();
              doc.save(testPdfFile);
              System.out.println(testPdfFile + " created!");
      

      I can load a CFFFont using this code: (loadCFFFont()):

                  CFFFont cff = null;
                  input = new FileInputStream(file);
                  byte[] bytes = IOUtils.toByteArray(input);
                  CFFParser cffParser = new CFFParser();
                  cff = cffParser.parse(bytes).get(0);
      

      ... but can't for the life of me figure out how to get from a CFFFont to a PDFont in order to be able to use it to set the font via setFont().

      Any help or pointers would be hugely appreciated ...

      Thanks a million for reading this far

        Attachments

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              Corinna Corinna Kinchin
            • Votes:
              4 Vote for this issue
              Watchers:
              9 Start watching this issue

              Dates

              • Created:
                Updated: