下面给出的类给了我异常:线程“main”中的异常com.itextpdf.text.DocumentException:com.itextpdf.text.pdf.PdfAConformanceException:必须嵌入所有字体。这不是:ZapfDingbats
我嵌入了 ZapfDingbats
字体,但我仍然收到此Exception
。
我在这里想要实现的是创建一个 list
,在 list
中的每个 item
前面都有一个 bullet
。
我在这里缺少什么?
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();
}
}
最佳答案
您的说法我嵌入了 ZapfDingbats 字体是错误的。
当然,您可以这样定义字体:
Font font = FontFactory.getFont(FontFactory.ZAPFDINGBATS,
BaseFont.ZAPFDINGBATS, BaseFont.EMBEDDED, 12);
当您使用BaseFont.EMBEDDED
时,您可能会假设该字体将被嵌入,但事实并非如此。您可以通过在任何内容中使用该字体来检查这一点其他非 PDF/A 的 PDF:如果您转到“文档属性”>“字体”,您会看到该字体未嵌入。
这是为什么?
PDF中有14种特殊字体。我们将它们称为“标准 1 类字体”。每个 PDF 查看器都应该能够呈现使用这些字体的文本,因此不需要嵌入这些字体:4 种 Helvetica 字体(常规、粗体、斜体、粗斜体)、4 种 Times Roman 字体(常规、粗体、斜体) 、粗斜体)、4 种 Courier 字体(常规、粗体、斜体、粗体斜体)、Symbol 和 Zapfdingbats。
iText 附带这些字体的 AFM 文件。 AFM 代表 Adobe Font Metrics,这些文件包含有关每种字体中可用字形的宽度、边界框和其他指标的数据。
这些字体的形状的实际描述不随 iText 一起提供。它们存储在 PFB(打印机字体二进制)文件中。如果没有这些 PFB 文件,iText 就无法(也不会)嵌入这些标准 Type 1 字体。
换句话说: iText 会忽略 BaseFont.EMBEDDED
参数。
这在很多地方都有记录。如果要创建 PDF/A,则需要字体文件,例如 TTF、OTF、TTC 文件或 AFM 和 PFB 文件的组合。
关于java - 字体嵌入错误 PDFA/1a iText 5.5.6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32349517/