Я использую пакет itext версии 9.0.0 с C# .NET Framework 4.7.2.
На самом деле мы используя HtmlConverter.ConvertToElements(), чтобы создать PDF-файл с нашими данными, а затем преобразовать этот файл в файл PDF/A 3b.
На самом деле если я использую очень простой PDF-файл, подобный этому
Код: Выделить всё
Test
body {
background-color: #FFFFFF;
font-family: "Arial";
font-size: 40px;
color: #555;
margin-left:0.6in;
margin-right: 0.6in;
margin-top: 0.79in;
margin-bottom: 0.79in
}
This is a text!

Проблема здесь что для PDF/A 3b все используемые шрифты должны быть добавлен в документ.
Я уже пытался добавить, удалить или заменить шрифт «Helvetica», но потом получаю разные ошибки.
Если я оставлю шрифт Helvetica в документе PDF/A как есть, , то я получаю эту ошибку от инструмента проверки veraPDF:

Код для преобразования HTML в стандартный PDF (не PDF/A 3b) следующий:
Код: Выделить всё
...
PdfDocument pdf = new PdfDocument(writer);
PdfFont arialFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\arial.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont arialBoldFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\arialbd.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont arialBiFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\arialbi.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont arialBdFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\arialbd.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont arialIFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\ariali.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont ariblkFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\ariblk.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont artialNFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\ARIALN.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont artialNBFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\ARIALNB.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont artialNBIFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\ARIALNBI.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont artialNIFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\ARIALNI.ttf", PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
PdfFont helveticaFont = PdfFontFactory.CreateFont("C:\\temp\\eInvoiceDE\\Helvetica.ttf",
PdfEncodings.IDENTITY_H, PdfFontFactory.EmbeddingStrategy.FORCE_EMBEDDED);
ConverterProperties converterProperties = new ConverterProperties();
FontProvider fontProvider = new DefaultFontProvider(false,false,false);
fontProvider.AddStandardPdfFonts();
fontProvider.AddSystemFonts();
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\arial.ttf");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\arialbd.ttf");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\arialbi.ttf");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\ariali.ttf");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\ariblk.ttf");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\ARIALN.TTF");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\ARIALNB.TTF");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\ARIALNBI.TTF");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\ARIALNI.TTF");
fontProvider.AddFont("C:\\temp\\eInvoiceDE\\Helvetica.ttf");
converterProperties.SetFontProvider(fontProvider);
AbstractPdfDocumentEventHandler handler = new BackGround(pdf, stationery);
pdf.AddEventHandler(PdfDocumentEvent.START_PAGE, handler);
using (MemoryStream htmlStream = new MemoryStream(html))
{
IList elements = HtmlConverter.ConvertToElements(htmlStream, converterProperties);
pdf.SetTagged();
Document document = new Document(pdf);
document.SetFontProvider(fontProvider);
document.SetFont(arialFont);
document.SetMargins(60, 30, 125, 30);
foreach(IElement element in elements)
{
document.Add((IBlockElement)element);
}
}
pdf.AddFont(arialFont);
pdf.AddFont(arialBoldFont);
pdf.AddFont(arialBiFont);
pdf.AddFont(arialBdFont);
pdf.AddFont(arialIFont);
pdf.AddFont(ariblkFont);
pdf.AddFont(artialNFont);
pdf.AddFont(artialNBFont);
pdf.AddFont(artialNBIFont);
pdf.AddFont(artialNIFont);
pdf.AddFont(helveticaFont);
pdf.Close();
...
Если я попытаюсь заменить шрифт Helvetica таким образом ...
Код: Выделить всё
numberOfPages = pdfADocument.GetNumberOfPages();
for (int i = 1; i
[code]...
pdfADocument.AddFont(arialFont);
pdfADocument.AddFont(arialBoldFont);
pdfADocument.AddFont(arialBiFont);
pdfADocument.AddFont(arialBdFont);
pdfADocument.AddFont(arialIFont);
pdfADocument.AddFont(ariblkFont);
pdfADocument.AddFont(artialNFont);
pdfADocument.AddFont(artialNBFont);
pdfADocument.AddFont(artialNBIFont);
pdfADocument.AddFont(artialNIFont);
pdfADocument.AddFont(helveticaFont);
...
Подробнее здесь: https://stackoverflow.com/questions/792 ... ed-but-not