Web应用程序上的TTF字体到流

时间:2016-04-19 13:19:07

标签: asp.net vb.net

我有一个Web应用程序,我需要在文本中使用字体并在网页上显示。实际上是条形码。 所以这个字体从字符串中获取条形码。我在Windows应用程序上做了类似的一个,如下面

Dim exeCurrent As [Assembly] = [Assembly].GetExecutingAssembly()
  'Dim nameSpc As String = exeCurrent.GetName().Name.ToString()
  Dim nameSpc As String = Main.GetType.Namespace
  _pfc = New PrivateFontCollection
  Dim loadStream As Stream = exeCurrent.GetManifestResourceStream( _
      nameSpc & "." & fontName)
  Dim byteBuffer(CType(loadStream.Length, Integer)) As Byte

  loadStream.Read(byteBuffer, 0, Int(CType(loadStream.Length, Integer)))

  Dim fontPtr As IntPtr = Runtime.InteropServices.Marshal.AllocHGlobal( _
      Runtime.InteropServices.Marshal.SizeOf(GetType(Byte)) * _
      byteBuffer.Length)

  Runtime.InteropServices.Marshal.Copy(byteBuffer, 0, fontPtr, byteBuffer.Length)

  _pfc.AddMemoryFont(fontPtr, byteBuffer.Length)

  Dim pcFonts As Int32 = 1
  AddFontMemResourceEx(fontPtr, byteBuffer.Length, 0, pcFonts)

这段代码来自SO和代码项目。它完成了这项工作。但是当谈到Web应用程序时,我不知道如何做同样的事情。我的字体文件存储在项目applciation文件夹中。 有人可以帮助我在网络应用程序中获取此功能

3 个答案:

答案 0 :(得分:0)

如果您有权分发TTF文件,则可以使用CSS创建@font-face声明。然后,您只需键入数字并通过font-family分配条形码字体:

How do I use the webfonts? at Fontspring

答案 1 :(得分:0)

所以现在我找到了自己的解决方案。我们需要的只是内存流,它将数据写入marshal.alloccotaskmem(length)。其中length是内存流data.length

Dim data1 As Byte()
  Dim ms As New MemoryStream

  ' Using ms As New MemoryStream()
  Using file As New FileStream(strpath, FileMode.Open, FileAccess.Read)
    Dim bytes As Byte() = New Byte(file.Length - 1) {}
    file.Read(bytes, 0, CInt(file.Length))
    ms.Write(bytes, 0, CInt(file.Length))
  End Using
  data1 = ms.ToArray()

这绝对适用于我想用作条形码的每种字体,因此在我的网络应用程序中也是如此

答案 2 :(得分:-1)

如果我说错了,你就会问如何在aspx上动态生成图像。

以下是一些可以解释的示例文章。

http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx