Добавление нескольких изображений в один файл PDF с помощью iText с использованием java

У меня есть следующий код, но этот код добавляет только последнее изображение в pdf.

try { filePath = (filePath != null && filePath.endsWith(".pdf")) ? filePath : filePath + ".pdf"; Document document = new Document(); PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filePath)); document.open(); // document.add(new Paragraph("Image Example")); for (String imageIpath : imagePathsList) { // Add Image Image image1 = Image.getInstance(imageIpath); // Fixed Positioning image1.setAbsolutePosition(10f, 10f); // Scale to new height and new width of image image1.scaleAbsolute(600, 800); // image1.scalePercent(0.5f); // Add to document document.add(image1); //document.bottom(); } writer.close(); } catch (Exception e) { LOGGER.error(e.getMessage()); } 

Не могли бы вы дать мне подсказку о том, как обновить код, чтобы добавить все изображения в экспортированный pdf-файл? imagePathsList содержит все пути изображений, которые я хочу добавить в один PDF-файл.

С наилучшими пожеланиями, Аврелиан

Взгляните на пример MultipleImages, и вы обнаружите, что в вашем коде есть две ошибки:

  1. Вы создаете страницу размером 595 x 842 пользовательских единиц и добавляете каждое изображение на эту страницу независимо от размеров изображения.
  2. Вы утверждаете, что добавлено только одно изображение, но это неверно. Вы добавляете все изображения друг к другу на одной странице . Последнее изображение охватывает все предыдущие изображения.

Взгляните на мой код:

 public void createPdf(String dest) throws IOException, DocumentException { Image img = Image.getInstance(IMAGES[0]); Document document = new Document(img); PdfWriter.getInstance(document, new FileOutputStream(dest)); document.open(); for (String image : IMAGES) { img = Image.getInstance(image); document.setPageSize(img); document.newPage(); img.setAbsolutePosition(0, 0); document.add(img); } document.close(); } 

Я создаю экземпляр Document используя размер первого изображения. Затем я перебираю массив изображений, устанавливая размер страницы следующей страницы на размер каждого изображения, прежде чем запускать newPage() [*] . Затем я добавляю изображение в координату 0, 0, потому что теперь размер изображения будет соответствовать размеру каждой страницы.

[*] Метод newPage() действует только если что-то было добавлено на текущую страницу. Когда вы впервые проходите цикл, ничего еще не добавлено, поэтому ничего не происходит. Вот почему вам нужно установить размер страницы в размере первого изображения при создании экземпляра Document .

Android имеет функцию «PdfDocument» для достижения этой цели,

 class Main2Activity : AppCompatActivity() { private var imgFiles: Array? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main2) imgFiles= arrayOfNulls(2) imgFiles!![0] = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/doc1.png") imgFiles!![1] = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + "/doc3.png") val file = getOutputFile(File(Environment.getExternalStorageDirectory().absolutePath) , "/output.pdf") val fOut = FileOutputStream(file) val document = PdfDocument() var i = 0 imgFiles?.forEach { i++ val bitmap = BitmapFactory.decodeFile(it?.path) val pageInfo = PdfDocument.PageInfo.Builder(bitmap.width, bitmap.height, i).create() val page = document.startPage(pageInfo) val canvas = page?.canvas val paint = Paint() canvas?.drawPaint(paint) paint.color = Color.BLUE; canvas?.drawBitmap(bitmap, 0f, 0f, null) document.finishPage(page) bitmap.recycle() } document.writeTo(fOut) document.close() } private fun getOutputFile(path: File, fileName: String): File? { if (!path.exists()) { path.mkdirs() } val file = File(path, fileName) try { if (file.exists()) { file.delete() } file.createNewFile() } catch (e: Exception) { e.printStackTrace() } return file } 

}

наконец, разрешить разрешение хранилища в манифесте, это должно работать

  • Есть ли бесплатный инструмент, который позволит мне печатать на PDF-файлах, а затем сохранять или, по крайней мере, печатать их?
  • Принтер PDF без вмешательства пользователя
  • Просмотр PDF в формах Windows с использованием C #
  • Пакетное преобразование нескольких PDF в изображение на Mac
  • Как извлечь текст из PDF?
  • Удаление водяного знака из PDF iTextSharp
  • Как отобразить PDF через веб-браузер Android без «загрузки» в первую очередь
  • Печать PDF-файла без фона
  • iTextSharp - Как получить позицию слова на странице
  • Извлечение текста pdf в Objective C
  • Преобразование PDF в черно-белый с помощью ghostscript
  • Давайте будем гением компьютера.