更改pdf文件中的现有字体itextsharp c#

时间:2017-10-24 06:42:09

标签: c# itext

我想将现有的常规字体样式更改为粗体,增加字体大小。就像字体样式是常规的一样,我想将其更改为粗体。如果字体大小为10,那么我想增加或减少一个尺寸(10-> 11或10-> 9)

在搜索了这个主题后,我发现了这段代码,但这只提供了字体信息,并没有改变样式和大小

        string OutputFile = "font.pdf";
        //PdfReader pdfReader = new PdfReader(strFile);
        PdfReader pdfReader = new PdfReader(mStream.ToArray());

        //Get first page,Generally we get font information on first page,however we can loop throw pages e.g for(int i=0;i<=pdfReader.NumberOfPages;i++)
        PdfDictionary cpage = pdfReader.GetPageN(1);
        if (cpage == null)
            return;
        PdfDictionary dictFonts = cpage.GetAsDict(PdfName.RESOURCES).GetAsDict(PdfName.FONT);
        if (dictFonts != null)
        {
            foreach (var font in dictFonts)
            {
                var dictFontInfo = dictFonts.GetAsDict(font.Key);

                if (dictFontInfo != null)
                {
                    //Get the font name-optional code
                    var baseFont = dictFontInfo.Get(PdfName.BASEFONT);
                    string strFontName = System.Text.Encoding.ASCII.GetString(baseFont.GetBytes(), 0, baseFont.Length);

                    //var bf = BaseFont.CreateFont((PRIndirectReference)baseFont);
                    //iTextSharp.text.Font exFont =new iTextSharp.text.Font(bf,20f);


                    //Remove the current font
                    //dictFontInfo.Remove(PdfName.BASEFONT);
                    //Set new font eg. Braille, Areal etc
                    //dictFontInfo.Put(PdfName.BASEFONT, new PdfString("Braille"));
                }
            }
        }

        //Now create a new document with updated font
        using (FileStream FS = new FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None))
        {
            using (Document Doc = new Document())
            {
                using (PdfCopy writer = new PdfCopy(Doc, FS))
                {
                    Doc.Open();
                    for (int j = 1; j <= pdfReader.NumberOfPages; j++)
                    {
                        writer.AddPage(writer.GetImportedPage(pdfReader, j));
                    }
                    Doc.Close();
                }
            }
        }
        pdfReader.Close();

我还希望将Arial等字体更改为其他字体。

1 个答案:

答案 0 :(得分:2)

更改现有PDF的字体无法以有意义的通用方式完成,而不会弄乱布局。

为了说明,假设您有以下文字 我正在使用|表示页面边界。

Lorem Ipsum Dolor   |  
Sit Amet Consectetur|    
Nunc                |

如果我将这个文字变大,或者使它变得粗体,甚至是斜体,那么它可能会占用更多的空间。这意味着&#39; Consectetur&#39;将不再适合这条线。

PDF(与Word文档不同)不会自动重新传输其内容。内容只会显示在页面边界上(并且取决于您使用它的查看器可能会消失)。

真正的问题是PDF格式与字格式没有相同的信息。

  • 字边界在哪里?
  • 段落边界在哪里?
  • (这篇文章是用什么语言写的?)

在执行文档布局时,所有这些都很重要。这些都不是自然存在于PDF文档中。