Some test text!

menu

Create Unicode text or embed composite fonts in PDF files using VB

More languages

chevron_right
More languages
Java (Android)
C++
C#
C# (.NET Core)
Go
Java
Kotlin
Obj-C
JS (Node.js)
PHP
Python
Ruby
Swift
C# (UWP)
VB
C# (Xamarin)

Sample VB code for using PDFTron SDK to create Unicode text and embed composite fonts in PDF files. Learn more about our VB PDF Library.

Get StartedSamplesDownload

To run this sample, get started with a free trial of PDFTron SDK.

'
' Copyright (c) 2001-2021 by PDFTron Systems Inc. All Rights Reserved.
'

Imports System
Imports System.IO
Imports System.Text
Imports pdftron
Imports pdftron.Common
Imports pdftron.Filters
Imports pdftron.SDF
Imports pdftron.PDF

' This example illustrates how to create Unicode text and how to embed composite fonts.
Module UnicodeWriteTestVB
	Dim pdfNetLoader As PDFNetLoader
	Sub New()
		pdfNetLoader = pdftron.PDFNetLoader.Instance()
	End Sub

	' Note: This demo assumes that 'arialuni.ttf' is present in '/Samples/TestFiles' 
	' directory. Arial Unicode MS is about 24MB in size and it comes together with Windows and 
	' MS Office.
	' 
	' For more information about Arial Unicode MS, please consult the following Microsoft Knowledge 
	' Base Article: WD2002: General Information About the Arial Unicode MS Font
	'  http://support.microsoft.com/support/kb/articles/q287/2/47.asp
	'
	' For more information consult: 
	'    http://office.microsoft.com/search/results.aspx?Scope=DC&Query=font&CTT=6&Origin=EC010331121033
	'    http://www.microsoft.com/downloads/details.aspx?FamilyID=1F0303AE-F055-41DA-A086-A65F22CB5593
	' 
	' In case you don't have access to Arial Unicode MS you can use cyberbit.ttf 
	' (ftp://ftp.netscape.com/pub/communicator/extras/fonts/windows/) instead.
	'
	Sub Main()

		PDFNet.Initialize()

		' Relative path to the folder containing test files.
		Dim input_path As String = "../../../../TestFiles/"
		Dim output_path As String = "../../../../TestFiles/Output/"

		Try
			Using doc As PDFDoc = New PDFDoc
				Using eb As ElementBuilder = New ElementBuilder
					Using writer As ElementWriter = New ElementWriter

						' Start a new page ------------------------------------
						Dim page As Page = doc.PageCreate(New Rect(0, 0, 612, 794))

						writer.Begin(page)		  ' begin writing to this page

						Dim fnt As Font
						Try

							' Full font embedding
							Dim myfont As System.Drawing.Font = New System.Drawing.Font("Arial Unicode MS", 12)
							fnt = Font.CreateCIDTrueTypeFont(doc.GetSDFDoc(), myfont, True, True)

							' To embed the font file directly use:
							' fnt = Font.CreateCIDTrueTypeFont(doc, input_path + "arialuni.ttf", true, true)

							' Example of font substitution
							' fnt = Font.CreateCIDTrueTypeFont(doc, input_path + "arialuni.ttf", false)
						Catch e As PDFNetException
						End Try

						If fnt Is Nothing Then
							Try
								fnt = Font.CreateCIDTrueTypeFont(doc, input_path & "ARIALUNI.TTF", True, True)
							Catch e As PDFNetException
							End Try
						End If

						If fnt Is Nothing Then
							Try
								fnt = Font.CreateCIDTrueTypeFont(doc, "C:/Windows/Fonts/ARIALUNI.TTF", True, True)
							Catch e As PDFNetException
							End Try
						End If

						If fnt Is Nothing Then
							Console.WriteLine("Note: using system font substitution for unshaped unicode text")
							fnt = Font.Create(doc, "Helvetica", "")
						Else
							Console.WriteLine("Note: using Arial Unicode for unshaped unicode text")
						End If

						Dim element As Element = eb.CreateTextBegin(fnt, 1)
						element.SetTextMatrix(10, 0, 0, 10, 50, 600)
						element.GetGState().SetLeading(2)			' Set the spacing between lines
						writer.WriteElement(element)

						' Hello World!!!
						Dim hello As String = "Hello World!"
						writer.WriteElement(eb.CreateUnicodeTextRun(hello))
						writer.WriteElement(eb.CreateTextNewLine())

						' Latin
						Dim latin As Char() = { _
						 "a"c, "A"c, "b"c, "B"c, "c"c, "C"c, "d"c, "D"c, ChrW(&H45), ChrW(&H46), ChrW(&HC0), _
						 ChrW(&HC1), ChrW(&HC2), ChrW(&H143), ChrW(&H144), ChrW(&H145), ChrW(&H152), "1"c, "2"c _
						 }			 ' etc.

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(latin)))
						writer.WriteElement(eb.CreateTextNewLine())

						' Greek
						Dim greek As Char() = { _
						 ChrW(&H39E), ChrW(&H39F), ChrW(&H3A0), ChrW(&H3A1), ChrW(&H3A3), ChrW(&H3A6), ChrW(&H3A8), ChrW(&H3A9) _
						 }			 ' etc.

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(greek)))
						writer.WriteElement(eb.CreateTextNewLine())

						' Cyrillic
						Dim cyrillic As Char() = { _
						 ChrW(&H409), ChrW(&H40A), ChrW(&H40B), ChrW(&H40C), ChrW(&H40E), ChrW(&H40F), ChrW(&H410), ChrW(&H411), _
						 ChrW(&H412), ChrW(&H413), ChrW(&H414), ChrW(&H415), ChrW(&H416), ChrW(&H417), ChrW(&H418), ChrW(&H419) _
						 }			 ' etc.

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(cyrillic)))
						writer.WriteElement(eb.CreateTextNewLine())

						' Hebrew
						Dim hebrew As Char() = { _
						 ChrW(&H5D0), ChrW(&H5D1), ChrW(&H5D3), ChrW(&H5D3), ChrW(&H5D4), ChrW(&H5D5), ChrW(&H5D6), ChrW(&H5D7), ChrW(&H5D8), _
						 ChrW(&H5D9), ChrW(&H5DA), ChrW(&H5DB), ChrW(&H5DC), ChrW(&H5DD), ChrW(&H5DE), ChrW(&H5DF), ChrW(&H5E0), ChrW(&H5E1) _
						 }			 ' etc. 

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(hebrew)))
						writer.WriteElement(eb.CreateTextNewLine())

						' Arabic
						Dim arabic As Char() = { _
						 ChrW(&H624), ChrW(&H625), ChrW(&H626), ChrW(&H627), ChrW(&H628), ChrW(&H629), ChrW(&H62A), ChrW(&H62B), ChrW(&H62C), _
						 ChrW(&H62D), ChrW(&H62E), ChrW(&H62F), ChrW(&H630), ChrW(&H631), ChrW(&H632), ChrW(&H633), ChrW(&H634), ChrW(&H635) _
						 }			 ' etc. 

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(arabic)))
						writer.WriteElement(eb.CreateTextNewLine())

						' Thai 
						Dim thai As Char() = { _
						 ChrW(&HE01), ChrW(&HE02), ChrW(&HE03), ChrW(&HE04), ChrW(&HE05), ChrW(&HE06), ChrW(&HE07), ChrW(&HE08), ChrW(&HE09), _
						 ChrW(&HE0A), ChrW(&HE0B), ChrW(&HE0C), ChrW(&HE0D), ChrW(&HE0E), ChrW(&HE0F), ChrW(&HE10), ChrW(&HE11), ChrW(&HE12) _
						 }			 ' etc. 

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(thai)))
						writer.WriteElement(eb.CreateTextNewLine())

						' Hiragana - Japanese 
						Dim hiragana As Char() = { _
						 ChrW(&H3041), ChrW(&H3042), ChrW(&H3043), ChrW(&H3044), ChrW(&H3045), ChrW(&H3046), ChrW(&H3047), ChrW(&H3048), ChrW(&H3049), _
						 ChrW(&H304A), ChrW(&H304B), ChrW(&H304C), ChrW(&H304D), ChrW(&H304E), ChrW(&H304F), ChrW(&H3051), ChrW(&H3051), ChrW(&H3052) _
						 }			 ' etc. 

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(hiragana)))
						writer.WriteElement(eb.CreateTextNewLine())

						' CJK Unified Ideographs
						Dim cjk_uni As Char() = { _
						 ChrW(&H5841), ChrW(&H5842), ChrW(&H5843), ChrW(&H5844), ChrW(&H5845), ChrW(&H5846), ChrW(&H5847), ChrW(&H5848), ChrW(&H5849), _
						 ChrW(&H584A), ChrW(&H584B), ChrW(&H584C), ChrW(&H584D), ChrW(&H584E), ChrW(&H584F), ChrW(&H5850), ChrW(&H5851), ChrW(&H5852) _
						 }			 ' etc. 

						writer.WriteElement(eb.CreateUnicodeTextRun(New String(cjk_uni)))
						writer.WriteElement(eb.CreateTextNewLine())

						Dim chinese_simplified As Char() = {ChrW(&H4e16), ChrW(&H754c), ChrW(&H60a8),ChrW(&H597D)}
						writer.WriteElement(eb.CreateUnicodeTextRun(New String(chinese_simplified)))
					    	writer.WriteElement(eb.CreateTextNewLine())
    
						' Finish the block of text
						writer.WriteElement(eb.CreateTextEnd())
						Console.WriteLine("Now using text shaping logic to place text")

						Dim indexedFont As Font = Font.CreateCIDTrueTypeFont(doc, input_path & "NotoSans_with_hindi.ttf", True, True, Font.Encoding.e_Indices)
						element = eb.CreateTextBegin(indexedFont, 10.0)
						writer.WriteElement(element)
						Dim linePos As Double = 350.0
						Dim lineSpace As Double = 20.0
						Dim shapedText As ShapedText = indexedFont.GetShapedText("Shaped Hindi Text:")
						element = eb.CreateShapedTextRun(shapedText)
						element.SetTextMatrix(1.5, 0, 0, 1.5, 50, linePos)
						linePos -= lineSpace
						writer.WriteElement(element)
						Dim hindiTextLines As String() = File.ReadAllLines(input_path & "hindi_sample_utf16le.txt", Encoding.UTF8)

						Console.WriteLine("Read in " & hindiTextLines.Length & " lines of Unicode text from file")
						For Each textLine As String In hindiTextLines
							shapedText = indexedFont.GetShapedText(textLine)
							element = eb.CreateShapedTextRun(shapedText)
							element.SetTextMatrix(1.5, 0, 0, 1.5, 50, linePos)
							linePos -= lineSpace
							writer.WriteElement(element)
							Console.WriteLine("Wrote shaped line to page")
						Next
						writer.WriteElement(eb.CreateTextEnd())
						writer.End()			  ' save changes to the current page
						doc.PagePushBack(page)

						doc.Save(output_path + "unicodewrite.pdf", SDF.SDFDoc.SaveOptions.e_remove_unused Or SDF.SDFDoc.SaveOptions.e_hex_strings)
						Console.WriteLine("Done. Result saved in unicodewrite.pdf...")
					End Using
				End Using
			End Using

		Catch ex As PDFNetException

			Console.WriteLine(ex.Message)
			Console.WriteLine()

		Catch ex As Exception

			MsgBox(ex.Message)

		End Try

	End Sub

End Module
close

Free Trial

Get unlimited trial usage of PDFTron SDK to bring accurate, reliable, and fast document processing capabilities to any application or workflow.

Select a platform to get started with your free trial.

Unlimited usage. No email address required.