【问题标题】:PDFsharp add private/installed fontPDFsharp 添加私有/安装字体
【发布时间】:2014-02-03 18:41:26
【问题描述】:

我想使用 PDFsharp 将 Trade gothic 字体应用到我的 pdf 文本,我已经安装了字体并使用下面的代码行来应用

XPdfFontOptions options = new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
// var options = new XPdfFontOptions(PdfFontEmbedding.Always);
XFont font = new XFont("TRADE GOTHIC BOLD CONDENSED NO. 20", 20, XFontStyle.Bold, options);

但它不起作用! 另外我想知道在生产中我使用的是 Windows Server 2008,有没有一种方法可以在生产服务器中动态添加这种字体,即使它不存在?

按照建议,我关注了 pdfsharp 论坛, 这是我的示例代码

XPrivateFontCollection privateFontCollection = XPrivateFontCollection.Global;
 // Uri fontUri = new Uri(MappedApplicationPath + "Fonts\\trade-gothic-no-20-condensed-bold-1361518746.ttf");
 Uri fontUri = new Uri("C:\\inetpub\\wwwroot\\wss\\VirtualDirectories\\80\\Fonts\\trade-gothic-no-20-condensed-bold-1361518746.ttf");

LoadPrivateFont(privateFontCollection, fontUri, "./#TradeGothicNo.20-Condensed"); 

我尝试了路径和文件名的所有可能组合,.ttf 文件中提到的名称但仍然出现异常。我有一个 sharepoint Visual webpart,并在该 webpart 的页面加载事件中编写此代码..

这是加载方法

protected void LoadPrivateFont(PdfSharp.Drawing.XPrivateFontCollection privateFontCollection, Uri fontUri, string sFontFamilyname)
        {

            try
            {
                privateFontCollection.Add(fontUri, sFontFamilyname);
            }
            catch
            {
            }
        }

我关注了这篇文章 http://forum.pdfsharp.net/viewtopic.php?f=2&t=1880

谢谢

【问题讨论】:

  • 你得到了一个异常,但不要在这里重现任何异常细节。它是拒绝访问异常吗?或者是其他东西?捕获异常并在消息框中显示 ex.ToString() 以获取调用堆栈的详细信息。
  • 例外是字体不存在
  • 字体的 Uri 语法很棘手。首先确保字体在独立应用程序中工作(基于 Private Fonts 示例)。然后在步骤 2 中尝试在 ASP.NET 中运行(现在您知道 Uri 语法是正确的,问题可能是权限不足引起的,因此请确保您站点使用的应用程序池可以读取字体文件)。

标签: pdfsharp


【解决方案1】:

在 PDFsharp 中使用字体时,请确保字体是 TrueType 字体(不是 PostScript 字体)。

还要确保正确书写字体名称 - 如 Windows 的字体小程序所示或 Word 所示。

您可以使用私人字体集合来使用计算机上未安装的字体。这应该可以解决您使用 Windows Server 2008 的“问题”。使用 PDFsharp 的 WPF 版本。

PDFsharp 源代码包包含一个使用私有字体的完整工作示例。
代码 sn-p 可以在这里看到:
http://pdfsharp.net/wiki/PrivateFonts-sample.ashx

【讨论】:

  • 这个例子展示了如何添加字体,我需要在我的应用中调用它。还有 this.fontFamilies 在这种情况下是什么“这个”。我有一个需要通过电子邮件发送的 pdf,还需要在 pdf 中编写一些动态文本,我在我的项目中添加了对 PdfSharp dll 的引用,我还需要什么?请推荐!!
  • 帖子正确地说:“PDFsharp 源代码包包含一个使用私有字体的完整工作示例。”网站上的代码 sn-p,源代码中的完整工作示例 - 请查看。
  • 完整下载也不包含 GDI+ 实现。文档本来就没什么用。
  • @Knelis 对私有字体的支持在过去几周内针对 PDFsharp 1.50(测试版 3)的下一个版本发生了很大变化。它正在进行中。代码功能齐全后,将更新示例和站点,并提供源代码。我不确定私有字体是否可以与 PDFsharp 1.3x 的 GDI+ 版本一起使用。
  • 示例从未更新。文档几乎毫无价值,并且包含循环引用,上面写着“注意:不再支持且不再推荐使用 XPrivateFontCollection。此示例已过时。使用 IFontResolver 接口。”[1] 带有指向“注意:当使用 GDI 构建,您可以使用 XPrivateFontCollection 类。”[2] 带有返回第一页的链接。 [1] pdfsharp.net/wiki/PrivateFonts-sample.ashx [2] pdfsharp.net/wiki/FontResolver-sample.ashx
猜你喜欢
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多