import java.io.FileOutputStream;
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PRIndirectReference;
import com.lowagie.text.pdf.PRStream;
import com.lowagie.text.pdf.PRTokeniser;
import com.lowagie.text.pdf.PdfContentByte;
import com.lowagie.text.pdf.PdfDictionary;
import com.lowagie.text.pdf.PdfName;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
public class MainClass {
public static void main(String[] args) throws Exception {
Document document = new Document(PageSize.A6);
PdfWriter.getInstance(document, new FileOutputStream("2.pdf"));
document.open();
document.add(new Paragraph("Hello World"));
document.add(new Paragraph("Hello People"));
document.close();
PdfReader reader = new PdfReader("2.pdf");
PdfDictionary page = reader.getPageN(1);
PRIndirectReference objectReference = (PRIndirectReference) page.get(PdfName.CONTENTS);
PRStream stream = (PRStream) PdfReader.getPdfObject(objectReference);
byte[] streamBytes = PdfReader.getStreamBytes(stream);
String contentStream = new String(streamBytes);
System.out.println(contentStream);
PRTokeniser tokenizer = new PRTokeniser(streamBytes);
while (tokenizer.nextToken()) {
if (tokenizer.getTokenType() == PRTokeniser.TK_STRING) {
System.out.println(tokenizer.getStringValue());
}
}
StringBuffer buf = new StringBuffer();
int pos = contentStream.indexOf("Hello World") + 11;
buf.append(contentStream.substring(0, pos));
buf.append("Hello");
buf.append(contentStream.substring(pos));
String hackedContentStream = buf.toString();
document = new Document(PageSize.A6);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(
"HelloWorldStreamHacked.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
cb.setLiteral(hackedContentStream);
document.close();
}
}