- Saved searches
- Use saved searches to filter your results more quickly
- xiang-lee/pdf-generator
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Создание PDF-файлов в Java
- Зависимости Maven
- Обзор
- Создание Pdf в IText
- Вставка текста в Pdf
- Добавление изображения
- Добавление таблицы
- Шифрование файла
- Создание Pdf в PdfBox
- Вставка текста в Pdf
- Добавление изображений
- Добавление таблиц
- Шифрование файла
- Заключение
- Генерация pdf в java
- Learn Latest Tutorials
- Preparation
- Trending Technologies
- B.Tech / MCA
- Javatpoint Services
- Training For College Campus
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Using Java to generate PDF file
xiang-lee/pdf-generator
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Using Java to generate PDF file
It’s flexible to create your HTML+CSS in freemarkter tempalte to generate the PDF.
It supports for Bookmarks in navigation bar. In the example, users data is from User.java object
If you are using eclipse, you can import «Existing Maven Project», set the PDF output path in Runner.java and run it. Enjoy!
//The output path of your PDF file String outputFilePath = "C:\\PDFSample\\samplePDF.pdf"; //The path of your freemarker template String tampleFile = "freemarker_template.html"; //you can put any variables you want, so that you can use them in freemarker template Map variables = new HashMap(); variables.put("users",users); String htmlStr = HtmlGenerator.generate(tampleFile, variables); PdfGenerator.generate(htmlStr, new FileOutputStream(outputFilePath));
You can easily display the data like HTML + CSS, the users variable is from variables.put(«users»,users) in the example
Создание PDF-файлов в Java
В этой статье мы рассмотрим создание PDF-документов с помощью популярных библиотек iText и PdfBox.
Зависимости Maven
Зависимости в Maven, которые необходимо включить в проект:
com.itextpdf itextpdf 5.5.10 org.apache.pdfbox pdfbox 2.0.4
Актуальные версии библиотек доступны по следующим ссылкам: iText и PdfBox .
Также необходимо добавить ещё одну зависимость, чтобы зашифровать файл. Пакет Bounty Castle Provider включает в себя криптографические алгоритмы и необходим для работы обеих библиотек:
org.bouncycastle bcprov-jdk15on 1.56
Актуальная версия пакета доступна здесь: The Bounty Castle Provider .
Обзор
iText и PdfBox, — это Java-библиотеки, которые используются для создания и управления pdf-файлами. В итоге они выдают одинаковый результат. Но работают библиотеки по-разному.
Создание Pdf в IText
Вставка текста в Pdf
Рассмотрим, как новый файл с текстом “Hello World” вставляется в pdf-файл.
Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("iTextHelloWorld.pdf")); document.open(); Font font = FontFactory.getFont(FontFactory.COURIER, 16, BaseColor.BLACK); Chunk chunk = new Chunk("Hello World", font); document.add(chunk); document.close();
Создание pdf-документа с помощью библиотеки iText основано на операциях с объектами, реализующими интерфейс Elements в объекте Document.
Наименьший элемент, который можно добавить в документ, называется Chunk. Он представляет собой строку с применённым стилем шрифта.
Элементы Chunk могут комбинироваться с другими элементами, такими как параграфы (Paragraphs), разделы (Section) и т. п. В результате этого получаются правильно отформатированные документы.
Добавление изображения
Библиотека iText предоставляет простой способ добавить изображение в документ. Достаточно создать экземпляр объекта Image и добавить его в Document.
Path path = Paths.get(ClassLoader.getSystemResource("Java_logo.png").toURI()) Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("iTextImageExample.pdf")); document.open(); Image img = Image.getInstance(path.toAbsolutePath().toString()); document.add(img); document.close();
Добавление таблицы
Чтобы с помощью iText добавить таблицу в pdf-файл, создаем объект PdfTable, в конструкторе которого указываем количество колонок таблицы. После этого используем метод addCel ,чтобы добавить новые ячейки.
iText будет добавлять строки таблицы по мере заполнения ячеек. Например, если создать таблицу с тремя колонками и добавить в неё 8 ячеек, то первоначально отобразятся только 2 строки по 3 ячейки в каждой.
Рассмотрим приведенный ниже пример:
Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream("iTextTable.pdf")); document.open(); PdfPTable table = new PdfPTable(3); addTableHeader(table); addRows(table); addCustomRows(table); document.add(table); document.close();
Мы создали новую таблицу с тремя столбцами и тремя строками. Первая строка используется в качестве заголовка для столбцов с измененным фоном и шириной границ:
private void addTableHeader(PdfPTable table) < Stream.of("column header 1", "column header 2", "column header 3") .forEach(columnTitle ->< PdfPCell header = new PdfPCell(); header.setBackgroundColor(BaseColor.LIGHT_GRAY); header.setBorderWidth(2); header.setPhrase(new Phrase(columnTitle)); table.addCell(header); >); >
Вторая строка таблицы будет состоять из трёх ячеек с простым текстом без форматирования.
private void addRows(PdfPTable table)
В таблицу можно добавлять не только текстовые ячейки, но и изображения. Кроме этого каждой ячейке можно задать свой стиль и форматирование. В следующем примере мы применяем к ячейкам горизонтальное и вертикальное выравнивание:
private void addCustomRows(PdfPTable table) throws URISyntaxException, BadElementException, IOException
Шифрование файла
Чтобы настроить права доступа к файлу с помощью библиотеки iText, мы будем использовать файл HelloWorld.pdf, созданный ранее.
После загрузки файла с помощью PdfReader создаем объект PdfStamper, Он позволяет добавить в документ дополнительный контент, такой как метаданные, шифрование и т. п.:
PdfReader pdfReader = new PdfReader("HelloWorld.pdf"); PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("encryptedPdf.pdf")); pdfStamper.setEncryption( "userpass".getBytes(), "ownerpass".getBytes(), 0, PdfWriter.ENCRYPTION_AES_256 ); pdfStamper.close();
В нашем примере мы зашифровали файл двумя паролями. Пароль пользователя (“userpass”), который имеет только права на чтение. Пароль владельца (“ownerpass”), применяется как мастер-ключ и предоставляет полный доступ к pdf- файлу.
Если нужно разрешить пользователю печать документа, то вместо 0 (третий параметр метода setEncryption) передаем следующее значение:
Также можно совмещать различные права на файл:
Используя iText для установки разрешений, мы создаём временный pdf-файл. Впоследствии он должен быть удалён, иначе доступ к нему сможет получить любой пользователь.
Создание Pdf в PdfBox
Вставка текста в Pdf
В отличие от iText, библиотека PdfBox предоставляет API, основанный на операциях с потоками. Здесь не существует классов Chunk/Paragraph и т. п. Класс PDDocument является представлением pdf-документа в памяти, куда пользователь добавляет данные с помощью класса PDPageContentStream.
Рассмотрим приведенный ниже пример кода:
PDDocument document = new PDDocument(); PDPage page = new PDPage(); document.addPage(page); PDPageContentStream contentStream = new PDPageContentStream(document, page); contentStream.setFont(PDType1Font.COURIER, 12); contentStream.beginText(); contentStream.showText("Hello World"); contentStream.endText(); contentStream.close(); document.save("pdfBoxHelloWorld.pdf"); document.close();
Добавление изображений
Сначала необходимо загрузить файл и создать объект PDImageXObject. Затем отрисовать его в документе (нужно добавить координаты x и y).
PDDocument document = new PDDocument(); PDPage page = new PDPage(); document.addPage(page); Path path = Paths.get(ClassLoader.getSystemResource("Java_logo.png").toURI()); PDPageContentStream contentStream = new PDPageContentStream(document, page); PDImageXObject image = PDImageXObject.createFromFile(path.toAbsolutePath().toString(), document); contentStream.drawImage(image, 0, 0); contentStream.close(); document.save("pdfBoxImage.pdf"); document.close();
Добавление таблиц
К сожалению, PdfBox не предоставляет методов для создания таблицы. Но можно «нарисовать» её вручную.
Шифрование файла
Библиотека PdfBox предоставляет возможность шифрования создаваемого файла и настройки пользовательских привилегий. При этом ей не требуется уже созданный pdf-документ, поскольку она использует объект PDDocument.
Права доступа для pdf-файла настраиваются с помощью класса AccessPermission. Сначала мы создаём объект StandardProtectionPolicy, который добавляет к файлу защиту паролем для пользователя и владельца.
PDDocument document = new PDDocument(); PDPage page = new PDPage(); document.addPage(page); AccessPermission accessPermission = new AccessPermission(); accessPermission.setCanPrint(false); accessPermission.setCanModify(false); StandardProtectionPolicy standardProtectionPolicy = new StandardProtectionPolicy("ownerpass", "userpass", accessPermission); document.protect(standardProtectionPolicy); document.save("pdfBoxEncryption.pdf"); document.close();
В приведенном выше примере пользовательский пароль открывает файл без права печати и изменения.
Заключение
Мы рассмотрели создание pdf-файла с помощью двух популярных Java- библиотек. Полный код примеров, приведенных в этой статье, доступен на GitHub .
Сергей Бензенко автор-переводчик статьи « Creating PDF Files in Java »
Пожалуйста, опубликуйте свои комментарии по текущей теме материала. За комментарии, подписки, дизлайки, лайки, отклики огромное вам спасибо!
Генерация pdf в java
Learn Latest Tutorials
Preparation
Trending Technologies
B.Tech / MCA
Javatpoint Services
JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.
- Website Designing
- Website Development
- Java Development
- PHP Development
- WordPress
- Graphic Designing
- Logo
- Digital Marketing
- On Page and Off Page SEO
- PPC
- Content Development
- Corporate Training
- Classroom and Online Training
- Data Entry
Training For College Campus
JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week
Like/Subscribe us for latest updates or newsletter