现有PDF中的@ font-face渲染

时间:2015-11-07 06:11:37

标签: java itext flying-saucer

我有以下HTML:

String css = "@font-face {" 
        + "font-family: myFont;" 
        + "src: url(fonts/COMICATE.TTF);" 
        + "-fs-pdf-font-embed: embed;" 
        + "-fs-pdf-font-encoding: Identity-H;" 
        + "}"
        + "font-family: myFont;}";
String html = "<html><head>"+css+"</head><body><p>Hello My Font</p></body></html>";

我有以下flyingsaucer代码将上述HTML转换为PDF,并且完美无缺。它会使用我的自定义字体系列COMICATE.TTF

呈现 Hello My Font
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(html);
String outputFile = "result.pdf";
OutputStream os = new FileOutputStream(outputFile);
renderer.layout();
renderer.createPDF(os);
os.close();

我有以下iText代码将上面的HTML置于绝对位置,除@font-face中的css外,它的工作正常。

PdfContentByte cb = stamper.getOverContent(1);
ColumnText columnText = new ColumnText(cb);
columnText.setSimpleColumn(800, 800, 100, 100);
ElementList elements = XMLWorkerHelper.parseToElementList(html, "");  // I want to embed flyingsaucer generated html with custom font here
for (Element element : elements) {
    columnText.addElement(element);
}
columnText.go();

我有什么方法可以帮助flyingsaucer进行html转换,然后使用iText将其放在我现有的PDF中?或者使用iText

实现上述任何其他替代方法

更新

我可以使用iText使用自定义字体和下面的代码,它可以很好地工作,但我需要使用HTML + CSS。

Font font = FontFactory.getFont("fonts/COMICATE.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 0.8f, Font.NORMAL, BaseColor.BLACK);
BaseFont baseFont = font.getBaseFont();
PdfContentByte cb = stamper.getOverContent(1);
cb.setFontAndSize(baseFont, 12);
cb.beginText();
cb.showTextAligned(PdfContentByte.ALIGN_LEFT, "Hello My Font", 150, 760, 0);
cb.endText();

0 个答案:

没有答案