PDFBox不会嵌入所有字体

时间:2018-08-14 11:56:55

标签: c# pdf pdfbox

我在C#项目中使用PDFBox创建PDF / A和PDF / A3。除了当我使用PDFBox将普通的PDF文件转换为PDF / A时,几乎所有的东西都起作用,并不是所有字体都被嵌入。如果我使用Word将其另存为PDF / A,则会嵌入“问题字体”。我如何也嵌入ArialMT?

Normal PDF-File converted to PDF/A

PDF/A-File created by Word

private PDDocumentCatalog makeDocPDFAcompliant(String producer, String creator)
{
PDDocumentCatalog cat = doc.getDocumentCatalog();
PDMetadata metadata = new PDMetadata(doc);
cat.setMetadata(metadata);

List<Dictionary<string, PDFont>> lstFonts = new List<Dictionary<string, PDFont>>();
List<PDFont> lstPDFonts= new List<PDFont>();

List pages = cat.getAllPages();
Iterator it = pages.iterator();

while (it.hasNext())
{
    PDPage page = (PDPage)it.next();
    var pageFont = page.getResources().getFonts();
    lstFonts.Add(pageFont.ToDicitonary<string, PDFont>());
}

foreach (Dictionary<string, PDFont> d in lstFonts)
{
    foreach (KeyValuePair<string, PDFont> entry in d)
    {
        PDFont font = entry.Value;

        if (!lstPDFonts.Contains(font))
        {
            lstPDFonts.Add(font);
        }
    }
}

//PDType0Font font0 = PDType0Font.Load(doc,)

XMPMetadata xmp = new XMPMetadata();
XMPSchemaPDFAId pdfaid = new XMPSchemaPDFAId(xmp);
xmp.addSchema(pdfaid);
pdfaid.setConformance("A");
pdfaid.setPart(java.lang.Integer.valueOf(1));
pdfaid.setAbout("");
metadata.importXMPMetadata(xmp);

//System.IO.Stream asset = Zaumzeug.Properties.Resources.sRGB_Color_Space_Profile

System.IO.Stream stream = new System.IO.MemoryStream(Zaumzeug.Properties.Resources.sRGB_Color_Space_Profile);
InputStream colorProfile = new ikvm.io.InputStreamWrapper(stream);

PDOutputIntent oi = new PDOutputIntent(doc, colorProfile);
oi.setInfo("sRGB IEC61966-2.1");
oi.setOutputCondition("sRGB IEC61966-2.1");
oi.setOutputConditionIdentifier("sRGB IEC61966-2.1");
oi.setRegistryName("http://www.color.org");
cat.addOutputIntent(oi);

doc.save(@"D:\Examples .Net\Data\FontsNormalA.pdf");


return cat;
}

0 个答案:

没有答案