查看PDF语法流BT ET我有一些问题,我无法理解PDF32000操作手册:
良好的在线资源链接也很棒......
BT /F1 24 Tf ... (My String is here)Tj ET
看一下这段代码,
\n\r
没有帮助我知道我可以使用PDFKit和PDFJS等...但我真的想知道 PDF语法的工作原理,在线PDF32000手册真的很长很复杂......
答案 0 :(得分:6)
首先,Michaël当然是对的
不幸的是,如果您想了解PDF语法的工作原理,您需要阅读规范。当然,您只能阅读适用于文本的部分,第9章,可能只有9.2。但是,本章当然假设您了解PDF在结构上的工作原理以及对象的类型。我建议阅读它。
为了给你一些印象,这里有一些问题的答案......
如何插入换行符?使用\ n \ r没有帮助
通过将文本分成不同的行来绘制文本,每行一个,并分别绘制它们,通过重新定位当前文本位置前进到下一行。有不同的方法来重新定位。 E.g。
(Line 1 text) Tj
0 -20 Td
(Line 2 Text) Tj
如何在字符串中间将字体粗细更改为粗体
选择粗体字体,例如
/MyNormalFont 12 Tf
(Normal text - ) Tj
/MyBoldFont 12 Tf
(bold text) Tj
/MyNormalFont 12 Tf
( - normal text again) Tj
您可以输出“普通文字 - 粗体文字 - 再次播放正常文字”。
(还有一些穷人的大胆效果,比如双重打印带有小偏移的字母......)
尝试过英语以外的其他语言并且无法正确使用,我怎么能做其他语言,希伯来语,阿拉伯语,中文等...改变字体没有帮助,编码到UTF16也无济于事,我应该编码到不同的东西并在某处设置编码吗?
您必须声明字体才能在内容流中使用它们。在此声明中,您特别定义了用于使用相关字体绘制的文本的编码。对于上面的样本,编码必须是ASCII'ish,例如 WinAnsiEncoding ,但您经常会找到其他编码,尤其是非英文文本。
为此,您必须考虑字体类型的资源。详情请参阅规范第9章。
另请参阅下面“非拉丁字符”下的示例。
如何将文字限制为一定宽度
通过绘制足够的字符。
见上文,在将字符串绘制指令放入内容流之前,必须将其拆分为行。只需根据需要选择这些行。
如何设置行高属性
你的意思是从一条线的底部到下一条底线的距离?或者你的意思是字体高度?
如何选择前一距离取决于您前一行的方式,请参阅上面的“换行符”。如果您在那里的例子中这样做,那么使用
进入下一行20个单位0 -20 Td
您可以在字体选择指令中设置后一个高度,字体高度,例如在“字体重量”上面
/MyNormalFont 12 Tf
选择 MyNormalFont ,大小为12个单位。
关于那些单位:单位通常以1/72英寸开始,但通过更改变换矩阵(参见规范第8节),您可以更改它。
在同一行中混合多种字体
请参阅上面的“字体粗细”,使用不同的字体实现不同的字体粗细。
来自评论:
你能举例说明插入英语以外的外语吗?
您拥有的一个选项是创建一个PDF字体,将您需要的字符按名称从给定的字体程序映射到0..255范围,以进行单字节编码。这对希伯来语或阿拉伯语写作是好的,但对于CJK写作则不那么好。
由于你只要求一个字符,我只在示例中添加一个字符...此外,我使用Arial并期望有问题的PDF查看器在手边的系统中找到,即我没有嵌入它。
因此,对于在代码为32的Adobe Glyph List中放置阿拉伯字符alef maksura并命名为 alefmaksuraarabic 的字体(ASCII派生编码中的 space ),你可以使用:
1 0 obj
<<
/Type /Font
/Subtype /TrueType
/BaseFont /Arial
/Encoding
<<
/BaseEncoding /WinAnsiEncoding
/Differences [ 32 /alefmaksuraarabic ]
>>
/FirstChar 32
/LastChar 32
/FontDescriptor 2 0 R
/Widths [ 600 ]
>>
endobj
2 0 obj
<<
/Type /FontDescriptor
/FontName /Arial
/StemV 44
/Leading 33
/Ascent 905
/Flags 32
/XHeight 250
/FontWeight 400
/AvgWidth 441
/Descent -210
/CapHeight 728
/MaxWidth 2665
/FontBBox [-665 -210 2000 728]
/ItalicAngle 0
>>
endobj
标准 Times-Roman / WinAnsiEncoding 字体为字体资源 F ,上面定义的字体为字体资源 G < / strong>,你可以写
BT
/F 12 Tf
15 815 Td
(Test: ) Tj
/G 12 Tf
( ) Tj
ET
进入您的内容流并获取