Для поддержки кириллицы необходимо не выбрать шрифт при создании, а
подключить к документу. Если использовать популярный шрифт (Например
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();
}
}
/*
* 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();
}
}
Комментариев нет:
Отправить комментарий