首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字体嵌入错误PDFA/1a iText 5.5.6

字体嵌入错误PDFA/1a iText 5.5.6
EN

Stack Overflow用户
提问于 2015-09-02 09:30:50
回答 2查看 1.9K关注 0票数 0

下面给出了一个类,它给了我一个例外:Exception in thread "main" com.itextpdf.text.DocumentException: com.itextpdf.text.pdf.PdfAConformanceException: All the fonts must be embedded. This one isn't: ZapfDingbats,我嵌入了ZapfDingbats字体,但是我仍然得到这个Exception。我在这里试图实现的是创建一个list,在list中的每个item前面都有一个bullet。我在这里错过了什么?

代码语言:javascript
复制
public class SquareBullet {
    public static void main(String[] args) throws IOException, DocumentException, XMPException {
        Document document = new Document();
        PdfAWriter writer = PdfAWriter.getInstance(document, new FileOutputStream("list.pdf"), PdfAConformanceLevel.PDF_A_1A);
        writer.setViewerPreferences(PdfAWriter.PageModeUseOutlines);
        writer.setRunDirection(PdfAWriter.RUN_DIRECTION_LTR);
        writer.setTagged(PdfAWriter.markAll);
        writer.createXmpMetadata();
        XmpWriter xmp = writer.getXmpWriter();

        DublinCoreProperties.addSubject(xmp.getXmpMeta(), "Subject");
        DublinCoreProperties.setTitle(xmp.getXmpMeta(), "Title", "en_US", "en_US");
        DublinCoreProperties.setDescription(xmp.getXmpMeta(), "Description", "en_US", "en_US");
        PdfProperties.setKeywords(xmp.getXmpMeta(), "Keywords");
        PdfProperties.setVersion(xmp.getXmpMeta(), "1.4");
        document.addLanguage("en_US");
        document.open();
        Font font = FontFactory.getFont(FontFactory.ZAPFDINGBATS, BaseFont.ZAPFDINGBATS, BaseFont.EMBEDDED, 12);
        Font font1 = FontFactory.getFont(FontFactory.HELVETICA, BaseFont.WINANSI, BaseFont.EMBEDDED, 12);
        ICC_Profile icc = ICC_Profile.getInstance(new FileInputStream("sRGB Color Space Profile.icm"));
        writer.setOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc);
        List list = new List(10);
        list.setListSymbol(new Chunk(String.valueOf((char)110), font));
        list.add(new ListItem(new Chunk("Test 1", font1)));
        list.add(new ListItem(new Chunk("Test 2", font1)));
        list.add(new ListItem(new Chunk("Test 3", font1)));
        document.add(list);
        document.close();
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-02 09:41:19

你说我嵌入了ZapfDingbats字体是错误的。

当然,您可以这样定义字体:

代码语言:javascript
复制
Font font = FontFactory.getFont(FontFactory.ZAPFDINGBATS,
    BaseFont.ZAPFDINGBATS, BaseFont.EMBEDDED, 12);

当您使用BaseFont.EMBEDDED时,您可能会假设字体是嵌入式的,但它不是。BaseFont.EMBEDDED可以在任何其他不是PDF /A的PDF中使用该字体来检查这个字体:如果您转到Document >字体,您将看到字体没有嵌入。

为什么会这样?

PDF格式有14种特殊字体。我们把它们称为标准类型1字体。每个PDF浏览器都应该能够呈现使用这些字体的文本,因此这些字体不需要嵌入:4 Helvetica字体(常规的、粗体的、斜体的、粗体的)、4次的罗马字体(常规的、粗体的、斜体的、粗体的)、4种信使字体(常规的、粗体的、斜体的、粗体的)、符号和Zapfdingbat。

iText附带这些字体的AFM文件。AFM代表,文件包含每种字体中可用的宽度、边框和其他象形文字的数据。

对这些字体形状的实际描述并不随iText一起提供。这些文件存储在PFB (打印机字体二进制)文件中。没有这些PFB文件,iText就不能(也不会)嵌入这些标准类型1字体。

换句话说, iText忽略BaseFont.EMBEDDED参数。

这在许多地方都有记载。如果要创建PDF/A,则需要字体文件,如TTF、OTF、TTC文件,或AFM和PFB文件的组合。

票数 3
EN

Stack Overflow用户

发布于 2017-06-29 10:40:14

您必须将"jasperreports-fonts-“jar添加到类路径中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32349517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档