iText7 добавляет SVG в PdfDocument и правильно выравнивает изображение SVG в PDF - PullRequest
0 голосов
/ 18 января 2019

Я могу добавить изображение SVG в PDF, используя приведенный ниже код, но выравнивание изображения идет навстречу.Я хотел бы сохранить изображение в ограниченном пространстве (скажем, размер 300 x 300 всегда).Если изображение больше, оно должно сжаться / сжаться и вписаться в этот размер.Как мы можем этого достичь.

PdfDocument doc = null;
try {
    doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\\test.pdf")),
            new WriterProperties().setCompressionLevel(0)));
    doc.addNewPage();

    URL svgUrl = null;
    String svgPath = "...svgPathHere";

    try {
        svgUrl = new URL(svgPath);
    } catch(MalformedURLException mue) {
        System.out.println("Exception caught" + mue.getMessage() );
    }

    if (svgUrl == null){
        try {
            svgUrl = new File(svgPath).toURI().toURL();
        } catch(Throwable th) {
            System.out.println("Exception caught" + th.getMessage());
        }
    }

    SvgConverter.drawOnDocument(svgUrl.openStream(), doc, 1, 100, 200); // 100 and 200 are x and y coordinate of the location to draw at
    doc.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

В дополнение к тому же вопросу, описанному выше, метод drawOnDocument () в SvgConverter предоставляет нам элемент управления для передачи нашего svg через x и y.Есть ли лучший способ справиться с позиционированием?(как сверху слева, сверху справа)

1 Ответ

0 голосов
/ 21 января 2019

В вашем коде вы имеете дело с довольно низкоуровневым API. Хотя ваша задача довольно проста, и низкоуровневый API все еще здесь достаточен, с высокоуровневым API макета вы можете достичь цели гораздо быстрее.

Для начала вы можете повторно использовать свой код для создания PdfDocument и определения URL для SVG-изображения:

PdfDocument doc = new PdfDocument(new PdfWriter(new FileOutputStream(new File("D:\\test.pdf")),
        new WriterProperties().setCompressionLevel(0)));
String svgPath = "...svgPathHere";

Затем, вместо немедленного рисования изображения SVG на странице, вы можете преобразовать его в объект Image из API layout, который можно настроить: масштабировать для соответствия определенным размерам, установить фиксированное положение (левая нижняя точка) и так далее:

Image image = SvgConverter.convertToImage(new FileInputStream(svgPath), doc);
image.setFixedPosition(100, 200);
image.scaleToFit(300, 300);

Чтобы связать все вместе, создайте объект высокого уровня Document и добавьте туда свое изображение. Не забудьте закрыть экземпляр Document. Вам больше не нужно закрывать оригинал PdfDocument:

Document layoutDoc = new Document(doc);
layoutDoc.add(image);

layoutDoc.close();
...