mirror of
https://github.com/UglyToad/PdfPig.git
synced 2025-10-14 19:05:01 +08:00
#203 enable utf16 be strings to be written to the document builder
This commit is contained in:
@@ -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")
|
private static void WriteFile(string name, byte[] bytes, string extension = "pdf")
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
@@ -368,8 +368,28 @@
|
|||||||
|
|
||||||
private static void WriteString(StringToken stringToken, Stream outputStream)
|
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);
|
outputStream.WriteByte(StringStart);
|
||||||
var bytes = OtherEncodings.StringAsLatin1Bytes(stringToken.Data);
|
var bytes = stringToken.GetBytes();
|
||||||
outputStream.Write(bytes, 0, bytes.Length);
|
outputStream.Write(bytes, 0, bytes.Length);
|
||||||
outputStream.WriteByte(StringEnd);
|
outputStream.WriteByte(StringEnd);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user