Java Tutorial/PDF/Introduction
Содержание
Create Empty page
<source lang="java">
import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowagie.text.Paragraph; import com.lowagie.text.pdf.PdfWriter; public class MainClass {
public static void main(String[] args) throws Exception { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("2.pdf")); document.open(); writer.setPageEmpty(true); document.newPage(); writer.setPageEmpty(false); document.newPage(); document.add(new Paragraph("Hello World")); document.newPage(); writer.setPageEmpty(true); document.newPage(); document.close(); }
}</source>
Create your first Pdf document with Java
<source lang="java">
import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowagie.text.Paragraph; import com.lowagie.text.pdf.PdfWriter; public class GeneratesPDFFileWithText {
public static void main(String[] args) throws Exception { Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("HelloWorld.pdf")); document.open(); document.add(new Paragraph("Hello World")); document.close(); }
}</source>
inspects a PDF file
<source lang="java">
import java.io.FileOutputStream; import java.io.PrintStream; import java.util.Iterator; import com.lowagie.text.pdf.PRStream; import com.lowagie.text.pdf.PRTokeniser; import com.lowagie.text.pdf.PdfArray; import com.lowagie.text.pdf.PdfDictionary; import com.lowagie.text.pdf.PdfIndirectReference; import com.lowagie.text.pdf.PdfLister; import com.lowagie.text.pdf.PdfName; import com.lowagie.text.pdf.PdfObject; import com.lowagie.text.pdf.PdfReader; public class MainClass {
public static void main(String[] args) throws Exception { PdfReader reader = new PdfReader("2.pdf"); PrintStream list = new PrintStream(new FileOutputStream("2.txt")); PdfLister lister = new PdfLister(new PrintStream(list)); PdfDictionary trailer = reader.getTrailer(); lister.listDict(trailer); PdfIndirectReference info = (PdfIndirectReference) trailer.get(PdfName.INFO); lister.listAnyObject(info); lister.listAnyObject(reader.getPdfObject(info.getNumber())); PdfDictionary root = reader.getCatalog(); lister.listDict(root); PdfDictionary outlines = (PdfDictionary) reader.getPdfObject(((PdfIndirectReference) root .get(PdfName.OUTLINES)).getNumber()); lister.listDict(outlines); PdfObject first = reader.getPdfObject(((PdfIndirectReference) outlines.get(PdfName.FIRST)) .getNumber()); lister.listAnyObject(first); PdfDictionary pages = (PdfDictionary) reader.getPdfObject(((PdfIndirectReference) root .get(PdfName.PAGES)).getNumber()); lister.listDict(pages); PdfArray kids = (PdfArray) pages.get(PdfName.KIDS); PdfIndirectReference kid_ref; PdfDictionary kid = null; for (Iterator i = kids.getArrayList().iterator(); i.hasNext();) { kid_ref = (PdfIndirectReference) i.next(); kid = (PdfDictionary) reader.getPdfObject(kid_ref.getNumber()); lister.listDict(kid); } PdfIndirectReference content_ref = (PdfIndirectReference) kid.get(PdfName.CONTENTS); PRStream content = (PRStream) reader.getPdfObject(content_ref.getNumber()); lister.listDict(content); byte[] contentstream = PdfReader.getStreamBytes(content); list.println(new String(contentstream)); PRTokeniser tokenizer = new PRTokeniser(contentstream); while (tokenizer.nextToken()) { if (tokenizer.getTokenType() == PRTokeniser.TK_STRING) { list.println(tokenizer.getStringValue()); } } }
}</source>
PdfDictionary
<source lang="java">
import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowagie.text.PageSize; import com.lowagie.text.pdf.BaseFont; 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.PdfTemplate; import com.lowagie.text.pdf.PdfWriter; public class MainClass {
public static void main(String[] args) throws Exception { Document document = new Document(PageSize.A6); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("2.pdf")); document.open(); PdfContentByte cb = writer.getDirectContent(); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED); cb.beginText(); cb.setFontAndSize(bf, 12); cb.moveText(88.66f, 367); cb.showText("ld"); cb.endText(); PdfTemplate tmp = cb.createTemplate(250, 25); tmp.beginText(); tmp.setFontAndSize(bf, 12); tmp.moveText(0, 7); tmp.showText("Hello People"); tmp.endText(); cb.addTemplate(tmp, 36, 343); 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); PRTokeniser tokenizer = new PRTokeniser(streamBytes); while (tokenizer.nextToken()) { if (tokenizer.getTokenType() == PRTokeniser.TK_STRING) { System.out.println(tokenizer.getStringValue()); } } }
}</source>
PRTokeniser
<source lang="java">
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(); }
}</source>
Read Pdf document to string
<source lang="java">
import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowagie.text.PageSize; import com.lowagie.text.Paragraph; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfStamper; 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"); byte[] streamBytes = reader.getPageContent(1); String contentStream = new String(streamBytes); System.out.println(contentStream); 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(); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("HelloWorldStreamHack.pdf")); reader.setPageContent(1, hackedContentStream.getBytes()); stamper.close(); }
}</source>
Tagged PDF
<source lang="java">
import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfName; import com.lowagie.text.pdf.PdfStructureElement; import com.lowagie.text.pdf.PdfStructureTreeRoot; import com.lowagie.text.pdf.PdfWriter; public class MainClass {
public static void main(String[] args) throws Exception { Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("2.pdf")); writer.setTagged(); document.open(); PdfStructureTreeRoot root = writer.getStructureTreeRoot(); PdfStructureElement eTop = new PdfStructureElement(root, new PdfName("Everything")); root.mapRole(new PdfName("Everything"), new PdfName("Sect")); PdfStructureElement e1 = new PdfStructureElement(eTop, PdfName.P); PdfStructureElement e2 = new PdfStructureElement(eTop, PdfName.P); PdfStructureElement e3 = new PdfStructureElement(eTop, PdfName.P); PdfContentByte cb = writer.getDirectContent(); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, false); cb.setLeading(16); cb.setFontAndSize(bf, 12); cb.beginText(); cb.setTextMatrix(50, 700); for (int k = 0; k < 2; ++k) { cb.beginMarkedContentSequence(e2); cb.newlineShowText("text2"); cb.endMarkedContentSequence(); } cb.endText(); document.newPage(); cb.setLeading(16); cb.setFontAndSize(bf, 12); cb.beginText(); cb.setTextMatrix(50, 804); cb.beginMarkedContentSequence(e2); cb.newlineShowText("text2"); cb.endMarkedContentSequence(); cb.endText(); cb.beginMarkedContentSequence(e3); cb.endMarkedContentSequence(); document.close(); }
}</source>
Update a Pdf document
<source lang="java">
import java.io.FileOutputStream; import com.lowagie.text.Document; import com.lowagie.text.Element; import com.lowagie.text.Paragraph; import com.lowagie.text.pdf.BaseFont; import com.lowagie.text.pdf.PdfContentByte; import com.lowagie.text.pdf.PdfReader; import com.lowagie.text.pdf.PdfStamper; import com.lowagie.text.pdf.PdfWriter; public class MainClass {
public static void main(String[] args) throws Exception { Document.rupress = false; Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("2.pdf")); document.open(); document.add(new Paragraph("Hello World")); document.close(); PdfReader reader = new PdfReader("HelloWorld.pdf"); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("updated.pdf"), "\0", true); PdfContentByte cb = stamper.getOverContent(1); cb.beginText(); cb.showTextAligned(Element.ALIGN_LEFT, "Hello People", 36, 770, 0); cb.endText(); stamper.close(); }
}</source>