#203 enable utf16 be strings to be written to the document builder

This commit is contained in:
Eliot Jones
2020-08-27 09:06:14 +01:00
parent f2522f149c
commit 9b7554c973
2 changed files with 39 additions and 1 deletions

View File

@@ -570,6 +570,24 @@
}
}
[Fact]
public void CanCreateDocumentInformationDictionaryWithNonAsciiCharacters()
{
const string littlePig = "маленький поросенок";
var builder = new PdfDocumentBuilder();
builder.DocumentInformation.Title = littlePig;
var page = builder.AddPage(PageSize.A4);
var font = builder.AddTrueTypeFont(TrueTypeTestHelper.GetFileBytes("Roboto-Regular.ttf"));
page.AddText(littlePig, 12, new PdfPoint(120, 600), font);
var file = builder.Build();
WriteFile(nameof(CanCreateDocumentInformationDictionaryWithNonAsciiCharacters), file);
using (var document = PdfDocument.Open(file))
{
Assert.Equal(littlePig, document.Information.Title);
}
}
private static void WriteFile(string name, byte[] bytes, string extension = "pdf")
{
try

View File

@@ -368,8 +368,28 @@
private static void WriteString(StringToken stringToken, Stream outputStream)
{
if (stringToken.EncodedWith == StringToken.Encoding.Iso88591)
{
var isUtf16 = false;
for (var i = 0; i < stringToken.Data.Length; i++)
{
var c = stringToken.Data[i];
// Close enough.
if (c > 250)
{
isUtf16 = true;
break;
}
}
if (isUtf16)
{
stringToken = new StringToken(stringToken.Data, StringToken.Encoding.Utf16BE);
}
}
outputStream.WriteByte(StringStart);
var bytes = OtherEncodings.StringAsLatin1Bytes(stringToken.Data);
var bytes = stringToken.GetBytes();
outputStream.Write(bytes, 0, bytes.Length);
outputStream.WriteByte(StringEnd);