자바 는 PDF 문서 내용 편집 및 저장 을 위해 PDFBox 개발 패 키 지 를 사용 합 니 다.
프로그램 은 PDF 문 서 를 만 들 고 읽 고 수정 하 며 저장 합 니 다.
PDF 문서 가 암호 화 되 지 않 았 다 는 전제 가 있 을 수 있 습 니 다. 암호 화 되면 어떻게 합 니까? 저 는 연구 한 적 이 없습니다!
원본 코드 는 다음 과 같 습 니 다:
package com.gloomyfish.ups.pdf.reader;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import org.apache.pdfbox.cos.COSArray;
import org.apache.pdfbox.cos.COSString;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdfparser.PDFStreamParser;
import org.apache.pdfbox.pdfwriter.ContentStreamWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.util.PDFOperator;
import org.apache.pdfbox.util.PDFTextStripper;
/**
* http://pdfbox.apache.org/
*
* @author fish
*
*/
public class PDFReader {
public PDFReader()
{
createHelloPDF();
readPDF();
editPDF();
}
public void createHelloPDF() {
PDDocument doc = null;
PDPage page = null;
try {
doc = new PDDocument();
page = new PDPage();
doc.addPage(page);
PDFont font = PDType1Font.HELVETICA_BOLD;
PDPageContentStream content = new PDPageContentStream(doc, page);
content.beginText();
content.setFont(font, 12);
content.moveTextPositionByAmount(100, 700);
content.drawString("Hello");
content.endText();
content.close();
doc.save("D:\\gloomyfish\\pdfwithText.pdf");
doc.close();
} catch (Exception e) {
System.out.println(e);
}
}
public void readPDF()
{
PDDocument helloDocument;
try {
helloDocument = PDDocument.load(new File(
"D:\\gloomyfish\\pdfwithText.pdf"));
PDFTextStripper textStripper = new PDFTextStripper();
System.out.println(textStripper.getText(helloDocument));
helloDocument.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void editPDF() {
try {
// pdfwithText
PDDocument helloDocument = PDDocument.load(new File("D:\\gloomyfish\\pdfwithText.pdf"));
// PDDocument helloDocument = PDDocument.load(new File("D:\\gloomyfish\\hello.pdf"));
// int pageCount = helloDocument.getNumberOfPages();
PDPage firstPage = (PDPage)helloDocument.getDocumentCatalog().getAllPages().get(0);
// PDPageContentStream content = new PDPageContentStream(helloDocument, firstPage);
PDStream contents = firstPage.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();
string = string.replaceFirst("Hello", "Hello World, fish");
//Word you want to change. Currently this code changes word "Solr" to "Solr123"
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();
string = string.replaceFirst("Hello", "Hello World, fish");
// Currently this code changes word "Solr" to "Solr123"
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(helloDocument);
OutputStream out = updatedStream.createOutputStream();
ContentStreamWriter tokenWriter = new ContentStreamWriter(out);
tokenWriter.writeTokens(tokens);
firstPage.setContents(updatedStream);
helloDocument.save("D:\\gloomyfish\\helloworld.pdf"); //Output file name
helloDocument.close();
// PDFTextStripper textStripper = new PDFTextStripper();
// System.out.println(textStripper.getText(helloDocument));
// helloDocument.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (COSVisitorException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
new PDFReader();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.