Java PDF文本替换无法正常工作
我使用此处给出的代码替换.pdf文件中的文本Java PDF文本替换无法正常工作,java,pdf,pdfbox,Java,Pdf,Pdfbox,我使用此处给出的代码替换.pdf文件中的文本 public void doIt( String inputFile, String outputFile, String strToFind, String message) throws IOException, COSVisitorException { // the document PDDocument doc = null; try { doc = PDDocument.load( inpu
public void doIt( String inputFile, String outputFile, String strToFind, String message) throws IOException, COSVisitorException
{
// the document
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;
//Tj and TJ are the two operators that display
//strings in a PDF
if( op.getOperation().equals( "Tj" ) )
{
//Tj takes one operator and that is the string
//to display so lets update that operator
COSString previous = (COSString)tokens.get( j-1 );
String string = previous.getString();
if (string.matches(strToFind)) {
string = string.replaceFirst( strToFind, message );
previous.reset();
previous.append( string.getBytes("ISO-8859-1") );
}
}
else if( op.getOperation().equals( "TJ" ) )
{
COSArray previous = (COSArray)tokens.get( j-1 );
for( int k=0; k<previous.size(); k++ )
{
Object arrElement = previous.getObject( k );
if( arrElement instanceof COSString )
{
COSString cosString = (COSString)arrElement;
String string = cosString.getString();
if (string.matches(strToFind))
{
string = string.replaceFirst( strToFind, message );
cosString.reset();
cosString.append( string.getBytes("ISO-8859-1") );
}
}
}
}
}
}
//now that the tokens are updated we will replace the
//page content stream.
PDStream updatedStream = new PDStream(doc);
OutputStream out = updatedStream.createOutputStream();
ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
tokenWriter.writeTokens( tokens );
page.setContents( updatedStream );
}
doc.save( outputFile );
}
finally
{
if( doc != null )
{
doc.close();
}
}
}
由于这种奇怪的读数,替换功能不起作用。请告知我如何修改代码以使用所有格式。如何修改代码以使用所有格式。-你不能,它甚至需要大量的编码才能使它适用于大多数常见的情况。PDF不是为编辑而设计的格式。这是我作业的一部分。有些人告诉我该怎么做。我们没有办法让它工作?请帮助我使其正常工作。对于通用PDF,您的分配意味着大量工作,即使这样,您也无法编辑所有PDF。另一个问题是,替换的图示符的大小与原始图示符的大小不同。首先,只要你的任务是让这些替代品在所有PDF中都能正常工作,就可以要求一个不同的任务。另一方面,如果作业仅限于某些类型的PDF,请在此处描述。也许这种限制使你的任务变得合理。
A
d
obe
A
c
r
obat PDF Fi
les
Adobe® Portable Do
cument F
o
rm
at (PDF
) is
a universal
file
format