如何插入" \\" PDF文本中的字符?我手动写文件

时间:2015-03-03 19:15:19

标签: pdf

我正在手写PDF文件......

我在文本文件中添加了一些代码。当我将文件扩展名更改为“.pdf”时,我们可以看到PDF文件。

问题在于文本中的反斜杠......

我的文件内容包括:

\\127.0.0.1\

但是当我打开生成的.pdf文件时,我看到的文字没有反斜杠:

\127.0.0.1\

我的代码:

    %PDF-1.2 
    %ÓÓÓÓ
    1 0 obj
    <<
    /Creator  (Dinesh Asanka PSOPDF)
    /Producer (VB to PDF dineshasanka@hotmail.com)
    /Title (VBTOPDF)
    >>
    endobj
    4 0 obj
    <<
    /Type /Font
    /Subtype /Type1
    /Name /F1
    /Encoding 5 0 R
    /BaseFont /Courier
    >>
    endobj
    5 0 obj
    <<
    /Type /Encoding
    /BaseEncoding /WinAnsiEncoding
    >>
    endobj
    6 0 obj
    <<
    /Font << /F1 4 0 R   >>  /ProcSet [ /PDF  /Text ]
    >>
    endobj
    7 0 obj
    <<
    /Type /Page
    /Parent 3 0 R
    /Resources 6 0 R
    /Contents 8 0 R
    >>
    endobj
    8 0 obj
    <<
    /Length 9 0 R
    >>
    stream
    BT
    /F1 10 Tf
    1 0 0 1 1 780 Tm
    12 TL
    T* (                                          Impressoras de NF) Tj
    T* (                                                                                      Loja Logada: 1) Tj
    T* (                                                                                    Data: 03/03/2015) Tj
    T* (                                                                                      Versao: 4.0.2u) Tj
    T* (------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------) Tj
    T* (            IP Nome              Localização Store Serie ) Tj
    T* (               Impressora                               ) Tj
    T* (------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------) Tj
    0.392 0.392 0.392 rg
    T* ( 192.168.17.22 192.168.17.22\pdf PDF            1     1 ) Tj
    0.000 0.000 0.000 rg
    T* (  192.168.17.6 \\Directory\EPSONNF  CPD            1     0 ) Tj
    0.392 0.392 0.392 rg
    T* (          ) Tj
    ET
    endstream
    endobj
    9 0 obj
    315
    endobj
    2 0 obj
    <<
    /Type /Catalog
    /Pages 3 0 R
    /PageLayout /OneColumn
    >>
    endobj
    3 0 obj
    <<
    /Type /Pages
    /Count 1
    /MediaBox [ 0 0 612 792 ]
    /Kids [ 7 0 R ]
    >>
    endobj
    xref
    010
    0000000000 65535 f
    0000000017 00000 n
    0000000880 00000 n
    0000000959 00000 n
    0000000144 00000 n
    0000000247 00000 n
    0000000321 00000 n
    0000000396 00000 n
    0000000484 00000 n
    0000000858 00000 n
    trailer
    <<
    /Size 10
    /Root 2 0 R
    /Info 1 0 R
    >>
    startxref
    1052
    %%EOF

如何用两个反斜杠打印我的地址?

2 个答案:

答案 0 :(得分:3)

除了@ Kurt的回答:

反向实体\不仅用作任何八进制编码字符的起始标记。相反,它可以用于不同的目的:

Sequence Meaning
\n       LINE FEED (0Ah) (LF)
\r       CARRIAGE RETURN (0Dh) (CR)
\t       HORIZONTAL TAB (09h) (HT)
\b       BACKSPACE (08h) (BS)
\f       FORM FEED (FF)
\(       LEFT PARENTHESIS (28h)
\)       RIGHT PARENTHESIS (29h)
\\       REVERSE SOLIDUS (5Ch) (Backslash)
\ddd     Character code ddd (octal)
     

(表3 - 文字字符串中的转义序列,PDF spec

因此,您也可以获得所需的输出:

0.392 0.392 0.392 rg
T* ( 192.168.17.22 192.168.17.22\\pdf PDF            1     1 ) Tj
0.000 0.000 0.000 rg
T* (  192.168.17.6 \\\\Directory\\EPSONNF  CPD            1     0 ) Tj
0.392 0.392 0.392 rg
T* (          ) Tj

PS:尽管该表中提到了CR,LF等,它们不能用于打破文本绘制 中的行以及这种文本绘制操作。< / p>

答案 1 :(得分:2)

  

“问题在于文本中的反斜杠......”

这不是您文件的唯一问题。另请参阅我的答案的最底层。例如,请参阅PDF源代码中的这个词的呈现方式:

Localização

只要您的文字需要非ASCII字符,就不能再使用简单的

(some string) Tj

再接近。您必须切换(至少对于使用非ASCII的文本部分)文本/字符串编码。

您有两种选择。

1。使用<aa bb cc...>(十六进制)方法

some string的示例:

<73 6f 6d 65 20 73 74 72 69 6e 67>Tj

请注意,您可以在<....>十六进制部分内自由使用空格,如下所示:

<73  6f6d65 2073  74 72 69 6e67>Tj

并且它对渲染文本没有任何影响。

但是,这不会涵盖 所有 您使用的/WinAnsiEncoding中可用的字符。

2。或者使用(\NNN\MMM\...)(八进制)方法

相同的例子,some string

(\163\157\155\145\040\163\164\162\151\156\147) Tj

您可以在同一(...)字符串中混合使用八进制字符编码:

(s\157\155\145 \163\164\162ing) Tj

现在你也可以猜测为什么文字\在字符串中不起作用:因为它作为任何八进制编码字符的起始标记。

3。现在为你的\字符

作为十六进制值,\字符由5c显示。

作为八进制值(/WinAnsiEncoding),它是\134

因此,您可以将\\Directory\EPSONNF字符串写为

 (\134\134Directory\134EPSONNF) Tj

 <5c5c>Tj (Directory\134EPSONNF) Tj

(您无法在<..> Tj方法中混合使用(...) Tj方法...)

4。最后,您的Localização字符串

试试这个:

(Localiza\347\343o) Tj

5。 PDF的更多问题

最后,您的PDF还有一些问题:

  1. startxref的值不正确。
  2. xref条目中的行长度必须正好为20个字符(包括EOL字符)。如果使用单字节EOL,则必须添加尾随空格字符(在fn字符之后)。
  3. xref之后的行必须是0 10,而不是010
  4. xref行的值本身是错误的。 (甚至没有一个是正确的。)