3

我有一个使用 R 生成的 pdf(一个简单的折线图),并且只与纯文本流一起存储。用于生成图表的数据已经丢失,我想通过编辑 pdf 来修改轴标签。

我发现这一行:

/F2 1 Tf 12.00 0.00 -0.00 12.00 238.73 18.72 Tm (**Error Rate**) Tj

这似乎控制了我想要的轴标签(当前显示“错误率”)。改成这样说:

/F2 1 Tf 12.00 0.00 -0.00 12.00 238.73 18.72 Tm (**Different Label**) Tj

确实会导致轴标签更改为“不同标签”。

现在,我希望新标签是“Mu”。如,希腊字母 Mu。我知道这是可能的,因为我可以在 R 中生成带有希腊字母的轴标签中的 pdf。

我的第一个想法是使用 vim trigraph ctrl+km* 手动输入 Mu 的 UTF-8 字符,也可以通过字符映射等,给出:

/F2 1 Tf 12.00 0.00 -0.00 12.00 238.73 18.72 Tm ( μ ) Tj

如果我在执行此操作后尝试写入文件,我会收到一条错误消息“xyz 行中的转换错误”,其中 xyz 是修改后的行。打开保存的 pdf 会显示一个“?” 为轴标签。

pdf如何编码mu?如何相应地修改标签?

4

3 回答 3

4

PDF 文件是二进制文件,在大多数情况下将它们修改为文本文件会损坏它们。为了保持文件有效,您需要更新外部参照表(有关更多详细信息,请参阅 PDF 规范)。如果整个文件的字节数发生变化,您将需要更新外部参照表的每个条目以使文件保持有效。另一种选择可能是一起删除外部参照表,并通过另一个可以为您“猜测”它的工具传递生成的文件。过去我用 ghostscript做过这个,效果很好。

关于字体的问题,/F2 对应的是哪个字体?它是否部分嵌入在 PDF 文件中?如果是,您可能在文件中没有添加字符 μ 所需的信息。

于 2012-09-20T16:02:17.130 回答
3

我试过这个:

pdf("testmu.pdf",compress=FALSE)
plot(1:10,1:10,xlab="abc",ylab=expression("LABEL "*mu))
dev.off()

并在结果文件中找到以下块:

BT
/F2 1 Tf 0.00 12.00 -12.00 0.00 10.28 235.40 Tm (LABEL ) Tj
ET
BT
/F6 1 Tf 0.00 12.00 -12.00 0.00 10.28 276.09 Tm (m) Tj
ET

所以我怀疑如果你使用

/F6 1 Tf 12.00 0.00 -0.00 12.00 238.73 18.72 Tm ( m ) Tj

在您上面的示例中,它应该可以工作。我不知道 R 是否总是定义F6(符号字体),所以你可能还需要按照这些思路修改一些东西:

13 0 obj
<< /Type /Font /Subtype /Type1 /Name /F6 /BaseFont /Symbol
>>

编辑:正如在另一个答案中所指出的,以及它下面的评论,看来您还需要通过(我认为)搜索手动更新外部参照计数xref,找到一个像

xref
0 13

并增加第二个值...

于 2012-09-20T16:23:45.870 回答
2

正如@yms 指出的那样,PDF 通常在文本编辑器中不可编辑,因为它们很可能包含二进制数据,并且如果在 PDF 中插入或删除字符,则需要更新外部参照表。如果您必须编辑 pdf,请使用qpdf编辑PDF

于 2012-09-21T08:07:38.917 回答