Как вывести изображение на передний план (текста / изображения) или отправить изображение на задний план ((текста / изображения)) в IText7 с помощью Java? - PullRequest
0 голосов
/ 09 ноября 2018

Как вывести изображение на передний план (текста / изображения) или отправить изображение на задний план ((текста / изображения)) в IText7 (7.0.8) с помощью Java?

import java.io.FileNotFoundException;
import java.io.IOException;

import com.itextpdf.io.image.ImageData;
import com.itextpdf.io.image.ImageDataFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfResources;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;

public class AddImageUnderlayToPDF {
    public static void main(String[] args) throws FileNotFoundException, IOException {
        PdfDocument pdfDoc = new PdfDocument(new PdfReader("c:\\Development\\test.pdf"),
                new PdfWriter("c:\\Development\\test_result.pdf"));
        ImageData img = ImageDataFactory.create("c:\\Development\\kishore signature.png");
        PdfCanvas under = new PdfCanvas(pdfDoc.getFirstPage().newContentStreamBefore(), new PdfResources(), pdfDoc);
        under.addImage(img, 100, 0f, 0f, 100, 100, 300, false);
        under.saveState();
        pdfDoc.close();
    }
}

.. но это не работает, оно не показывает изображение в формате PDF. Я также заметил ошибку при открытии PDF:

Acrobat pdf error

Подобный подход работает хорошо для текста, но не для изображений. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 ноября 2018

Ошибка такая же, как в вашем предыдущем вопросе : вы используете объект одноразовых ресурсов, поэтому в результате отсутствует ресурс изображения.

Вы можете исправить это, используя реальные ресурсы страницы. Просто замените

PdfCanvas under = new PdfCanvas(pdfDoc.getFirstPage().newContentStreamBefore(), new PdfResources(), pdfDoc);

от

PdfCanvas under = new PdfCanvas(pdfDoc.getFirstPage().newContentStreamBefore(), pdfDoc.getFirstPage().getResources(), pdfDoc);

Кроме того, бросьте

under.saveState();

строка как saveState имеет смысл только в том случае, если вы позже используете соответствующий restoreState.

...