簡體   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