我正在使用pdf导出功能,我的问题是将我正在使用的字体更改为我的文档的一小部分。
我需要创建一个用粗体写的新对象吗?或者我可以更改已创建的字体对象吗?我怎么能这样做?
答案 0 :(得分:2)
您可能希望查看here以了解问题的范围。以编程方式更改页面上的文本肯定是可行的,但它并不像您想象的那么简单。这是一个例子。假设您的页面上有“五只蓝色海龟”,并且您希望“蓝色”采用粗体字体。如果幸运的话,PDF中的代码将如下所示:
BT /F0 12 72 300 Td (five) 82 300 Td (blue) Td 92 300 (turtles) Td ET
这是开始文本,将我的字体设置为F0,12点,移动到(72,300)绘制“五”...结束文本
在这种情况下,您必须插入字体更改并将其重新设置
BT /F0 12 72 300 Td (five) /F1 12 82 300 Td (blue) Td /F0 12 92 300 (turtles) Td ET
诀窍是知道当你找到这个单词时,你会知道那个字体是什么。
但是,情况会变得更糟。如果您的文字放在页面上,如下所示:BT /F0 12 72 300 Td (five blue turtles) Td ET
您需要找到使用当前指标和字体呈现特征在页面上放置“蓝色”字样的位置,然后将文本拆分并将其转换为您在上面看到的内容。这绝非易事,但希望您使用的库可以为您提供执行指标的工具。
您必须处理的下一个问题是字体编码 - 再次,希望您正在使用的库知道如何处理它,因为字符串中的'a'可能不一定映射到'的字形' a',取决于用于字体子集的算法(我正在查看你,GhostScript)。
然后你可能不得不处理这样一个事实,即你想要使用的字体并不是真正可用的(要么不在文件中,要么它不是一个子集而不是一个完整的字体)。
这甚至都不涉及PDF是文件位置相关文件格式的部分,你也必须应对这一点。
修改强> 在阅读您对其他答案的评论后,您似乎需要阅读更全面使用的库的文档。您需要告诉我们您使用的库,并向我们展示您正在创建这些对象的代码。
例如,如果您使用的是my PDF library(免责声明:我为Atalasoft工作,不是它不是免费的,我写过图书馆,我曾经在Acrobat工作,我不是律师),你' d做这样的事情:
private double MeasureLine(PdfTextLine line, PdfGeneratedDocument doc)
{
PdfFontResource font = doc.Resources.Fonts.Get(line.FontName);
if (font == null) throw new ArgumentException("line");
return font.Metrics.MeasureText(line.Text, line.FontSize).X;
}
PdfGeneratedDocument doc = new PdfGeneratedDocument();
PdfGeneratedPage page = doc.AddPage(PdfDefaultPages.Letter);
string plainFontResName = doc.Resources.Fonts.Add("Arial");
string boldFontResName = doc.Resources.Fonts.Add("Arial");
PdfPoint where = new PdfPoint(72, 300);
PdfTextLine fiveline = new PdfTextLine("five ", where);
fiveline.FontName = plainFontResName; fiveline.FontSize = 12.0;
page.DrawingList.Add(fiveline);
where = new PdfPoint(where.X + MeasureText(fiveline), where.Y);
PdfTextLine blueline = new PdfTextLine("blue ", where);
blueline.FontName = boldFontResName; blueline.FontSize = 12.0;
page.DrawingList.Add(blueline);
where = new PdfPoint(where.X + MeasureText(blueline), where.Y);
PdfTextLine turtlesline = new PdfTextLine("turtles", where);
turtlesline.FontName = plainFontResName; turtlesline.FontSize = 12.0;
page.DrawingList.Add(turtlesline);
doc.Save("somepdf.pdf");
实际上,你可能想要使用像PdfStyledTextBox这样的更高级别的形状对象,或者创建你自己的数字样式会为你改变字体样式。