我有一个使用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 + k m *手动输入Mu的UTF-8字符,并通过字符映射等,给出:
/F2 1 Tf 12.00 0.00 -0.00 12.00 238.73 18.72 Tm ( μ ) Tj
如果我在执行此操作后尝试写入文件,则会收到错误消息“行xyz中的CONVERSION ERROR”,其中xyz是修改后的行。打开保存的pdf会显示“?”用于轴标签。
pdf如何编码mu?如何相应修改标签?
答案 0 :(得分:4)
PDF文件是二进制文件,在大多数情况下将其修改为文本文件会损坏它们。为了使文件保持有效,您需要更新外部参照表(有关详细信息,请参阅PDF规范)。如果整个文件的字节数发生更改,则需要更新外部参照表的每个条目以使文件保持有效。另一种选择可能是一起删除外部参照表,并通过另一个可以“猜测”它的工具传递结果文件。我过去做过with ghostscript并取得了不错的成绩。
关于字体的问题,字体/ F2对应?它是否部分嵌入PDF文件中? 如果是,您可能在文件中没有所需的信息来添加字符μ。
答案 1 :(得分: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
并递增第二个值...
答案 2 :(得分:2)
正如@yms指出的那样,PDF通常在文本编辑器中不可可编辑,因为它们很可能包含二进制数据和具有需要更新的外部参照表如果在PDF中插入或删除了chracters。如果必须编辑pdf,请使用qpdf至edit the PDF。