ITEXTPDF 5:使用特定字体打印svg

时间:2017-08-30 09:32:48

标签: itext batik

我正在使用ItextPdf 5.

我有一个带有特定字体的SVG文件(集成在svg中)。

当我打印SVG(使用蜡染1.8)时,图形会打印在我的文档上,但字体会被阻止,因此无法选择它们。

见下面我的java代码:

public class ItextPdfSmallTests {

    @Test
    public void svgFontsTest() throws IOException, DocumentException, URISyntaxException {
        String RESULT = "C:\\test\\svgFontsTest.pdf";

        Document document = new Document(PageSize.A4, 36, 36, 54, 36);
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(RESULT));

        document.open();
        document.add(new Paragraph("SVG Example"));

        int width = 250;
        int height = 250;
        PdfContentByte cb = writer.getDirectContent();
        PdfTemplate template = cb.createTemplate(width, height);

        PdfPrinterGraphics2D g2 = new PdfPrinterGraphics2D(cb, width, height, new MyFontMapper(), PrinterJob.getPrinterJob());


        PrintTranscoder prm = new PrintTranscoder();
        URI svgFileURI = getClass().getResource("myfont.svg").toURI();
        TranscoderInput ti = new TranscoderInput(svgFileURI.toString());
        prm.transcode(ti, null);

        PageFormat pg = new PageFormat();
        Paper pp = new Paper();
        pp.setSize(width, height);
        pp.setImageableArea(0, 0, width, height);
        pg.setPaper(pp);
        prm.print(g2, pg, 0);
        g2.dispose();

        ImgTemplate img = new ImgTemplate(template);
        document.add(img);
        document.close();
    }


    class MyFontMapper extends DefaultFontMapper {

        @Override
        public BaseFont awtToPdf(java.awt.Font font) {
            try {
                return BaseFont.createFont("AmaticSC-Regular.ttf", BaseFont.WINANSI, false);
            } catch (DocumentException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }
}

有可能让它可编辑吗? 谢谢你的帮助

0 个答案:

没有答案