Java源码示例:com.lowagie.text.pdf.PdfImportedPage
示例1
private float[] getTransformationMatrix(PdfImportedPage page, int xPos, int yPos, int tableWidth, int tableHeight) {
float pageWidth = page.getWidth();
float pageHeight = page.getHeight();
float scaleX = tableWidth / pageWidth;
float scaleY = tableHeight / pageHeight;
float scale = Math.min(scaleX, scaleY);
// float[] toReturn = {scale, 0f, 0f, scale, xPos, docHeight -
// tableHeight};
float dX = xPos;
float dY = yPos - tableHeight;
float[] toReturn = { scale, 0f, 0f, scale, dX, dY };
return toReturn;
}
示例2
/**
* Responsible for creating a new PDF page and workspace through <code>{@link PdfContentByte}</code> for direct writing to the
* PDF.
*
* @param writer The PDF writer used to write to the new page with.
* @param reader The PDF reader used to read information from the PDF file.
* @param pageNumber The current number of pages in the PDF file, which will be incremented by one inside this method.
*
* @return The PDFContentByte used to access the new PDF page.
* @exception DocumentException
* @exception IOException
*/
protected PdfContentByte startNewPage(PdfWriter writer, PdfReader reader, ModifiableInteger pageNumber) throws DocumentException, IOException {
PdfContentByte retval;
PdfContentByte under;
Rectangle pageSize;
Document pdfDoc;
PdfImportedPage newPage;
pageNumber.increment();
pageSize = reader.getPageSize(FRONT_PAGE);
retval = writer.getDirectContent();
// under = writer.getDirectContentUnder();
if (pageNumber.getInt() > FRONT_PAGE) {
newPage = writer.getImportedPage(reader, CHECK_PAGE_NORMAL);
setCurrentRenderingYPosition(pageSize.top(TOP_MARGIN + CHECK_DETAIL_HEADING_HEIGHT));
}
else {
newPage = writer.getImportedPage(reader, FRONT_PAGE);
setCurrentRenderingYPosition(pageSize.top(TOP_FIRST_PAGE));
}
pdfDoc = retval.getPdfDocument();
pdfDoc.newPage();
retval.addTemplate(newPage, 0, 0);
retval.setFontAndSize(getTextFont(), 8);
return retval;
}
示例3
/**
* Generate pdf for sending response using itext
*
* @param reportFileFullName
* @return
* @throws IOException
* @throws DocumentException
* @throws BadPdfFormatException
*/
protected ByteArrayOutputStream generatePdfOutStream(String reportFileFullName) throws IOException, DocumentException, BadPdfFormatException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// we create a reader for a certain document
PdfReader reader = new PdfReader(reportFileFullName);
reader.consolidateNamedDestinations();
// step 1: creation of a document-object
Document document = new Document(reader.getPageSizeWithRotation(1));
// step 2: we create a writer that listens to the document
PdfCopy writer = new PdfCopy(document, baos);
// step 3: we open the document
document.open();
// we retrieve the total number of pages
int n = reader.getNumberOfPages();
// step 4: we add content
PdfImportedPage page;
for (int i = 0; i < n;) {
++i;
page = writer.getImportedPage(reader, i);
writer.addPage(page);
}
writer.freeReader(reader);
// step 5: we close the document
document.close();
return baos;
}
示例4
/**
* This class can be used to split an existing PDF file.
* @param args the command line arguments
*/
public static void main(String args[]) {
if (args.length != 4) {
System.err.println("arguments: srcfile destfile1 destfile2 pagenumber");
}
else {
try {
int pagenumber = Integer.parseInt(args[3]);
// we create a reader for a certain document
PdfReader reader = new PdfReader(args[0]);
// we retrieve the total number of pages
int n = reader.getNumberOfPages();
System.out.println("There are " + n + " pages in the original file.");
if (pagenumber < 2 || pagenumber > n) {
throw new DocumentException("You can't split this document at page " + pagenumber + "; there is no such page.");
}
// step 1: creation of a document-object
Document document1 = new Document(reader.getPageSizeWithRotation(1));
Document document2 = new Document(reader.getPageSizeWithRotation(pagenumber));
// step 2: we create a writer that listens to the document
PdfWriter writer1 = PdfWriter.getInstance(document1, new FileOutputStream(args[1]));
PdfWriter writer2 = PdfWriter.getInstance(document2, new FileOutputStream(args[2]));
// step 3: we open the document
document1.open();
PdfContentByte cb1 = writer1.getDirectContent();
document2.open();
PdfContentByte cb2 = writer2.getDirectContent();
PdfImportedPage page;
int rotation;
int i = 0;
// step 4: we add content
while (i < pagenumber - 1) {
i++;
document1.setPageSize(reader.getPageSizeWithRotation(i));
document1.newPage();
page = writer1.getImportedPage(reader, i);
rotation = reader.getPageRotation(i);
if (rotation == 90 || rotation == 270) {
cb1.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(i).getHeight());
}
else {
cb1.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
}
while (i < n) {
i++;
document2.setPageSize(reader.getPageSizeWithRotation(i));
document2.newPage();
page = writer2.getImportedPage(reader, i);
rotation = reader.getPageRotation(i);
if (rotation == 90 || rotation == 270) {
cb2.addTemplate(page, 0, -1f, 1f, 0, 0, reader.getPageSizeWithRotation(i).getHeight());
}
else {
cb2.addTemplate(page, 1f, 0, 0, 1f, 0, 0);
}
System.out.println("Processed page " + i);
}
// step 5: we close the document
document1.close();
document2.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
}
示例5
/**
* Reads the pages of an existing PDF file and puts 2 pages from the
* existing doc into one of the new doc.
*/
@Test
public void main() throws Exception {
// we create a reader for a certain document
PdfReader reader = new PdfReader(PdfTestBase.RESOURCES_DIR + "ChapterSection.pdf");
// we retrieve the total number of pages
int n = reader.getNumberOfPages();
// we retrieve the size of the first page
Rectangle psize = reader.getPageSize(1);
float width = psize.getHeight();
float height = psize.getWidth();
// step 1: creation of a document-object
Document document = new Document(new Rectangle(width, height));
// step 2: we create a writer that listens to the document
PdfWriter writer = PdfWriter.getInstance(document, PdfTestBase.getOutputStream("2on1.pdf"));
// step 3: we open the document
document.open();
// step 4: we add content
PdfContentByte cb = writer.getDirectContent();
int i = 0;
int p = 0;
while (i < n) {
document.newPage();
p++;
i++;
PdfImportedPage page1 = writer.getImportedPage(reader, i);
cb.addTemplate(page1, .5f, 0, 0, .5f, 60, 120);
if (i < n) {
i++;
PdfImportedPage page2 = writer.getImportedPage(reader, i);
cb.addTemplate(page2, .5f, 0, 0, .5f, width / 2 + 60, 120);
}
BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
cb.beginText();
cb.setFontAndSize(bf, 14);
cb.showTextAligned(PdfContentByte.ALIGN_CENTER, "page " + p + " of " + ((n / 2) + (n % 2 > 0 ? 1 : 0)),
width / 2, 40, 0);
cb.endText();
}
// step 5: we close the document
document.close();
}
示例6
private String createOneUp(String originalPdfFile) throws IOException, DocumentException {
logger.debug("Started create 1-up file from " + originalPdfFile);
String filename = FilenameUtils.getBaseName(originalPdfFile) + "_1up." + FilenameUtils.getExtension(originalPdfFile);
String tempFilename = FilenameUtils.concat(System.getProperty("java.io.tmpdir"), filename + ".tmp");
filename = FilenameUtils.concat(getPdfFileFolder(), filename);
File tempFile = new File(tempFilename);
//float scale = 0.80f;
PdfReader reader = new PdfReader(originalPdfFile);
Document doc = new Document(PageSize.A4, 0, 0, 0, 0);
//Document doc = new Document(new RectangleReadOnly(606.96f, 850.32f), 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(tempFile));
doc.open();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
doc.newPage();
PdfContentByte cb = writer.getDirectContent();
PdfImportedPage page = writer.getImportedPage(reader, i);
float documentWidth = doc.getPageSize().getWidth();
float documentHeight = doc.getPageSize().getHeight();
if (i > 1) {
documentHeight = documentHeight - 65f;
}
/*float documentHeight = doc.getPageSize().getHeight();
if (i > 1) {
documentHeight = documentHeight - 65f;
}
float documentWidth = doc.getPageSize().getWidth();*/
float pageWidth = page.getWidth();
float pageHeight = page.getHeight();
float widthScale = documentWidth / pageWidth;
float heightScale = documentHeight / pageHeight;
float scale = Math.min(widthScale, heightScale);
float offsetX = (documentWidth - (pageWidth * scale)) / 2;
float offsetY = 0f;
if (i > 1) {
offsetY = 65f;
}
/*
float offsetX = 0f;
if (i > 1) {
offsetX = 65f; //100f
}
//float offsetX = 65f;
float offsetY = ((documentHeight) - (pageHeight * scale)) / 2;*/
cb.addTemplate(page, scale, 0, 0, scale, offsetX, offsetY);
}
doc.close();
overlayLicenceArea(tempFilename, filename, PageLayout.ONE_UP);
logger.debug("Deleting temporary file " + tempFile.getAbsolutePath());
FileUtils.deleteQuietly(tempFile);
logger.debug("Completed create 1-up file from " + originalPdfFile);
return filename;
}
示例7
private String createTwoUp(String originalPdfFile) throws IOException, DocumentException {
logger.debug("Started create 2-up file from " + originalPdfFile);
String filename = FilenameUtils.getBaseName(originalPdfFile) + "_2up." + FilenameUtils.getExtension(originalPdfFile);
String tempFilename = FilenameUtils.concat(System.getProperty("java.io.tmpdir"), filename + ".tmp");
filename = FilenameUtils.concat(getPdfFileFolder(), filename);
File tempFile = new File(tempFilename);
//float scale = 0.60f;
PdfReader reader = new PdfReader(originalPdfFile);
Document doc = new Document(new RectangleReadOnly(842f, 595f), 0, 0, 0, 0);
//Document doc = new Document(new RectangleReadOnly(850.32f, 606.96f), 0, 0, 0, 0);
//doc.setMargins(50f, 50f, 50f, 50f);
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(tempFile));
doc.open();
int totalPages = reader.getNumberOfPages();
for (int i = 1; i <= totalPages; i = i + 2) {
doc.newPage();
PdfContentByte cb = writer.getDirectContent();
PdfImportedPage page = writer.getImportedPage(reader, i); // page #1
float documentWidth = doc.getPageSize().getWidth() / 2;
float documentHeight = doc.getPageSize().getHeight();
if (i > 1) {
documentHeight = documentHeight - 65f;
}
float pageWidth = page.getWidth();
float pageHeight = page.getHeight();
float widthScale = documentWidth / pageWidth;
float heightScale = documentHeight / pageHeight;
float scale = Math.min(widthScale, heightScale);
//float offsetX = 50f;
float offsetX = (documentWidth - (pageWidth * scale)) / 2;
float offsetY = 0f;
if (i > 1) {
offsetY = 65f; //100f
}
cb.addTemplate(page, scale, 0, 0, scale, offsetX, offsetY);
if (i+1 <= totalPages) {
PdfImportedPage page2 = writer.getImportedPage(reader, i+1); // page #2
pageWidth = page.getWidth();
pageHeight = page.getHeight();
widthScale = documentWidth / pageWidth;
heightScale = documentHeight / pageHeight;
scale = Math.min(widthScale, heightScale);
offsetX = ((documentWidth - (pageWidth * scale)) / 2) + documentWidth;
//offsetY = 65f; //100f
cb.addTemplate(page2, scale, 0, 0, scale, offsetX, offsetY);//430f
}
}
doc.close();
overlayLicenceArea(tempFilename, filename, PageLayout.TWO_UP);
logger.debug("Deleting temporary file " + tempFile.getAbsolutePath());
FileUtils.deleteQuietly(tempFile);
logger.debug("Completed create 2-up file from " + originalPdfFile);
return filename;
}
示例8
private String createA5(String originalPdfFile) throws IOException, DocumentException {
logger.debug("Started create A5 file from " + originalPdfFile);
String filename = FilenameUtils.getBaseName(originalPdfFile) + "_a5." + FilenameUtils.getExtension(originalPdfFile);
String tempFilename = FilenameUtils.concat(System.getProperty("java.io.tmpdir"), filename + ".tmp");
filename = FilenameUtils.concat(getPdfFileFolder(), filename);
File tempFile = new File(tempFilename);
//float scale = 0.72906403940886699507389162561576f;
PdfReader reader = new PdfReader(originalPdfFile);
//new RectangleReadOnly(425.16f, 606.96f)
Document doc = new Document(PageSize.A5, 0, 0, 0, 0);
PdfWriter writer = PdfWriter.getInstance(doc, new FileOutputStream(tempFile));
doc.open();
for (int i = 1; i <= reader.getNumberOfPages(); i++) {
doc.newPage();
PdfContentByte cb = writer.getDirectContent();
PdfImportedPage page = writer.getImportedPage(reader, i); // page #1
float documentWidth = doc.getPageSize().getWidth();
float documentHeight = doc.getPageSize().getHeight();
if (i > 1) {
documentHeight = documentHeight - 65f;
}
//float documentHeight = doc.getPageSize().getHeight() - 65f;
float pageWidth = page.getWidth();
float pageHeight = page.getHeight();
float widthScale = documentWidth / pageWidth;
float heightScale = documentHeight / pageHeight;
float scale = Math.min(widthScale, heightScale);
//float offsetX = 50f;
float offsetX = (documentWidth - (pageWidth * scale)) / 2;
float offsetY = 0f;
if (i > 1) {
offsetY = 65f;
}
//float offsetY = ((documentHeight) - (pageHeight * scale)) / 2;
cb.addTemplate(page, scale, 0, 0, scale, offsetX, offsetY);
//cb.addTemplate(page, scale, 0, 0, scale, 50f, 100f);
}
doc.close();
//FileUtils.moveFile(tempFile, new File(filename));
overlayLicenceArea(tempFilename, filename, PageLayout.A5);
logger.debug("Deleting temporary file " + tempFile.getAbsolutePath());
FileUtils.deleteQuietly(tempFile);
logger.debug("Completed create A5 file from " + originalPdfFile);
return filename;
}