pdf文件怎么填写

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pdf文件怎么填写相关的知识,希望对你有一定的参考价值。

注意:一定要使用Adobe Acrobat(而不是Adobe Acrobat
Reader)打开PDF文件进行填表操作(后者只适合PDF阅读使用)
打字需要建立一个文本域,操作如下:
工具---高级编辑工具------文本域工具。.
然后鼠标会变为十字叉,在需要打字的地方拖出一个框,然后会弹出文本域的设置
菜单。一般可以用默认设置,但是如果你要在文本域里打多行的字(特别是粘帖整
篇文章),则必须在‘选项’菜单里把‘多行’一项选中。
工具---高级编辑工具------复选框工具
也是拖出一个框,然后弹出设置菜单。一般需要把边框和填充颜色都设为无,这样
复选框出了勾以外都是透明的。建立文本域或复选框以后在点手型工具就可以进行打字和打勾了
参考技术A

PDF文件,一般需要填写的话,对方直接就以PDF表单形式发给你了,你直接用ADOBE READER打开填写,上面有提交按钮,填写完点提交直接就发给对方了。

如果不是表单,就是一普通表格的话,你可以打印出来手动填写,然后扫描成PDF发给对方

还可以用PDF EDITOR或者ADOBE ACROBAT PRO(不是ADOBE READER)编辑软件打开填写,完成后保存,前者文件小,但操作不太方便,后者文件大,更专业。

参考技术B 可以先把pdf转换成word,网上很多转换器,在word里填写然后另存为pdf格式 参考技术C Adobe Acrobat直接转存word,填好保存为PDF不就好了

从 PDF 表单中提取 PDF 表单字段名称

【中文标题】从 PDF 表单中提取 PDF 表单字段名称【英文标题】:Extract PDF form field names from a PDF form 【发布时间】:2011-01-08 19:56:26 【问题描述】:

我正在使用 pdftk 用 XFDF 文件填写 PDF 表单。但是,对于这个项目,我事先并不知道会出现哪些字段,所以我需要分析 PDF 本身以查看需要填写哪些字段,并相应地向用户呈现一个界面,然后生成一个 XFDF 文件填写PDF表格。

如何获取字段名称?最好是命令行、.NET 或 PHP 解决方案。

【问题讨论】:

Christopher,如果您找到了解决方案,我鼓励您发布并将其标记为答案,以便其他人将来可以从中受益。或者您可以选择delete 链接删除您的问题。 【参考方案1】:

我可以让我的客户使用 Acrobat 将 XFDF 文件(包含字段名称)与 PDF 一起导出,这完全避免了这个问题。

【讨论】:

您是指 Acrobat Reader 还是一些相关的 Acrobat 产品? @christopher-done 请告知您的客户名称,以及如何生成 XFDF 文件【参考方案2】:

我使用了以下代码,使用 WebSupergoo 的 ABCpdf,但我想大多数库都有类似的类:

protected void Button1_Click(object sender, EventArgs e)
    
        Doc thedoc = new Doc();
        string saveFile = "~/docs/f1_filled.pdf";
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        thedoc.Read(Server.MapPath("~/docs/F1_2010.pdf"));
        foreach (Field fld in thedoc.Form.Fields)
        
            if (!(fld.Page == null))
            
                sb.AppendFormat("Field: 0, Type: 1,page: 4,x: 2,y: 3\n", fld.Name, fld.FieldType.ToString(), fld.Rect.Left, fld.Rect.Top, fld.Page.PageNumber);
            
            else
            
                sb.AppendFormat("Field: 0, Type: 1,page: 4,x: 2,y: 3\n", fld.Name, fld.FieldType.ToString(), fld.Rect.Left, fld.Rect.Top, "None");
            
            if (fld.FieldType == FieldType.Text)
            
                fld.Value = fld.Name;
            

        

        this.TextBox1.Text = sb.ToString();
        this.TextBox1.Visible = true;
        thedoc.Save(Server.MapPath(saveFile));
        Response.Redirect(saveFile);
    

这做了两件事: 1) 用所有表单字段的清单填充一个文本框,显示它们的名称、字段类型、页码和页面上的位置(顺便说一下,0,0 是左下角)。 2) 在输出文件中使用其字段名称填充所有文本字段 - 打印输出文件,所有文本字段都将被标记。

【讨论】:

【参考方案3】:

简单!您已经在使用 pdftk

# pdftk input.pdf dump_data_fields

它将输出字段名称、字段类型、它的一些属性(例如下拉列表或文本对齐的选项是什么)甚至是工具提示文本(我发现它非常有用)

我唯一缺少的是字段坐标...

【讨论】:

这应该是选择的答案。或者,如果您有 Adob​​e Professional,则可以单击表单 > 管理表单数据 > 导出数据以将数据导出到 FDF 文件。然后打开 FDF 文件并获取与填充的值关联的字段名称。 太棒了,对我帮助很大(浪费了一天时间寻找解决方案) 这个命令去哪里了?它在 pdftk 的免费版本上可用吗?【参考方案4】:

我的回答很晚,虽然我的解决方案不是 PHP,但我希望如果有人正在寻找 Ruby 的解决方案,它可能会派上用场。

首先是使用 pdftk 提取所有字段名称,然后我们需要清理转储文本,以获得良好的可读哈希:

def extract_fields(filename)
  field_output = `pdftk #filename dump_data_fields 2>&1`
  @fields = field_output.split(/^---\n/).map do |field_text|
    if field_text =~ /^FieldName: (\w+)$/
      $1
    end
  end.compact.uniq
end

其次,现在我们可以使用任何 XML 解析来构造我们的 XFDF:

# code borrowed from `nguyen` gem [https://github.com/joneslee85/nguyen]
# generate XFDF content
def to_xfdf(fields = , options = )
  builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |xml|
    xml.xfdf('xmlns' => 'http://ns.adobe.com/xfdf/', 'xml:space' => 'preserve') 
      xml.f(:href => options[:file]) if options[:file]
      xml.ids(:original => options[:id], :modified => options[:id]) if options[:id]
      xml.fields 
        fields.each do |field, value|
          xml.field(:name => field) 
            if value.is_a? Array
              value.each  |item| xml.value(item.to_s) 
            else
              xml.value(value.to_s)
            end
          
        end
      
    
  end
  builder.to_xml
end

# write fdf content to path
def save_to(path)
  (File.open(path, 'w') << to_xfdf).close
end

维奥拉,这是主要逻辑。如果您正在寻找 Ruby 中的轻量级库,我强烈建议您尝试一下 nguyen (https://github.com/joneslee85/nguyen) gem。

【讨论】:

【参考方案5】:

这对我有用:

 pdftk 1.pdf dump_data_fields output test2.txt

然后当文件用密码加密时,这就是你可以从中读取的方式

 pdftk 1.pdf input_pw YOUR_PASSWORD_GOES_HERE dump_data_fields output test2.txt

这花了我 2 个小时才弄好,所以希望我能节省你一些时间 :)

【讨论】:

请注意,output test2.txt 是可选的。没有它,它只会打印到标准输出。【参考方案6】:

C#/ITextSharp

    public static void TracePdfFields(string pdfFilePath)
    
        PdfReader pdfReader = new PdfReader(pdfFilePath);
        MemoryStream pdfStream = new MemoryStream();
        PdfStamper pdfStamper = new PdfStamper(pdfReader, pdfStream, '\0', true);

        int i = 1;
        foreach (var f in pdfStamper.AcroFields.Fields)
        
            pdfStamper.AcroFields.SetField(f.Key, string.Format("0 : 1", i, f.Key));
            i++;
            //DoTrace("Field = [0] | Value = [1]", f.Key, f.Value.ToString());
        
        pdfStamper.FormFlattening = false;
        pdfStamper.Writer.CloseStream = false;
        pdfStamper.Close();

        FileStream fs = File.OpenWrite(string.Format(@"0/1-TracePdfFields_2.pdf", 
            ConfigManager.GetInstance().LogConfig.Dir, 
            new FileInfo(pdfFilePath).Name, 
            DateTime.Now.Ticks));

        fs.Write(pdfStream.ToArray(), 0, (int)pdfStream.Length);
        fs.Flush();
        fs.Close();
    

【讨论】:

【参考方案7】:

考虑到pdftk是废弃软件,可以使用qpdf库转储JSON格式的元数据,使用jq只过滤表单相关数据:

qpdf inout.pdf --json | jq '.acroform.fields'

qpdf 是一个轻量级的跨平台 FOSS 库,jq 是一个 JSON 过滤程序(就像 grep 是一个行过滤程序)。如果您不想使用 jq 或 JSON,您可以随时使用 qpdf input.pdf 转储,然后自己在转储中查找元数据。

【讨论】:

以上是关于pdf文件怎么填写的主要内容,如果未能解决你的问题,请参考以下文章

怎样把html转化为pdf文件

打印PDF文件但文本框显示不了

PHP:预先填写 PDF 文件的字段并将其保存为默认值

读取 PDF 表单文件并返回可填写的字段坐标和字段名称

电脑截图转pdf

Android:打开现有 PDF 文件检查并填写复选框字段,然后保存文档的新版本