如何使用iText

时间:2015-07-08 12:35:12

标签: java pdf itext

My PDF我有一个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图片的月份日期内,我想写一些东西,数字或文字。

如果有人能告诉我如何做到这一点会很棒。

1 个答案:

答案 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();
    }
  }
}