我想将现有的常规字体样式更改为粗体,增加字体大小。就像字体样式是常规的一样,我想将其更改为粗体。如果字体大小为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等字体更改为其他字体。
答案 0 :(得分:2)
更改现有PDF的字体无法以有意义的通用方式完成,而不会弄乱布局。
为了说明,假设您有以下文字 我正在使用|表示页面边界。
Lorem Ipsum Dolor | Sit Amet Consectetur| Nunc |
如果我将这个文字变大,或者使它变得粗体,甚至是斜体,那么它可能会占用更多的空间。这意味着&#39; Consectetur&#39;将不再适合这条线。
PDF(与Word文档不同)不会自动重新传输其内容。内容只会显示在页面边界上(并且取决于您使用它的查看器可能会消失)。
真正的问题是PDF格式与字格式没有相同的信息。
在执行文档布局时,所有这些都很重要。这些都不是自然存在于PDF文档中。