3

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

質問がある場合は、私に聞いてください。あなたが私を助けてくれることを願っています。

よろしく

ナディクス。

4

1 に答える 1

1

簡単な答えは、「コア PDF フォント」であっても、すべてのフォントを埋め込む必要があるということです。

より長い答えは、iText は PDF レンダラーではないため、コア PDF フォントを少なくとも完全には必要としないということです。標準に従って、すべての準拠レンダラーはこれらのフォント (または適切な代替) を利用できる必要があるため、iText にそれらを含める理由はありません。(潜在的なライセンスの問題は言うまでもありません。)フォントメトリックを保持するAFMファイルが同梱されていますが、これはテキストのレイアウト方法を理解するためのものです。

解決策は、常に独自のフォントを宣言、埋め込み、使用することです。組み込み Helvetica のライセンスを購入して、必要に応じてそれを使用することもできます。現在、ドキュメント全体の既定のフォントを設定する方法がないため、常にフォントを指定するか、ラッパーを作成する必要があります。1 つの方法は、ヘルパー メソッドを使用することです。

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"))
于 2013-10-11T13:25:42.150 に答える