【问题标题】:PDFsharp: Reference to type 'FontFamily' claims it is defined in 'System.Drawing', but it could be foundPDFsharp:对“FontFamily”类型的引用声称它是在“System.Drawing”中定义的,但可以找到
【发布时间】:2018-07-27 03:34:59
【问题描述】:

我在我的 Web 应用程序 (ASP.NET Core 2) 中使用 PDFsharp 1.50rc2 来生成 PDF。 我已经在 PDFsharp 网站上关注了example。但生成它时遇到问题,可能与 System.Drawing 中的 FontFamily 有关。没有把握。下面是我生成 PDF 的代码。

using PdfSharp.Pdf;
using PdfSharp.Drawing;

namespace WebApp.Controllers
{
  public class HomeController : Controller {
    public IActionResult Index()
    {
      // creating the PDF
      CreatePDF();

      return View();
    }

    public void CreatePDF()
    {
      // Create a new PDF document
      PdfDocument document = new PdfDocument();
      document.Info.Title = "Created with PDFsharp";

      // Create an empty page
      PdfPage page = document.AddPage();

      // Get an XGraphics object for drawing
      XGraphics gfx = XGraphics.FromPdfPage(page);

      // Create a font
      // PROBLEM IN HERE (new XFONT)
      XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

      // Draw the text
      gfx.DrawString("Hello, World!", font, XBrushes.Black,
      new XRect(0, 0, page.Width, page.Height),
      XStringFormats.Center);

      // Save the document...
      const string filename = "HelloWorld.pdf";
      document.Save(filename);
      // ...and start a viewer.
      Process.Start(filename);
    }
  }
}

错误

对“FontFamily”类型的引用声称它定义在 'System.Drawing',但可以找到

【问题讨论】:

  • 没有 MCVE,没有详细信息。问题的原因可能在此处显示的 sn-p 之外。

标签: pdf asp.net-core pdf-generation pdfsharp


【解决方案1】:

您正在使用依赖 GDI+ 的 PDFsharp 版本,您的项目可能必须引用 System.Drawing,例如当您需要字体、钢笔、画笔等时。

为避免引用 GDI+,您可以使用 PDFsharp 的 WPF 版本:
https://www.nuget.org/packages/PDFsharp-wpf/1.50.4845-RC2a

使用 WPF 构建时,您还必须在使用字体、钢笔、画笔等时添加对 WPF 的引用。
对于 WPF 构建,您需要对 PresentationCore 的引用。

PDFsharp 1.50 不是为与 .NET Core 一起工作而设计的,可能无法在 Windows 以外的其他平台上工作。

【讨论】:

  • 添加对 WPF 的引用是什么意思?我已经安装了 WPF,我在哪里可以找到这个示例?我找到了这个站点,但那里没有示例代码 Hello World。 github.com/empira/PDFsharp-samples/tree/master/samples
  • @saf21 用 VS 打开示例解决方案,您将看到所有源代码。然后您还可以看到添加到每个项目的引用。对于 WPF 构建,您需要对 PresentationCore 的引用。
  • 或者你可以使用 Microsoft.Windows.Compatibility nuget.org/packages/Microsoft.Windows.Compatibility
  • 有一个名为 PDFSharp.netstandard 的 Nuget 包。我还没有直接测试它,但是使用它而不是普通的 PdfSharp 包,错误消失了......这是它的回购github.com/jmanm/PDFsharp-netstandard2.0 它适用于 NET Standard,它应该但我不知道它是否适用其他类型的项目。
【解决方案2】:

我找到了 XFont 类的第二个参数 需要是浮点类型而不是int

// force a float value
let font1 = new XFont("arial", 12.0, XFontStyle.Bold)

一旦更正编译器错误就消失了

【讨论】:

  • 那是 VB.NET 代码吗? C# 编译器自动将int 强制转换为float,并且不需要附加.0
  • 它的 F# 代码我可以使用后缀 f 制作 12f 我猜
  • 这个问题是关于 C# 的,我认为你的 F# 答案与原始 C# 问题没有任何相关性。您是否得到与第一篇文章中显示的相同的编译器错误?如果添加“.0”解决了问题,那么您可能会收到不同的错误消息或进行了其他更改。
  • 因为 F# 与 C# 共享相同的 .net 生态系统,所以答案是高度相关的,这个库 (pdfSharp) 不仅是 C#,如果是它可能被称为 pdfCSharp!我只是发现用户在参数列表中的“类型”错误而已,语言无关紧要。修复才是最重要的。 pdfSharp 非常适合我,我很乐意为生产中的客户生成发票。
  • 高度相关的答案将获得很多赞。 PDFsharp 之所以称为 PDfsharp,是因为它是用 C# 编写的——当时唯一的“锐利”语言。有一个 .NET 生态系统,但 VB.NET 或 F# 有时需要显式转换,而 C# 隐式转换。您没有回答:您是否从原始帖子中得到了确切的错误消息?
猜你喜欢
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 2019-02-21
  • 1970-01-01
  • 2018-09-12
  • 2018-10-21
  • 1970-01-01
相关资源
最近更新 更多