字体系列在PDF中不起作用

字体系列在PDF中不起作用,pdf,itextsharp,font-family,xmlworker,Pdf,Itextsharp,Font Family,Xmlworker,我正在将HTML转换为PDF,如下所示: public const string PdfDocumentHeaderHtml = @"<!DOCTYPE html> <html lang='en' xmlns='http://www.w3.org/1999/xhtml'> <head> <meta charset='utf-16' /> <title></title> </head> &l

我正在将HTML转换为PDF,如下所示:

public const string PdfDocumentHeaderHtml = @"<!DOCTYPE html>
 <html lang='en' xmlns='http://www.w3.org/1999/xhtml'>
  <head>
   <meta charset='utf-16' />
   <title></title>
  </head>
 <body>
  <table>
   <tr>
    <td colspan='3'>
    <span Style='font-family:Arial;font-size:10pt;font-weight:bold;'>{0}</span>
    <br/>
    <br/>
    <span class='pageHeaderText'>{1}</span>
   </td>
   <td colspan='1'>
    <span><img src='' width='150' height='90' alt='NOS'/></span>
   </td>
  </tr>
  </table>
 </body>
</html>";
public const字符串PdfDocumentHeaderHtml=@”
{0}


{1} ";
并使用以下代码保存为PDF:

public override void OnCreatePDF(PdfWriter writer, Document document)
        {
            iTextSharp.text.FontFactory.Register(@"C:\Windows\Fonts\arial.ttf", "Arial");

            base.OnCreatePDF(writer, document); 
            if (writer == null)
                throw new ArgumentNullException("writer");
            if (document == null)
                throw new ArgumentNullException("document");
            var headerHtml = string.Format(Constants.NosPdfDocumentHeaderHtml, Urn, Title);


            var providers = new Dictionary<string, Object> { { HTMLWorker.IMG_BASEURL, string.Format(Constants.HeaderImageLocation, SiteUrlForHeaderImage) } };
            List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(headerHtml), null, providers);            
            foreach (IElement htmlElement in htmlarraylist)
            {
                document.Add(htmlElement);
                document.Add(new LineSeparator((float)0.90, 100, new BaseColor(0, 112, 192, 0), 0, 0));
            }
        }
public override void OnCreatePDF(PdfWriter编写器,文档)
{
iTextSharp.text.FontFactory.Register(@“C:\Windows\Fonts\arial.ttf”,“arial”);
base.OnCreatePDF(编写者、文档);
if(writer==null)
抛出新的异常(“编写器”);
if(document==null)
抛出新的异常(“文档”);
var headerHtml=string.Format(Constants.NosPdfDocumentHeaderHtml,Urn,Title);
var providers=newdictionary{{HTMLWorker.IMG_BASEURL,string.Format(Constants.HeaderImageLocation,SiteUrlForHeaderImage)};
List htmlaraylist=HTMLWorker.parsetList(新的StringReader(headerHtml),null,providers);
foreach(HtmlRayList中的IEElement htmlElement)
{
文件。添加(htmlElement);
添加(新的LineSeparator((float)0.90100,新的基色(01121920,0),0,0));
}
}
我想为PDF设置字体系列:Arial,但问题是,当我看到PDF文件属性时,它说使用了Helvetica。

我想我需要下载Adobe字体度量文件(arial.afm文件),并将此字体系列(而不是arial.ttf)设置为与pdf一起使用。但我不知道怎么做

你能给我一些建议吗


谢谢,

在“注释”部分,您正在请求为文档添加表结构的替代方案

使用
PdfPTable
很容易做到这一点。例如,如果我想创建一个包含3列的表,我会:

  PdfPTable table = new PdfPTable(3);
我希望在页边距之间跨越100%的可用宽度,因此我做到了:

  table.WidthPercentage  = 100;
  table.SetWidths(new int[]{2, 1, 1});
我希望第一列的宽度是第二列和第三列的两倍,因此:

  table.WidthPercentage  = 100;
  table.SetWidths(new int[]{2, 1, 1});
现在我添加单元格:

PdfPCell cell;
cell = new PdfPCell(new Phrase("Table 1"));
cell.Colspan = 3;
table.AddCell(cell);
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
cell.Rowspan = 2;
table.AddCell(cell);
table.AddCell("row 1; cell 1");
table.AddCell("row 1; cell 2");
table.AddCell("row 2; cell 1");
table.AddCell("row 2; cell 2");
最后,我将该表添加到
文档中

document.Add(table);

就是这样。

您使用的是
HTMLWorker
而不是XML Worker。您没有创建
FontProvider
。请阅读我对以下问题的回答,你会发现一些例子:顺便说一句:没有像arial.afm这样的文件。这意味着您可以在某处找到Arial作为Type1字体。另外:您正在注册arial.ttf,但查看您的HTML,我发现您实际上想要arialbd.ttf(并且您没有注册该字体)。感谢您的回复,但您能否解释一下如何创建FontProvider?我的代码中哪些行不正确?Arial是一个至少由4种字体组成的字体系列:Arial(Arial.ttf)、Arial bold(arialbd.ttf)、Arial italic(ariali.ttf)和Arial bolditalic(arialbi.ttf)。您注册了该系列的1种字体,而不是4种。这是错误1。错误2是使用HTMLWorker而不是XML Worker。请看一看我提到的例子(还有一个FontProvider的例子)。谢谢,我只是用HTML来格式化PDF的内容。我可以只向pdf添加文本吗?我如何格式化它?您能告诉我是否还有其他一些使用XML Worker的示例吗?谢谢Bruno,您是一个明星,我会试试这个,顺便问一下,您知道为什么我不能在HTML上使用Style='font-family:Arial'?我注册了所有4种Arial字体的iTextSharp.text.FontFactory.Register(@“C:\Windows\font\Arial.ttf”,“Arial”);是的,你没有按照我的建议去做,因为你没有尝试这样的例子,比如清楚地使用
XMLWorkerFontProvider
。我可以把马带到水里,但我不能让马喝水……如果你不按照给出的建议去做,我就无能为力了。嗨,布鲁诺,我试过PdfPTable,一切都很好,除了阅读日期from是一个富文本。在PDF中,它以HTML格式而不是字符串格式显示数据。我尝试使用XMLWorker,但由于它是一个SharePoint解决方案,我需要将iTextSharp.XMLWorker.dll添加到我的项目中,但该项目不起作用,您能给我一个C#SharePoint的示例吗?我在引用中添加了iTextSharp.XMLWorker.dll,但您的示例是provided itextpdf.com/sandbox/xmlworker/D06_ParseHtmlFonts不是c#,我不知道如何使用它。你能解释一下吗?