Java tutorial
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(); } }