Использование PDFbox для создания PDF со ссылками на шрифты OTF

Доброе утро!

У меня есть вопрос новичка в PDFbox, и я надеюсь на некоторую помощь...

Я только что (на прошлой неделе) загрузил последний исходный код PDFbox с github и пытаюсь создать HelloWorldOTF.java на основе примера HelloWorldTTF.java, надеясь создать файл PDF, в котором используется шрифт OTF (в данном случае , Adobe Caslon Pro Regular), чтобы добавить текст в выходной PDF-файл.

Вот что у меня есть до сих пор:

        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!");

Я могу загрузить CFFFont, используя этот код: (loadCFFFont()):

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

... но я не могу понять, как перейти от CFFFont к PDFont, чтобы иметь возможность использовать его для установки шрифта через setFont().

Любая помощь или указатели будут очень признательны...

Миллион благодарностей, что дочитали до этого места ;)


person Corinna    schedule 30.10.2014    source источник
comment
Сомневаюсь, что получится... Я видел только примеры написания ПДФ шрифтами ТТ. Упомянутый вами класс используется для рендеринга. Если вы не получили ответа здесь, я предлагаю задать вопрос в списке пользователей, и если вы не получите ответа или получите отрицательный ответ, откройте запрос на улучшение в PDFBox JIRA. В качестве альтернативы попробуйте iText. (Не могу поверить, что пишу это. Вернитесь в PDFBox, как только мы поддержим запись с помощью CFFFonts :-))   -  person Tilman Hausherr    schedule 30.10.2014
comment
Привет, Тилман! Большое спасибо за ответ. Я уже пробовал список пользователей, но безрезультатно, поэтому похоже, что следующим шагом будет открытие запроса на улучшение ... таким образом я смогу вообще избежать iText;)   -  person Corinna    schedule 04.11.2014


Ответы (1)


Мне помогло обращение по по этой ссылке.

Использование OTFParser для преобразования otf в ttf.

OTFParser otfParser = new OTFParser();
OpenTypeFont otf = otfParser.parse(new File("C:/Users/beder/Downloads/code/CODE Light.otf"));

PDFont font = PDType0Font.load(document, otf, false);
person sin_kai    schedule 12.11.2020
comment
Также прочитайте комментарии к PDFBOX-2482 после того, как Бенджамин Эдер предложил этот подход. По-видимому, результат не полностью соответствует спецификациям PDF. - person mkl; 12.11.2020