Добавление слоев изображения в PDF с помощью iText 5 или 7 - PullRequest
0 голосов
/ 22 октября 2018

Мне нужно создать PDF-документ с изображениями, которые должны содержаться в слоях.Каждое изображение должно содержаться в слое, чтобы мы могли сделать каждое изображение видимым или нет.

Я знаю, что iText предлагает класс PdfLayer для этой цели, но они не объясняют, как его использовать.Удивительно, но учебники в Интернете не охватывают этот вопрос.

Это небольшое начало:

    // Creating a PdfWriter 
    String dest = "export.pdf"; 
    PdfWriter writer = new PdfWriter(dest);

    // Creating a PdfDocument  
    PdfDocument pdfDoc = new PdfDocument(writer);


    // Adding an empty page 
    //pdfDoc.addNewPage(); 

    // Creating a Document   
    Document document = new Document(pdfDoc); 

    /////////////////////////////////////////////////////////

    // Creating an ImageData object 
    String imageFile = "map.png"; 
    ImageData data = ImageDataFactory.create(imageFile);

    // Creating an Image object 
    Image img = new Image(data);

    PdfLayer pdflayer = new PdfLayer("main layer", pdfDoc);
    pdflayer.setOn(true); 

    /* normally, here where the image should be added to the layer */

Надеюсь на вашу помощь, спасибо!

1 Ответ

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

Вы добавляете изображение в слой, запуская этот слой в PdfCanvas для рисования, добавляя изображение и снова заканчивая слой в нем.

В зависимости от того, хотите ли вы сделать макет содержимогоработать самостоятельно, вы можете сделать добавление изображения непосредственно или через Canvas.

Например:

try (   PdfWriter writer = new PdfWriter(...);
        PdfDocument pdfDoc = new PdfDocument(writer);
        Document document = new Document(pdfDoc)   ) {
    ImageData data = ImageDataFactory.create(IMAGE_DATA);
    Image img = new Image(data);

    PdfLayer pdflayer = new PdfLayer("main layer", pdfDoc);
    pdflayer.setOn(true); 

    // using a Canvas, to allow iText layout'ing the image
    PdfCanvas pdfCanvas = new PdfCanvas(pdfDoc.addNewPage());
    try (   Canvas canvas = new Canvas(pdfCanvas, pdfDoc, document.getPageEffectiveArea(pdfDoc.getDefaultPageSize()))   ) {
        canvas.add(new Paragraph("This image is added using a Canvas:"));
        pdfCanvas.beginLayer(pdflayer);
        canvas.add(img);
        pdfCanvas.endLayer();
        canvas.add(new Paragraph("And this image is added immediately:"));
    }

    // or directly 
    pdfCanvas.beginLayer(pdflayer);
    pdfCanvas.addImage(data, 100, 100, false);
    pdfCanvas.endLayer();
}

( AddImageToLayer test testAddLikeIan)

В соответствии с названием вашего вопроса вы ищете решение для iText 5 или iText 7. Код выше для iText 7, я использовал текущую версию разработки 7.10,4-ПАНОРАМА.

...