繁体   English   中英

已解决:C# MemoryStream 转为字节数组,再转为 base64 字符串去掉 RTL 字符

[英]Solved: C# MemoryStream converted to byte array, then to base64 string removes RTL characters

我正在向 pdf 文件添加页码,

它适用于英语,但是当我尝试添加希伯来语文本时,它会忽略这些字母。

我认为问题在于编码为 base64,我该如何解决?

代码示例

byte[] myBinary = File.ReadAllBytes(path);
using (var reader = new PdfReader(myBinary))
{
    using (var ms = new MemoryStream())
    {
        using (var stamper = new PdfStamper(reader, ms))
        {
            int PageCount = reader.NumberOfPages;
            for (int i = 1; i <= PageCount; i++)
            {
                ColumnText.ShowTextAligned(stamper.GetUnderContent(i),
        Element.ALIGN_CENTER, new Phrase(String.Format("{0} מתוך {1}", i, PageCount)), 297f, 15f, 0);
            }
        }
        myBinary = ms.ToArray();
    }
}
string base64EncodedPDF = System.Convert.ToBase64String(myBinary);
return base64EncodedPDF;

在前面,我所做的就是下载文件。

 $scope.open_letter = function (letter) {
   var _letter = myService.PrintLetter().then(function (data) {
       var pdfAsDataUri = "data:application/pdf;base64," + data.data;
       var a = document.createElement("a");
       a.href = pdfAsDataUri;
       a.download = "מכתב" + ".pdf";
       a.click();
});
}

我问这个问题的原因是因为在英语中它工作得很好,但它只是省略了希伯来字母,这很有趣——我认为它会用奇怪的字符代替它。

所以我终于设法解决了这个问题。

问题不在于我缺少一种字体,而是我根本没有向new Phrase function 发送一个字体。

我想它知道如何处理英文字母,但不知道如何处理希伯来文字母。

我所做的是这样的:

BaseFont bf = BaseFont.CreateFont("c:/windows/Fonts/GISHA.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
Font f= new Font(bf, 8, Font.NORMAL, BaseColor.BLACK);

然后在我的页码循环中,我这样做了:

int PageCount = reader.NumberOfPages;
for (int i = 1; i <= PageCount; i++)
{
   ColumnText.ShowTextAligned(stamper.GetUnderContent(i),
   Element.ALIGN_CENTER, new Phrase(String.Format("{1} ךותמ {0}", i, PageCount), f), 297f, 15f, 0);
 }

这解决了我的问题,现在它工作得很好。

证明

给您的建议:不要使用 MemoryStream!

如果您想避免由于 memory 碎片导致的 OutOfMemory 问题,请使用 RecyclableMemoryStream。

https://www.philosophicalgeek.com/2015/02/06/announcing-microsoft-io-recycablememorystream/

内存流和大型 Object 堆

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM