使用java编程将pdf可编辑字段转换为文本

使用java编程将pdf可编辑字段转换为文本,java,pdf-generation,itext,Java,Pdf Generation,Itext,我准备了一个可编辑表单,但无法使用java编程将pdf可编辑字段转换为文本 使用的API–pdfbox-app-2.0.0-RC2、pdfbox-0.7.3、itextpdf-5.1.0、pdfclown 请帮助我了解如何在java中将pdf可编辑字段转换为文本 使用java程序(能够将普通pdf转换为文本,但不能将pdf可编辑字段转换为文本) 导入java.io.File; 导入java.io.FileInputStream; 导入java.io.FileOutputStream; 导入jav

我准备了一个可编辑表单,但无法使用java编程将pdf可编辑字段转换为文本

使用的API–pdfbox-app-2.0.0-RC2、pdfbox-0.7.3、itextpdf-5.1.0、pdfclown

请帮助我了解如何在java中将pdf可编辑字段转换为文本

使用java程序(能够将普通pdf转换为文本,但不能将pdf可编辑字段转换为文本)

导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.FileReader;
导入java.io.FileWriter;
导入java.io.BufferedWriter;
导入java.io.IOException;
导入com.itextpdf.text.Document;
导入com.itextpdf.text.pdf.PdfReader;
导入com.itextpdf.text.pdf.parser.PdfTextExtractor;
导入java.awt.Desktop;
导入javax.swing.filechooser.FileNameExtensionFilter;
导入javax.swing.JFileChooser;
公共类PdfConvertor_1{
公共静态void main(字符串[]args){
选择Pdfiles();
}
//允许选择pdf文件进行转换
公共静态void selectPffiles(){
JFileChooser chooser=新的JFileChooser();
FileNameExtensionFilter=新FileNameExtensionFilter(“PDF”、“PDF”);
选择器.setFileFilter(过滤器);
选择器。setMultiSelectionEnabled(真);
int returnVal=chooser.showOpenDialog(null);
if(returnVal==JFileChooser.APPROVE_选项){
File[]Files=chooser.getSelectedFiles();
System.out.println(“请稍候…”);

for(int i=0;i字段不是页面内容流的一部分,因此“从页面获取文本”不会给出字段的值

您需要从PDF中获取表单。表单是从PDF的根字典中引用的,但是有一种方便的方法可以获取
AcroFields
对象。对于使用iTextSharp/C的用户,这个问题已经得到了回答:

在此代码段中,
path\u to\u your\u completed\u表单
是从
JFileChooser
获取的完整路径,
key
是表单中定义的一个字段的值


如果您不知道表单中定义了哪些字段,请阅读问题的答案。该示例中的一些代码允许您在可用字段上循环,并通知您字段是否为文本字段、复选框、单选按钮等等。

那么您基本上想读取输入到玉米字段中的值吗我不确定我们是否将该字段称为com字段。我附上了一张图片,请检查可编辑字段并提出建议。谢谢。@Bruno的回答说明了如何使用iText读取字段值。使用PDFBox或PDFClown比较容易。不过,我想知道,为什么您使用如此旧的iText和PDFBox版本。当前的iText版本是5.5.8和当前的PDFBox版本(在即将发布的2.0.0之前)是1.8.10.PDFBox-app-2.0.0-RC2和PDFBox-0.7.3?非常奇怪。虽然我没有看到任何PDFBox代码。谢谢你的反馈!因为它现在正在工作,你能接受答案吗?
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import java.awt.Desktop;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.JFileChooser;

public class PdfConvertor_1{
 public static void main(String[] args){
  selectPDFFiles();
 }


 //allow pdf files selection for converting
 public static void selectPDFFiles(){

  JFileChooser chooser = new JFileChooser();
      FileNameExtensionFilter filter = new FileNameExtensionFilter("PDF","pdf");
      chooser.setFileFilter(filter);
      chooser.setMultiSelectionEnabled(true);
      int returnVal = chooser.showOpenDialog(null);
      if(returnVal == JFileChooser.APPROVE_OPTION) {
               File[] Files=chooser.getSelectedFiles();
               System.out.println("Please wait...");
               for( int i=0;i<Files.length;i++){     
                convertPDFToText(Files[i].toString(),"textfrompdf"+i+".txt");
                }
   System.out.println("Conversion complete");
                }

  }

 public static void convertPDFToText(String src,String desc){
  try{
   //create file writer
   FileWriter fw=new FileWriter("D:\\POC_Pdf2.txt");
   //create buffered writer
   BufferedWriter bw=new BufferedWriter(fw);
   //create pdf reader
   PdfReader pr=new PdfReader(src);
   //get the number of pages in the document
   int pNum=pr.getNumberOfPages();
   //extract text from each page and write it to the output text file
   for(int page=1;page<=pNum;page++){
    String text=PdfTextExtractor.getTextFromPage(pr, page);
    bw.write(text);
    bw.newLine();

   }
   bw.flush();
   bw.close();



  }catch(Exception e){e.printStackTrace();}

 }

}
PdfReader reader = new PdfReader(path_to_your_completed_form);
AcroFields fields = reader.getAcroFields();
String value = fields.getField(key);