Java 替换PDF文件中的数据

Java 替换PDF文件中的数据,java,itext,pdfbox,Java,Itext,Pdfbox,我必须替换之间的字符串。但是我不能这样做 public void doIt( String inputFile, String outputFile) throws IOException, COSVisitorException { PDDocument doc = null; try { doc = PDDocument.load( inputFile ); List pages = doc.getDocumentCatalog().

我必须替换
之间的字符串。但是我不能这样做

public void doIt( String inputFile, String outputFile) throws IOException, COSVisitorException
{

    PDDocument doc = null;
    try
    {
        doc = PDDocument.load( inputFile );
        List pages = doc.getDocumentCatalog().getAllPages();
        for( int i=0; i<pages.size(); i++ )
        {
            PDPage page = (PDPage)pages.get( i );
            PDStream contents = page.getContents();
            PDFStreamParser parser = new PDFStreamParser(contents.getStream());
            parser.parse();
            List tokens = parser.getTokens();
            for( int j=0; j<tokens.size(); j++ )
            {
                Object next = tokens.get( j );
                if( next instanceof PDFOperator )
                {

                    PDFOperator op = (PDFOperator)next;
                    if( op.getOperation().equals( "Tj" ))

                    {
                        Scanner in = new Scanner(System.in);
                        COSString previous = (COSString)tokens.get( j-1 );
                        String string = previous.getString();
                        if(string.startsWith("<<") && string.endsWith(">>"))
                        {
                        System.out.println(string);
                        System.out.println("enter the word to be replaced");
                        String string2=in.nextLine();
                        string = string.replaceAll( string, string2 );
                        previous.reset();
                        previous.append( string.getBytes() );
                        }
                    }     
                    else if( op.getOperation().equals( "TJ" ))
                    {
                        COSArray previous = (COSArray)tokens.get( j-1 );
                        for( int k=0; k<previous.size(); k++ )
                        {
                            Scanner in = new Scanner(System.in);
                            Object arrElement = previous.getObject( k );
                            if(arrElement instanceof COSString)
                            {
                                COSString cosString = (COSString)arrElement;
                                String string = cosString.getString();
                                if(string.startsWith("<<") && string.endsWith(">>"))
                                {
                                    System.out.println(string);
                                    System.out.println("enter the word to be replaced");
                                    String string2=in.nextLine();
                                    string = string.replaceAll( string, string2 );
                                    cosString.reset();
                                    cosString.append( string.getBytes());
                                }
                            }
                        }
                    }
                }
            }
            PDStream updatedStream = new PDStream(doc);
            OutputStream out = updatedStream.createOutputStream();
            ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
            tokenWriter.writeTokens(tokens);
            page.setContents(updatedStream);
        }
        doc.save( outputFile );
        System.out.println("Done!! Now You can Open.");
    }
    finally
    {
        if( doc != null )
        {
            doc.close();
        }
    }
}
public void doIt(String inputFile,String outputFile)抛出IOException,COSVisitorException
{
PDDocument=null;
尝试
{
doc=PDDocument.load(输入文件);
列表页面=doc.getDocumentCatalog().getAllPages();
对于(int i=0;i请阅读的简介。您假设PDF是一种用于编辑文本的格式。PDF不是为文字处理而设计的

当然:也许你在问如何创建一个静态表单,正如我在书的第6.3.5节中所解释的,但是我怀疑AcroForm技术的静态特性是否能满足你的需要可能会解决您的问题,但解释XFA不是在答案范围内可以完成的事情。XFA规范有几百页长。正如Duncan Jones的评论所指出的,您应该首先做一些准备工作。

请阅读的简介。您假设PDF是一种用于编辑文本的格式。PDF不是专为文字处理而设计


当然:也许你在问如何创建一个静态表单,正如我在书的第6.3.5节中所解释的,但是我怀疑AcroForm技术的静态特性是否能满足你的需要可能会解决您的问题,但解释XFA不是在答案范围内可以完成的事情。XFA规范有几百页长。正如Duncan Jones的评论所指出的,您应该首先做一些准备工作。

问题必须表明对正在解决的问题的最低理解。请告诉我们您的想法你已经试过了,为什么它不起作用,以及它应该如何起作用。本质上是的一个副本。问题必须表明对正在解决的问题的最低理解。告诉我们你试过了什么,为什么它不起作用,以及它应该如何起作用。本质上是的一个副本。