首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成pdfa时嵌入式字体的Itext7错误

生成pdfa时嵌入式字体的Itext7错误
EN

Stack Overflow用户
提问于 2022-07-25 09:58:19
回答 1查看 132关注 0票数 0

我试图生成一个PDF-A,但是当我试图将字体设置为段落时,我会得到以下错误:

代码语言:javascript
复制
Exception in thread "main" com.itextpdf.pdfa.exceptions.PdfAConformanceException: All the fonts must be embedded. This one is not: Courier
    at com.itextpdf.pdfa.checker.PdfA1Checker.checkFont(PdfA1Checker.java:305)
    at com.itextpdf.pdfa.PdfADocument.flushFonts(PdfADocument.java:282)
    at com.itextpdf.kernel.pdf.PdfDocument.close(PdfDocument.java:968)
    at com.itextpdf.layout.Document.close(Document.java:117)
    at testcreatepdfa.TestCreatePDFA.main(TestCreatePDFA.java:62)
C:\Users\UC9001309\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 0 seconds)

在正常的pdf生成中,我使用以下命令将字体设置为段落:

代码语言:javascript
复制
PdfFont font = PdfFontFactory.createFont(StandardFonts.COURIER);
Paragraph p = new Paragraph();
p.setFont(font);

但是在PDF-A中,我得到了关于嵌入字体的错误。也许是因为它已经被合并了?有人知道在不创建字体但使用嵌入的字体的情况下为p.setFont使用哪个命令吗?

代码语言:javascript
复制
package testcreatepdfa;

import com.itextpdf.io.font.FontProgramFactory;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfOutputIntent;
import com.itextpdf.kernel.pdf.PdfString;
import com.itextpdf.kernel.pdf.PdfViewerPreferences;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.pdfa.PdfADocument;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;

/**
 * @author UC9001309
 */
public class TestCreatePDFA {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws FileNotFoundException, IOException {
        // TODO code application logic here
        PdfWriter   pdfWriter = new PdfWriter("C:\\Temp\\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()) + ".pdf");
          PdfADocument pdfA = new PdfADocument( pdfWriter,
        PdfAConformanceLevel.PDF_A_1B,
          new PdfOutputIntent("Custom", "", "https://www.color.org",
            "sRGB2014", new FileInputStream("C:\\Users\\UC9001309\\Documents\\NetBeansProjects\\GestionePdf\\sRGB2014.icc")));       
        //Document document = new Document(pdfA); 
          
        Document document = new Document(pdfA, PageSize.A4, false);
        pdfA.setTagged();
        pdfA.getCatalog().setLang(new PdfString("it-IT"));
        pdfA.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));
        PdfDocumentInfo info = pdfA.getDocumentInfo();
        info.setTitle("TEST PdfA "); 
        System.out.println(FontProgramFactory.getRegisteredFontFamilies());
        System.out.println(FontProgramFactory.getRegisteredFonts());

        PdfFont font = PdfFontFactory.createFont(StandardFonts.COURIER);

        Paragraph p = new Paragraph();
        p.setFont(font);
        p.add("Prova pdfa");
        document.add(p);
        document.close();
    }
}

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-26 07:33:40

为解决问题而采取的解决办法:

代码语言:javascript
复制
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfAConformanceLevel;
import com.itextpdf.kernel.pdf.PdfDocumentInfo;
import com.itextpdf.kernel.pdf.PdfOutputIntent;
import com.itextpdf.kernel.pdf.PdfString;
import com.itextpdf.kernel.pdf.PdfViewerPreferences;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.pdfa.PdfADocument;
import com.itextpdf.pdfa.checker.PdfAChecker;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;


/**
 *
 * @author UC9001309
 */
public class TestCreatePDFA {

public static final String courier = "C:\\Windows\\fonts\\couri.ttf";
public static final String times = "C:\\Windows\\fonts\\times.ttf";
public static final String helvetica = "C:\\Windows\\fonts\\helvetica.ttf";

    public static void main(String[] args) throws FileNotFoundException, IOException {
        // TODO code application logic here
         PdfWriter   pdfWriter = new PdfWriter("C:\\Temp\\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()) + ".pdf");
          PdfADocument pdfA = new PdfADocument( pdfWriter,PdfAConformanceLevel.PDF_A_1B,new PdfOutputIntent("Custom", "", "https://www.color.org",
            "sRGB2014", new FileInputStream("C:\\Windows\\System32\\spool\\drivers\\color\\sRGB Color Space Profile.icm")));  
              
         
         PdfAChecker chk = null;
        
        Document document = new Document(pdfA, PageSize.A4, false);
        pdfA.setTagged();        
        pdfA.getCatalog().setLang(new PdfString("it-IT"));
        pdfA.getCatalog().setViewerPreferences(new PdfViewerPreferences().setDisplayDocTitle(true));
        PdfDocumentInfo info = pdfA.getDocumentInfo();
        info.setTitle("TEST PdfA " ); 
        
        PdfFont font_h = PdfFontFactory.createFont(helvetica);
        PdfFont font_c = PdfFontFactory.createFont(courier);
        PdfFont font_t = PdfFontFactory.createFont(times);
        
         Paragraph p = new Paragraph();
         p.setFont(font_c);
         p.setItalic();
         p.add("Prova pdfa");
         
         Paragraph p1 = new Paragraph();
         p1.setFont(font_h);
      
         p1.add("Prova pdfa");
         
         Paragraph p2 = new Paragraph();
         p2.setFont(font_t);
      
         p2.add("Prova pdfa");
         
         document.add(p);
         document.add(p1);
         document.add(p2);
         document.close();
    }
    
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73107330

复制
相关文章

相似问题

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