带有 tab/tabstop 或固定宽度技巧的文本 PDF 源代码
PDF sourcecode of text with tab/tabstop or fixed width trick
我有这个变量字符串:
ID#9NAME#9VALUE
这个字符串在 PDF 中是什么样子的?
(ID) Tj (NAME) Tj (VALUE) Tj
我必须将 s 变量转换为 PDF 字符串。
如何将 #9 字符更改为可用的制表符?
我可以把#9字符改成#20的7个字符,但是对我不好,因为I和W是不同的宽度。
有什么技巧吗?
喜欢以百分比表示的水平间距?
(ID) Tj
一些水平间距为 100 像素的代码
(姓名)Tj
一些水平间距为 100 像素的代码
(值) Tj
您的#9 似乎是 ^09 即 (HT)
应该是 x09 in (Base 16 / hex.) or \011 (base 8) or \t in literal string
如果在基本字体中这样定义,那么您应该能够插入它。
(ID\t\tNAME\t\tVALUE) TJ
或
(ID11NAME11VALUE) Tj
然而,正如@mkl 所指出的那样,这些是传统的机械打印机回车挡块,可以将其设置为从行左起 4 或 8 个字符或打印机操作员选择放置缩进或列的任何位置。因此,在文字处理器中,它们的数量和位置变化很大。但在 PDF 中通常会被忽略。
在 PDF 中,更传统的做法是将每个字符块设置在新的 x,y 位置,其中 y 对于该高度处的每个文本块都是常量。
因此,对于制表符在一英寸处的制表符停止方法(基于默认的 1 个单位 =1/72"),试试这个
stream
q
BT
/F1 12 Tf
1 0 0 1 144 720 Tm
(ID) Tj
ET
BT
/F1 12 Tf
1 0 0 1 216 720 Tm
(NAME) Tj
ET
BT
/F1 12 Tf
1 0 0 1 288 720 Tm
(VALUE) Tj
ET
Q
endstream
请记住在 PDF 中所有白色space 是平等的,但有些比其他的更多。
所以这里 find id name value
接受不存在的选项卡作为单个白色 space:-
最后,为了回答您的问题,您可以设置固定 space 从文本的开头到另一个文本的开头,就像使用 Td 的制表位一样。请注意,我故意混合使用 TD 和 Td 来表明在这种情况下它并不重要 :-),但是人类可读的约定是对对象(名词)使用 CAPS 并将“动作”(动词)小写,因此 Td 更好用于肉眼调试。
这个可以按照@mkl的建议来写(我加了一个起点)
50 800 Td (ID) Tj 100 0 Td (NAME) Tj 100 0 Td (VALUE) Tj
在评论中,您询问了有关添加行的问题,对于逐行循环编程,最简单的方法是使用类似这样的方法。 (在这种情况下跳过 780)和我上面的评论相反 BT 和 ET 通常都是大写的。
BT 50 800 Td (ID) Tj 100 0 Td (NAME) Tj 100 0 Td (VALUE) Tj ET
BT 50 760 Td (A1) Tj 100 0 Td (Example) Tj 100 0 Td (2000) Tj ET
BT 50 740 Td (B2) Tj 100 0 Td (Another) Tj 100 0 Td (1000) Tj ET
我有这个变量字符串: ID#9NAME#9VALUE
这个字符串在 PDF 中是什么样子的? (ID) Tj (NAME) Tj (VALUE) Tj
我必须将 s 变量转换为 PDF 字符串。 如何将 #9 字符更改为可用的制表符? 我可以把#9字符改成#20的7个字符,但是对我不好,因为I和W是不同的宽度。
有什么技巧吗? 喜欢以百分比表示的水平间距?
(ID) Tj
一些水平间距为 100 像素的代码
(姓名)Tj
一些水平间距为 100 像素的代码
(值) Tj
您的#9 似乎是 ^09 即 (HT)
应该是 x09 in (Base 16 / hex.) or \011 (base 8) or \t in literal string
如果在基本字体中这样定义,那么您应该能够插入它。
(ID\t\tNAME\t\tVALUE) TJ
或
(ID11NAME11VALUE) Tj
然而,正如@mkl 所指出的那样,这些是传统的机械打印机回车挡块,可以将其设置为从行左起 4 或 8 个字符或打印机操作员选择放置缩进或列的任何位置。因此,在文字处理器中,它们的数量和位置变化很大。但在 PDF 中通常会被忽略。
在 PDF 中,更传统的做法是将每个字符块设置在新的 x,y 位置,其中 y 对于该高度处的每个文本块都是常量。
因此,对于制表符在一英寸处的制表符停止方法(基于默认的 1 个单位 =1/72"),试试这个
stream
q
BT
/F1 12 Tf
1 0 0 1 144 720 Tm
(ID) Tj
ET
BT
/F1 12 Tf
1 0 0 1 216 720 Tm
(NAME) Tj
ET
BT
/F1 12 Tf
1 0 0 1 288 720 Tm
(VALUE) Tj
ET
Q
endstream
请记住在 PDF 中所有白色space 是平等的,但有些比其他的更多。
所以这里 find id name value
接受不存在的选项卡作为单个白色 space:-
最后,为了回答您的问题,您可以设置固定 space 从文本的开头到另一个文本的开头,就像使用 Td 的制表位一样。请注意,我故意混合使用 TD 和 Td 来表明在这种情况下它并不重要 :-),但是人类可读的约定是对对象(名词)使用 CAPS 并将“动作”(动词)小写,因此 Td 更好用于肉眼调试。
这个可以按照@mkl的建议来写(我加了一个起点)
50 800 Td (ID) Tj 100 0 Td (NAME) Tj 100 0 Td (VALUE) Tj
在评论中,您询问了有关添加行的问题,对于逐行循环编程,最简单的方法是使用类似这样的方法。 (在这种情况下跳过 780)和我上面的评论相反 BT 和 ET 通常都是大写的。
BT 50 800 Td (ID) Tj 100 0 Td (NAME) Tj 100 0 Td (VALUE) Tj ET
BT 50 760 Td (A1) Tj 100 0 Td (Example) Tj 100 0 Td (2000) Tj ET
BT 50 740 Td (B2) Tj 100 0 Td (Another) Tj 100 0 Td (1000) Tj ET