我试图生成一个PDF-A,但是当我试图将字体设置为段落时,我会得到以下错误:
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生成中,我使用以下命令将字体设置为段落:
PdfFont font = PdfFontFactory.createFont(StandardFonts.COURIER);
Paragraph p = new Paragraph();
p.setFont(font);但是在PDF-A中,我得到了关于嵌入字体的错误。也许是因为它已经被合并了?有人知道在不创建字体但使用嵌入的字体的情况下为p.setFont使用哪个命令吗?
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();
}
}谢谢!
发布于 2022-07-26 07:33:40
为解决问题而采取的解决办法:
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();
}
}https://stackoverflow.com/questions/73107330
复制相似问题