文本编辑器中的PDF表单字段

文本编辑器中的PDF表单字段,pdf,acrobat,Pdf,Acrobat,长话短说;我想只使用文本编辑器编辑pdf表单中的只读字段。我已经成功了,但我想了解为什么在某些情况下它不起作用 我注意到如果我有一个PDF 1.5版本的原始文档(没有字段,由Word 2010保存为PDF),并添加AcROAT PRO席的字段,请使用另存为另一个保存…->优化PDF并使其与Acrobat 6.0兼容。我的字段在文本编辑器(notepad++)中的外观如下: endobj 28 0 obj 流动 /Tx BMC Q 11148 20 re W N 英国电信 /Helv 12 Tf

长话短说;我想只使用文本编辑器编辑pdf表单中的只读字段。我已经成功了,但我想了解为什么在某些情况下它不起作用

<>我注意到如果我有一个PDF 1.5版本的原始文档(没有字段,由Word 2010保存为PDF),并添加AcROAT PRO席的字段,请使用另存为另一个保存…->优化PDF并使其与Acrobat 6.0兼容。我的字段在文本编辑器(notepad++)中的外观如下:


endobj
28 0 obj
流动
/Tx BMC
Q
11148 20 re
W
N
英国电信
/Helv 12 Tf
0克
2 6.548 Td
(mytextfield)Tj
这很容易修改,因为每次看到“mytextfield”时,它都是我字段的内容,在看到“%mytextfield”时,它是我字段的名称

<席>另一方面,如果我使用PDF 1.5(用Word 2010保存),而不是使用AcROCAT PROXI保存优化的保存(添加字段之后),通常保存(保存为),我得到以下PDF 1.6(在记事本+中):


endobj
19 0 obj
endobj
20 0 obj
流动
/Tx BMC
Q
11148 20 re
W
N
英国电信
/Helv 12 Tf
0克
2 6.548 Td
(mytextfield)Tj
这不是一个容易编辑字段的格式(如果我更改mytextfield,我会得到一个损坏的文档!)。现在,如果我在acrobat pro中打开这个PDF 1.6并使用上面提到的优化PDF技巧保存它,字段将转换为第一个字段,那就好了;但事实并非如此!相反,我得到了完全相同的字段格式

