我有一个PDF文件,我想在特定位置添加文字或数字。 PDF有框,我想将文本放在特定的框中。我使用iText和Java。
我这样做,但我必须硬编码我的文字的x和y。我想知道如何找到我的paragrafs的位置然后把文本放在那里。
lPdfContentByte content = pdfStamper.getUnderContent(1);
ColumnText ct = new ColumnText( content );
ct.setSimpleColumn(200,549,500,10);
ct.setText(new Phrase("4"));
ct.go();
在我的pdf图片的月份日期内,我想写一些东西,数字或文字。
如果有人能告诉我如何做到这一点会很棒。
答案 0 :(得分:0)
现在我有一个解决方案。我可以将现有的pdf保存到文档中,然后添加一些文本,但现有的pdf是两页长,我可以扫描"只有第一页。我怎样才能扫描"我的原始pdf的两页都是一个文件?
这是我的代码
package pdfmodifier;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;
/**
*
* @author Xdeveloper
*/
public class PDFmodifier {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
try {
//create pdf output
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\monthreport-Stamped.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
//load existing pdf
InputStream templateInputStream = new FileInputStream("C:\\monthreport.pdf");
PdfReader reader = new PdfReader(templateInputStream);
PdfImportedPage page = writer.getImportedPage(reader, 1);
//PdfImportedPage page2 = writer.getImportedPage(reader, 2);
//copy first page of my existing pdf
document.newPage();
cb.addTemplate(page, 0, 0);
cb.beginText();
BaseFont f_cn = BaseFont.createFont("C:\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.setFontAndSize(f_cn, 12);
//Namn
cb.setTextMatrix(59, 652); //(xPos, yPos)
String ok = "Patrik Andersson";
cb.showText(ok);
//År
cb.setTextMatrix(257, 712); //(xPos, yPos)
String year = "2015";
cb.showText(year);
cb.endText();
//cb.addTemplate(page2, 0, 0);
document.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
好的,现在我可以将现有pdf的两个页面复制到新目的地pdf。我想,我有我需要的东西。
int n = reader.getNumberOfPages();
System.out.println(n);
for (int i = 1; i <= n; i++) {
document.newPage();
page = writer.getImportedPage(reader, i);
cb.addTemplate(page, 0, i);
}
package pdfmodifier;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.AcroFields;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Set;
/**
*
* author Xdeveloper
*/
public class PDFmodifier {
/**
* @param args the command line arguments
*/
static PdfImportedPage page;
public static void main(String[] args) {
try {
//create output
Document document = new Document(PageSize.A4);
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\monthreport-Stamped.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
//load existing pdf
InputStream templateInputStream = new FileInputStream("C:\\monthreport.pdf");
PdfReader reader = new PdfReader(templateInputStream);
int n = reader.getNumberOfPages();
System.out.println(n);
//copy both pages of my existing pdf to new destination pdf
for (int i = 1; i <= n; i++) {
document.newPage();
page = writer.getImportedPage(reader, i);
cb.addTemplate(page, 0, i);
}
cb.beginText();
BaseFont f_cn = BaseFont.createFont("C:\\calibri.ttf", BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.setFontAndSize(f_cn, 12);
//Namn
cb.setTextMatrix(59, 652); //Add text (x-position, y-position)
String ok = "Patrik Andersson";
cb.showText(ok);
//År
cb.setTextMatrix(257, 707);
String year = "2015";
cb.showText(year);
cb.endText();
document.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
}