Уменьшение содержания в PDF с помощью Java
Программа для сжатия содержимого PDF-документа. Внешний файл jar требуется для импорта в программе. Ниже приведена реализация того же самого.
Подход:
1. Создайте пустой файл PDF.
- Назначьте путь к пустому PDF-файлу строковой переменной.
- Импортируйте PdfWriter из пакета com.itextpdf.kernel.pdf . (PdfWriter позволяет нам записывать контент в наш файл PDF)
- PdfWriter принимает в качестве параметра строковую переменную, представляющую место назначения PDF-файла.
- Инициализируйте объект PdfWriter, передав путь к файлу PDF.
2. Создайте документ, представляющий пустой файл PDF.
- Импортируйте PdfDocument из пакета com.itextpdf.kernel.pdf . (PdfDocument используется для представления PDF-файла в коде. Позже его можно использовать для добавления или изменения различных функций, таких как шрифт, изображения и т. Д.)
- PdfDocument принимает в качестве параметра объект PdfWriter или PdfReader.
- Инициализируйте PdfDocument, передав объект PdfWriter.
3. Повторите вышеуказанные шаги для исходного PDF-файла.
- Назначьте путь к исходному PDF-файлу строковой переменной.
- Импортируйте PdfReader из пакета com.itextpdf.kernel.pdf . (PdfReader позволяет нам читать содержимое нашего файла PDF)
- Передайте путь к исходному PDF-файлу конструктору PdfReader.
- Инициализируйте PdfDocument, передав объект PdfReader.
4. Получите размер страницы из исходного PDF-файла.
- Импортируйте PdfPage из пакета com.itextpdf.kernel.pdf . (PdfPage представляет конкретную страницу в PDF)
- Импортируйте Rectangle из пакета com.itextpdf.kernel.geom .
- Метод getPage (int pageNumber), присутствующий в классе t PdfDocumen, возвращает объект PdfPage конкретной указанной страницы.
- Метод getPageSize (), присутствующий в классе PdfPage, возвращает объект Rectangle конкретного объекта PdfPage.
5. Получите размер страницы из пустого PDF-файла.
- Невозможно получить размер страницы из пустого PDF-файла.
- Итак, чтобы получить размер, мы добавляем новую страницу в пустой PDF-файл с помощью метода addNewPage (), присутствующего в классе PdfDocument. Методы addNewPage () возвращают объект PdfPage.
- Метод getPageSize (), присутствующий в классе PdfPage, возвращает объект Rectangle конкретного объекта PdfPage.
6. Создание уменьшенной версии исходной страницы.
- Импортируйте AffineTransform из пакета com.itextpdf.kernel.geom .
- Новую масштабированную ширину можно рассчитать с помощью (emptyPageWidth / originalPageWidth) / 2.
- Новая масштабированная высота может быть рассчитана с помощью (emptyPageHeight / originalPageHeight) / 2.
- Статический метод getScaleInstance (двойная ширина, двойная высота), присутствующий в классе AffineTransform, возвращает объект AffineTransform с масштабированной шириной и масштабированной высотой.
7. Добавьте уменьшенную версию исходной страницы в пустой PDF-файл.
- Импортируйте PdfCanvas из пакета com.itextpdf.kernel.pdf.canvas .
- Инициализируйте объект PdfCanvas, передав пустую страницу в качестве параметра.
- Добавьте созданную выше матрицу с уменьшенными размерами на пустой холст.
- Скопируйте содержимое с исходной страницы с помощью метода copyAsFormXObject (PdfDocument shrunkenDocument) (возвращает PdfFormXObject) присутствует в классе PdfPage.
- Добавьте скопированную страницу на холст с помощью метода addXObject (PdfXObject xObject, float x, float y).
8. Создайте документ.
- Импорт докумен т из пакета com.itextpdf.layout.
- Объект Document создается, чтобы сделать версию PDF-файла читаемой.
- Один из конструкторов класса Document принимает в качестве параметров объект PdfDocument.
- Инициализируйте объект Document, передав shrunkenDocument в качестве параметра.
- Документ закрывается после создания объекта, чтобы предотвратить утечку памяти.
Примечание. Требуется внешний Jar-файл (загрузите, нажав здесь).
Ниже представлена реализация сжатия PDF:
Ява
// Java program to shrink the contents of a PDF // Importing the necessary libraries required import com.itextpdf.kernel.pdf.*; import com.itextpdf.kernel.geom.Rectangle; import com.itextpdf.kernel.geom.AffineTransform; import com.itextpdf.kernel.pdf.canvas.PdfCanvas; import com.itextpdf.kernel.pdf.xobject.PdfFormXObject; import com.itextpdf.layout.Document; public class Main { public static void main(String[] args) { // Try catch block is used to handle File Exceptions try { // Destination of the empty PDF String shrunkenPath = "/home/mayur/newGFG.pdf" ; // Creating PDF writer object PdfWriter pdfWriter = new PdfWriter(shrunkenPath); // Creating a PdfDocument object for empty pdf PdfDocument shrunkenDocument = new PdfDocument(pdfWriter); // Destination of the original PDF String originalPath = "/home/mayur/GFG.pdf" ; // Creating PDF reader object PdfReader pdfReader = new PdfReader(originalPath); // Creating a PdfDocument object for original // pdf PdfDocument originalDocument = new PdfDocument(pdfReader); // Opening the first page of the original PDF PdfPage orignalPage = originalDocument.getPage( 1 ); // Getting the height and width of the original // PDF Rectangle originalPDFSizes = orignalPage.getPageSize(); // Adding a new page to the empty PDF PdfPage emptyPage = shrunkenDocument.addNewPage(); // Getting the height and width of the empty PDF Rectangle emptyPDFsizes = emptyPage.getPageSize(); // Scaling down the original Pdf page double width = emptyPDFsizes.getWidth() / originalPDFSizes.getWidth(); double height = emptyPDFsizes.getHeight() / originalPDFSizes.getHeight(); // Calculating the new width and height double newWidth = width / 2 ; double newHeight = height / 2 ; // Creating a matrix with new width and new // height AffineTransform affineTransform = AffineTransform.getScaleInstance( newWidth, newHeight); // Creating an empty canvas PdfCanvas canvas = new PdfCanvas(emptyPage); // Adding the matrix created to the empty canvas canvas.concatMatrix(affineTransform); // Copying the content from the original PDF PdfFormXObject pageCopy = orignalPage.copyAsFormXObject( shrunkenDocument); // Adding the copied page to the canvas canvas.addXObject(pageCopy, ( float )newWidth, ( float )newHeight); // Creating a Document object to make the PDF // readable Document doc = new Document(shrunkenDocument); // Closing the documents to prevent memory leaks doc.close(); originalDocument.close(); System.out.println( "Shrunken PDF successfully created" ); } // Catching any unwanted Exceptions catch (Exception e) { System.err.println(e); } } } |
Перед казнью:

Исходный PDF
После казни:

PDF после сжатия содержимого
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по доступной для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .