我有一些代码,使用专用字体使用PDFSharp PDF文件添加文本。 如果字体位于本地文件系统上,但是当我给它提供一个URL存储在Azure的博客存储字体不工作时,此工作的成功。 我用自己的CDN,这也没有工作一个谷歌的字体也试过。 是有一些问题,从Web URL加载字体?
样本代码如下。 请注意,我已经解决了CORS问题在Azure Blob存储所以它不是。
private readonly XPdfFontOptions _fontOptions =
new XPdfFontOptions(PdfFontEncoding.Unicode, PdfFontEmbedding.Always);
private static readonly XPrivateFontCollection PrivateFontCollection =
XPrivateFontCollection.Global;
[Test]
public async Task Test01RawPdfSharp()
{
//SETUP
var account = "labelapptest";
var fs = new FileStore(account);
var fontUrl =
"http://labelapptest.blob.core.windows.net/designernospamcom/justyna sokolowska - erazm-regular.otf";
var pdfUrl =
"https://labelapptest.blob.core.windows.net/label-highrez-blank/blank-label00001.pdf";
var fontFamily = "Erazm Regular";
var localFontPath = Path.Combine(TestFileHelpers.GetTestDataFileDirectory(@"\TestFonts"),
"Justyna Sokolowska - Erazm-Regular.otf");
//ATTEMPT
var sFontFamilyname = "./#" + fontFamily;
var uri = new Uri(fontUrl);
PrivateFontCollection.Add(uri, sFontFamilyname);
var readDirStatus = await fs.GetDirHandleAsync(FileStorageTypes.LabelHighRezBlank);
using (var readStream = new MemoryStream())
{
await readDirStatus.Result.ReadFileAsync(readStream, pdfUrl);
readStream.Seek(0, SeekOrigin.Begin);
var document = PdfReader.Open(readStream);
var gfx = XGraphics.FromPdfPage(document.Pages[0]);
var font = new XFont(fontFamily, new XUnit(12, XGraphicsUnit.Point), XFontStyle.Regular, _fontOptions);
var brush = new XSolidBrush(XColor.FromKnownColor(XKnownColor.Red));
gfx.DrawString("Hello world", font, brush, 10, 10);
}
//VERIFY
}
另外,在上述如果我使用的示例fontUrl
在URI用于将字体则代码失败在其中XFont创建(第六从底部)的行。 如果在另一方面,我用localFontPath
然后它工作。
错误是: Cannot get a matching glyph typeface for font 'Erazm Regular'
在XFont.cs在PdfSharp.Drawing.XFont.Initialize()线:线234。
注 :我已经下载并编辑了1.32 PDFSharp代码替换Debugger.Break
在这一点例外声明。 该版本的NuGet有Debugger.Break
这将导致在发布代码挂-看到我的SO问题有关的问题。
UPDATE
最后我换到PDFsharp WPF 1.50 beta版的字体处理是好多了,我是不是通过HTTP链接加载字体的问题,任何地方获得。 似乎运作得很好。