IText — HtmlConverter.ConvertToElements — шрифт «Helvetica» всегда добавляется, но не упоминается в HTML/CSS.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 IText — HtmlConverter.ConvertToElements — шрифт «Helvetica» всегда добавляется, но не упоминается в HTML/CSS.

Сообщение Anonymous »

Мне нужно создать файл PDF/A 3b в связи с созданием счетов-фактур ZUGFeRD.
Я использую пакет 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!


...шрифт Helvetica всегда добавляется в шрифты, даже если он вообще не используется (в HTML/CSS), как вы можете видеть здесь:
Изображение

Проблема здесь что для 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();
...
После этого кода PDF-файл используется для создания файла PDF/A 3b.
Если я попытаюсь заменить шрифт 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);
...
Похоже, это ошибка в пакете itext, не так ли?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ed-but-not
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»