因此,我的问题如下:

  • 是否有办法确保使用Acrobat Pro或任何其他程序将我的pdf表单(无论原始pdf版本是什么)转换为正确的格式(字段易于编辑)
  • 有没有办法轻松编辑PDF 1.6字段

  • 评论中的OP明确表示,在编辑过程中,他将PDF数据替换为更长或更短的数据

    这通常是一个坏主意,因为PDF文件有一个交叉引用表(或流),指示每个间接对象的各自偏移量(每个
    nnn 0 obj…endobj
    )。用不同长度的数据替换PDF数据会使编辑位置之后的对象的这些交叉引用信息无效

    因此,要在编辑后获得有效的PDF,至少必须更新交叉引用信息,这在纯文本编辑器中是一个真正的麻烦(在交叉引用表的情况下),甚至几乎不可能(在压缩交叉引用流的情况下)

    有关详细信息,请参见PDF规范

    此外,OP表示,他在编辑后通过在PDF查看器中打开文档来检查文档的有效性

    这也不是一个好主意,因为众所周知的PDF查看器通常倾向于在不一定显示的情况下尝试动态修复无效的PDF。操作PDF的程序通常需要有效的PDF(至少在它们正在操作的方面是有效的)作为输入,因此,可能会拒绝或(甚至更糟)篡改已编辑的PDF

    OP表示其任务已在中描述。除非有合适的JS库,否则他必须根据自己的需要编写一个JS库

    在这里尝试使用增量更新,而不是操纵源PDF的内部信息,这可能是有利的。关于这一点,请参阅上述规范中的第7.5.6节增量更新

    PSOP问

    增量更新是否适用于只读字段


    增量更新只是组织更改的另一种方式—您可以在原始文件中更改的所有内容也可以使用增量更新进行更改。实际上,您甚至可以使用增量更新进行更多操作:对于已签名的文档,通常仍允许对文档进行某些更改,但这些更改必须作为增量更新进行,否则签名将在结构上被破坏。

    在编辑字段内容的过程中,是否确保不更改字段内容的大小?如果没有,是否相应地更新CRIS引用?如果你不这样做,你肯定会创建无效的文档。你是在说我的第二个问题吗?如果是,我尝试更改bbox标签中的长度,但没有帮助。我还试图保持相同的文本长度,但没有成功。请注意,在1.5版中,我甚至不需要更改长度!PS什么是CRIS参考?不,我说的是你的总体编辑。PDF文件有一个交叉引用表(或流),指示每个间接对象(每个nnn 0 obj…endobj)的各自偏移量。如果在编辑过程中用较长或较短的内容替换某些内容,则会打断这些交叉引用。顺便问一下,你是如何测试你的编辑是否正确的?希望不仅仅是在PDF查看器中打开文件。PDF查看器经常在运行中修复PDF…是的,通过查看查看器(阅读器):o)好的,那么我到底应该怎么做?我理解交叉引用的事情,但是有任何文档可以解释这一点吗?或者你能一步一步地告诉我该怎么做吗?谢谢基本上,在文本编辑器中手动编辑PDF是一种可靠的方法。因此,我的建议是不要这样做。如果你还想试试,你会找到文档的。非常好的答案!还有两个问题:增量更新是否适用于只读字段?如果是,我如何通过acrobat(或任何其他程序)添加增量更新,以便查看它在文本编辑器中的结构?对于第二个问题,我如何添加增量更新?如果您有允许添加批注的签名文档,请使用当前的Adobe Reader或acrobat添加此类批注;此更改将作为增量更新自动完成。在前一个问题中,你提到了iText;如果您对Java没有意见,请创建一个
    PdfStamper
    ,它由
    append
    参数设置为
    true
    <</AP<</N 28 0 R>>/DA(/Helv 12 Tf 0 g)/DV(mytextfield)/F 4/FT/Tx/Ff 1/MK<<>>/P 3 0 
    
    R/Rect[99.4934 686.99 249.493 708.99]/Subtype/Widget/T(%mytextfield)/Type/Annot/V(mytextfield)>>
    endobj
    28 0 obj
    <</BBox[0.0 0.0 150.0 22.0]/FormType 1/Length 88/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 20 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
    /Tx BMC 
    q
    1 1 148 20 re
    W
    n
    BT
    /Helv 12 Tf
    0 g
    2 6.548 Td
    (mytextfield) Tj
    
    <</AcroForm 25 0 R/Lang(fr-CH)/MarkInfo<</Marked true>>/Metadata 3 0 R/Pages 15 0 R/StructTreeRoot 8 0 R/Type/Catalog>>
    endobj
    19 0 obj
    <</Annots 26 0 R/Contents 22 0 R/CropBox[0 0 595.32 841.92]/Group<</CS/DeviceRGB/S/Transparency/Type/Group>>/MediaBox[0 0 595.32 841.92]/Parent 15 0 R/Resources<</ExtGState<</GS0 30 0 R>>/Font<</TT0 33 0 R>>/ProcSet[/PDF/Text]>>/Rotate 0/StructParents 0/Tabs/S/Type/Page>>
    endobj
    20 0 obj
    <</BBox[0.0 0.0 150.0 22.0]/FormType 1/Length 85/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</Font<</Helv 28 0 R>>/ProcSet[/PDF/Text]>>/Subtype/Form/Type/XObject>>stream
    /Tx BMC 
    q
    1 1 148 20 re
    W
    n
    BT
    /Helv 12 Tf
    0 g
    2 6.548 Td
    (mytextfield) Tj