gpt4 book ai didi

vb.net - 必须嵌入所有字体。这个不是 : Helvetica

转载 作者:行者123 更新时间:2023-12-04 18:08:58 28 4
gpt4 key购买 nike

我想用 iText 创建一个 PDF/A-1A 文件,但我无法解决经典的 Helvetica 错误,但我不知道如何修复它。这是代码:

Imports iTextSharp.text.pdf
Imports iTextSharp.text
Imports System.IO
Public Class Form1

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click


Dim document As Document = New Document(PageSize.A4)
Dim writer As PdfAWriter = PdfAWriter.GetInstance(document, New FileStream("./Test.pdf", FileMode.Create), PdfAConformanceLevel.PDF_A_1A)

writer.CreateXmpMetadata()
document.Open()
'The sRGB File is located in my Resources.'
Dim icc = ICC_Profile.GetInstance(My.Resources.sRGB)
writer.SetOutputIntents("Custom", "", "http://www.color.org", "sRGB IEC61966-2.1", icc)


Dim fonts As Font = FontFactory.GetFont("./FreeSansBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 10)
Dim normal9 As Font = FontFactory.GetFont("./FreeSans.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 9)
Dim bold9 As Font = FontFactory.GetFont("./FreeSansBold.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 9)
Dim normal8 As Font = FontFactory.GetFont("./FreeSans.ttf", BaseFont.WINANSI, BaseFont.EMBEDDED, 8)


document.Add(New Paragraph("Hello world"))

writer.Close()
document.Close()

End Sub

End Class

有问题可以问我。我希望你能帮助我。

问候

纳迪克斯。

最佳答案

简短的回答是你已经知道的,所有字体都必须嵌入,即使是“核心 PDF 字体”。

较长的答案是 iText 不是 PDF 渲染器,因此不需要核心 PDF 字体,至少不需要。根据标准,所有符合标准的渲染器都必须提供这些字体(或适当的替换),因此 iText 没有理由包含它们。 (更不用说任何潜在的许可问题。)它确实附带了 AFM 文件,其中包含字体指标,但这只是为了弄清楚如何布局文本。

解决方案是始终声明、嵌入和使用您自己的字体。您可以购买嵌入式 Helvetica 的许可证,并在需要时使用它。目前无法设置文档范围的默认字体,因此您要么需要始终指定字体,要么想出一个包装器。一种方法是只使用辅助方法:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
''//Register our font
FontFactory.Register(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "ARIALUNI.TTF"), "Arial Unicode MS")
End Sub
Public Shared Function CreateParagraph(text As String) As Paragraph
Static ArialUnicode = FontFactory.GetFont("Arial Unicode MS", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 20)
Return New Paragraph(text, ArialUnicode)
End Function

另一种方法是继承 Paragraph

Public Class ParagraphArial
Inherits iTextSharp.text.Paragraph
Public Shared ReadOnly Property ThisFont As Font
Get
Return FontFactory.GetFont("Arial Unicode MS", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 20)
End Get
End Property
Public Sub New(text As String)
MyBase.New(text, ThisFont)
End Sub
End Class

两者都可以这样使用:

document.Add(CreateParagraph("Hello world"))
document.Add(New ParagraphArial("Second Test"))

关于vb.net - 必须嵌入所有字体。这个不是 : Helvetica,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19315917/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com