Я хотел бы программно создавать PDF-файлы с некоторыми векторными изображениями и текстами. iText — одна из лучших библиотек для обработки PDF-файлов в сообществе Java. Поэтому я написал программу с iText, соответствующую моим потребностям. Мои векторные изображения изначально были созданы в Adobe Illustrator, который не поддерживается напрямую в iText. Прочитав примеры iText, я обнаружил, что iText поддерживает файлы SVG, поэтому конвертирую свои векторные графики в SVG. Однако iText по-прежнему отображал эти SVG неправильно. Некоторого цвета не хватало. Вот очень простая демонстрация, позволяющая воспроизвести проблему:
Сначала добавьте зависимости Maven (я использую последнюю версию 9.0.0):
Код: Выделить всё
com.itextpdf
itext-core
9.0.0
pom
Код: Выделить всё
package net.opho.demo;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Image;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.HorizontalAlignment;
import com.itextpdf.svg.converter.SvgConverter;
import java.io.FileInputStream;
public class main {
public static void main(String[] args) throws Exception {
String svgPath = "C:\\develop\\OPhOLogo.svg";
String outputPdfPathDemo = "C:\\develop\\demo.pdf";
try (FileInputStream svg = new FileInputStream(svgPath)) {
PdfDocument pdf = new PdfDocument(new PdfWriter(outputPdfPathDemo));
Image logo = SvgConverter.convertToImage(svg, pdf).setWidth(200).setHorizontalAlignment(HorizontalAlignment.CENTER);
Paragraph text = (new Paragraph("Some texts...")).setFontSize(20);
Document documentDemo = new Document(pdf);
documentDemo.add(logo);
documentDemo.add(text);
documentDemo.close();
}
}
}
В результирующем PDF-файле показано:
который сильно отличается от исходного SVG-файла по цвету!
На мой взгляд, это хороший способ решения эта проблема чтобы избежать использования файлов SVG. Признано, что файлы Adobe Illustrator очень похожи на файлы PDF. Вы можете использовать программу просмотра PDF, чтобы напрямую открывать файлы AI. Так почему бы не встроить AI-файлы напрямую в PDF-файл (как часть)? Я знаю, что многие компоновщики документов (например, компиляторы латекса pdflatex и xelatex) поддерживают включение PDF-файлов в виде рисунков в PDF-файл, но как я могу сделать то же самое с iText? Я могу объединить файлы AI в файл PDF в iText, но такие подходы создают новую страницу в PDF, я просто хочу, чтобы векторный график был частью (например, изображение) страницы PDF. Как я могу это сделать?
Если приведенное выше размышление не является хорошим способом или вы знаете, как устранить ошибку рендеринга SVG, скажите мне. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/792 ... tly-in-ite