gpt4 book ai didi

c# - 使用 iText 创建 PDF 文档时未应用某些 HTML 和 CSS 样式

转载 作者:太空宇宙 更新时间:2023-11-03 14:53:08 25 4
gpt4 key购买 nike

从 HTML 生成 PDF 时,我遇到了 iText 问题。我正在传递来自 Locize 的“导入信息部分”,其中包含粗体标记和列表项目符号

<li>\n                    
<b>Toll-free</b> (within Canada and the USA):
<b>1.800.xxxxxxx</b>\n
</li>\n

pdf文件在Confirmation.cs中生成。下面列出了从 Confirmation.cs 传递到 ImportantInformation.cs 的参数“medSrc”。不知何故,粗体样式和列表项目符号不适用于结果 pdf 文件。

我已经调试了一段时间,但仍然不知道发生了什么。有谁知道我错过了什么?

提前致谢!

确认.cs

    ...
namespace xxx.Pdf.xxx.xxx
{
public partial class Confirmation
{
private IApplication application;

public Confirmation(IApplication application)
{
this.application = application;
}

public byte[] Create()
{
var memoryStream = new MemoryStream();
var css = Content.Css;

//Create Document
PdfDocument pdfDocument = new PdfDocument(new PdfWriter(memoryStream));
PageSize pageSize = PageSize.LETTER;
Document document = new Document(pdfDocument, pageSize);

Header headerHandler = new Header(document);
PageXofY footerHandler = new PageXofY(pdfDocument);
document.SetTopMargin(headerHandler.GetTableHeight());

//Assign event-handlers
pdfDocument.AddEventHandler(PdfDocumentEvent.START_PAGE, headerHandler);
pdfDocument.AddEventHandler(PdfDocumentEvent.END_PAGE, footerHandler);

...
// ======>Important Information <=======
var importantInfo = new ImportantInformation();
Table impInfoTable = importantInfo.CreateTable(
HtmlUtility.MergeCssWithHtml(css, Content.ImportantInformationEmergencyMedical),
HtmlUtility.MergeCssWithHtml(css, Content.ImportantInformationTripCancellation));

document.Add(impInfoTable).Add(new Paragraph("\n"));

//set column parameters
float offset = 36;
float columnWidth = (pageSize.GetWidth() - offset * 2 + 15) / 2;
float columnHeight = pageSize.GetHeight() - offset * 2;
float tableWidth = columnWidth - 10;

//define column area
Rectangle[] columns = new Rectangle[]
{
new Rectangle(offset , offset, columnWidth, columnHeight),
new Rectangle(columnWidth + 30, offset, columnWidth, columnHeight)
};
document.SetRenderer(new ColumnDocumentRenderer(document, columns));

document.Add(new AreaBreak(AreaBreakType.LAST_PAGE));

foreach (Applicant applicant in application.Applicants)
{
ApplicantTable applicantTable = new ApplicantTable();
Table table = applicantTable.CreateTable(applicant, tableWidth);
//Table another = applicantTable.CreateTable(application.Applicants[1], tableWidth);

document.Add(table).Add(new Paragraph("\n").SetFontSize(3));
}

footerHandler.WriteTotal(pdfDocument);

document.Close();

pdfDocument.Close();

var pdf = memoryStream.ToArray();

return pdf;
}
}
}

重要信息.cs

...
namespace xxx.xxx.xxx.Pdf
{
public class ImportantInformation
{
public Table CreateTable(string medSrc, string tciSrc)
{
float[] colWidth = new float[] { 50f, 50f };
Table table = new Table(UnitValue.CreatePercentArray(colWidth));
table.SetWidth(new UnitValue(UnitValue.PERCENT, 100));

PdfFont avenir = FontFactory.CreateAvenirLightStandardMedium();

Paragraph title = new Paragraph().Add("**IMPORTANT INFORMATION**").SetFontSize(12).SetFont(avenir).SetBold().SetTextAlignment(TextAlignment.CENTER);
Cell titleCell = new Cell(1, 2).Add(title).SetBorder(Border.NO_BORDER);
table.AddCell(titleCell);

Cell medImportantinfo = new Cell()
.SetBorder(Border.NO_BORDER)
.Add(new Paragraph("Paragraph A")
.SetFirstLineIndent(10f)
.SetBold()
.SetFontSize(9)
.SetFont(avenir));
Cell tciImportantInfo = new Cell()
.SetBorder(Border.NO_BORDER)
.Add(new Paragraph("Paragraph B")
.SetFirstLineIndent(10f)
.SetBold()
.SetFontSize(9)
.SetFont(avenir));

IList<IElement> medInfo = HtmlToCellFormat.HtmlToElements(medSrc);

IList<IElement> tciInfo = HtmlToCellFormat.HtmlToElements(tciSrc);

foreach (IElement e in medInfo)
{
medImportantinfo.ElementToCell(e);
}

foreach (IElement e in tciInfo)
{
tciImportantInfo.ElementToCell(e);
}

table.AddCell(medImportantinfo).AddCell(tciImportantInfo);

return table;
}
}
}

医学资源:

<html>
<body>\n
<ul style=\"text-align: justify; list-style-type: disc; font-family: avenir, Arial, Helvetica, sans-serif; font-size: 10px\">\n
<li>\n In the event of a medical emergency contact:\n
<ul style=\"text-align: justify; list-style-type: circle; font-family: avenir, Arial, Helvetica, sans-serif; font-size: 10px\">\n
<li>\n
<b>Toll-free</b> (within Canada and the USA):
<b>1.800xxxxxx</b>\n
</li>\n
<li>\n
<b>Collect</b> (from all other locations):
<b>1.xxxxxx</b>\n
</li>\n
</ul>\n
</li>\n
...
</body>
</html>

更新:下面是 ElementToCell 和 HtmlToElements 函数的定义

public static class HtmlToCellFormat
{
public static string baseUri = "/";

public static void ElementToCell(this Cell cell, IElement e)
{
var type = e.GetType().ToString();
if (e.GetType() == typeof(Image))
{

cell.Add((Image)e);
}
else if (e.GetType() == typeof(Paragraph) || (e.GetType() == typeof(List)))
{
cell.Add((IBlockElement)e);
}
}

public static IList<IElement> HtmlToElements(string content)
{
ConverterProperties properties = new ConverterProperties();
properties.SetBaseUri(baseUri);
FontProvider fontProvider = new DefaultFontProvider(false, false, false);
FontProgram fontProgram = FontProgramFactory.CreateFont();
fontProvider.AddFont(fontProgram, "");
properties.SetFontProvider(fontProvider);
IList<IElement> elements = HtmlConverter.ConvertToElements(content, properties);
return elements;
}
}

最佳答案

我通过阅读 iText 中的文章解决了这个问题 https://developers.itextpdf.com/content/itext-7-converting-html-pdf-pdfhtml/chapter-6-using-fonts-pdfhtml

简单的改变

FontProvider fontProvider = new DefaultFontProvider(false, false, false); 

FontProvider fontProvider = new DefaultFontProvider(true, true, true);

关于c# - 使用 iText 创建 PDF 文档时未应用某些 HTML 和 CSS 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50932038/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com