如何更改已创建的某些pdf对象中的某些内容?

时间:2014-01-23 13:39:11

标签: pdf fonts vb6

我正在使用pdf导出功能,我的问题是将我正在使用的字体更改为我的文档的一小部分。

我需要创建一个用粗体写的新对象吗?或者我可以更改已创建的字体对象吗?我怎么能这样做?

1 个答案:

答案 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这样的更高级别的形状对象,或者创建你自己的数字样式会为你改变字体样式。