понедельник, 19 сентября 2016 г.

Пишем текст поверх скана документа при помощи itextpdf-5.1.0.jar

 Для поддержки кириллицы необходимо не выбрать шрифт при создании, а подключить к документу. Если использовать популярный шрифт (Например times.ttf), то прикреплять его к документу не обязательно, он всегда есть в системе. Ниже скрин проекта и исходники



/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package watermarkpdf;

/**
 *
 * @author brudanovom
 */
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.net.URL;
import java.util.HashMap;

 

public class Layers {


    /**
     * Main method.
     * @param args no arguments needed
     * @throws DocumentException
     * @throws IOException
     */
    public static void main(String[] args) throws IOException, DocumentException {
       
        URL resource = Layers.class.getResource("/times.ttf");
        System.out.println(GenerateLayerEPub("C:\\firebird\\График дежурства.pdf", "C:\\firebird\\График дежурства_draft1.pdf", resource.getPath(),"#1234567890"
                ,"Заголовок", "Автор", "Тема", "Ключ", "Создатель", "Поставщик"
                ));       
    }
   
   
    //Генерируем текст
    public static String GenerateLayerEPub(String pSource, String pResult, String pFontFile, String pText, String pTitle, String pAutor, String pSubject, String pKeyword, String pCreator, String pProducer){
       
        try {
        PdfReader reader = new PdfReader(pSource);
        PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(pResult));
        BaseFont bf = BaseFont.createFont(pFontFile, BaseFont.IDENTITY_H, true/*BaseFont.NOT_EMBEDDED*/); //создаем шрифт
       
        for (int i = 0; i < reader.getNumberOfPages(); i++){
            setText(stamper, reader, bf, i+1, pText);
}
        //Задаем информацию о документе
        HashMap<String, String> info = reader.getInfo();
        info.put("Title", pTitle);
        info.put("Author", pAutor);
        info.put("Subject", pSubject);
        info.put("Keywords", pKeyword);
        info.put("Creator", pCreator);
        info.put("Producer", pProducer);
        stamper.setMoreInfo(info);
       
        reader.close();
        stamper.close();
        return "S";
        }
        catch (Exception e){
            return e.toString();
        }
    }
   
    //Задаем текст
    private static void setText(PdfStamper stamper, PdfReader reader, BaseFont bf, int pgnum, String text){
       
            PdfContentByte canvas;
            canvas = stamper.getOverContent(pgnum); //Подключаем канву к верхнему слою исходного документа
            canvas.beginText(); //начинаем текст
            canvas.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE); //Стиль текста с пустотой
            canvas.setFontAndSize(bf, 20); //задаем шрифт
            canvas.setRGBColorStroke(0xFF, 0x00, 0x00); //цвет заливки белый
            canvas.setRGBColorFill(0xFF, 0xFF, 0xFF); //цвет шрифта красный
            Rectangle pagesize = reader.getPageSizeWithRotation(pgnum);
            //canvas.showTextAlignedKerned(Element.ALIGN_CENTER,text, /*page.getHeight()/2*/pagesize.getWidth()/2, 10, 0); //текст с координатами по x, Y и углом наклона. Снизу по центру
            canvas.showTextAlignedKerned(Element.ALIGN_RIGHT,text, /*page.getHeight()/2*/pagesize.getWidth()-10, pagesize.getHeight()-30, 0); //текст с координатами по x, Y и углом наклона. В правом верхнем углу
            canvas.endText();   
           
           
    }
   
   
}

Комментариев нет:

Отправить комментарий