我们如何使用 java/struts2 中的 itext 库在 pdf 中添加“.svg”格式的图像
How can we add '.svg' formatted image in pdf using itext library in java/struts2
我有“.svg”格式的图像,我想通过使用 'itext' 库和 'batik' 库编写 PDF 文件和 [=17= 将这些图像包含在 "PDF" 中] 仅支持 jpeg/png/tiff/gif 图片格式。
try{
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream("E://svg.pdf"));
document.open();
document.add(new Paragraph("SVG Example"));
int width = 250;
int height = 250;
PdfContentByte cb = writer.getDirectContent();
PdfTemplate template = cb.createTemplate(width,height);
Graphics2D g2 = template.createGraphics(width,height);
PrintTranscoder prm = new PrintTranscoder();
TranscoderInput ti = new TranscoderInput("E://firoz_trend.xml");//also tried E://firoz_trend.svg
prm.transcode(ti, null);
PageFormat pg = new PageFormat();
Paper pp= new Paper();
pp.setSize(width, height);
pp.setImageableArea(0, 0, width, height);
pg.setPaper(pp);
prm.print(g2, pg, 0);
g2.dispose();
ImgTemplate img = new ImgTemplate(template);
document.add(img);
} catch (Exception e) {
System.out.println("CreatePdf "+e);
}
它给出了一个例外
org.apache.batik.transcoder.TranscoderException: 空
封闭异常:
无法理解 URL 的连接
请帮助我
采用 String
的 TranscoderInput
的构造函数需要一个 URI,而您传递的是文件名,因此它失败了。
在将文件传递给构造函数之前自己打开文件:
TranscoderInput ti = new TranscoderInput(new FileInputStream("E:\firoz_trend.svg"));
(注意,在您自己的代码中,确保文件在您的方法结束时关闭以防止文件描述符泄漏)
我有“.svg”格式的图像,我想通过使用 'itext' 库和 'batik' 库编写 PDF 文件和 [=17= 将这些图像包含在 "PDF" 中] 仅支持 jpeg/png/tiff/gif 图片格式。
try{
PdfWriter writer = PdfWriter.getInstance(document,
new FileOutputStream("E://svg.pdf"));
document.open();
document.add(new Paragraph("SVG Example"));
int width = 250;
int height = 250;
PdfContentByte cb = writer.getDirectContent();
PdfTemplate template = cb.createTemplate(width,height);
Graphics2D g2 = template.createGraphics(width,height);
PrintTranscoder prm = new PrintTranscoder();
TranscoderInput ti = new TranscoderInput("E://firoz_trend.xml");//also tried E://firoz_trend.svg
prm.transcode(ti, null);
PageFormat pg = new PageFormat();
Paper pp= new Paper();
pp.setSize(width, height);
pp.setImageableArea(0, 0, width, height);
pg.setPaper(pp);
prm.print(g2, pg, 0);
g2.dispose();
ImgTemplate img = new ImgTemplate(template);
document.add(img);
} catch (Exception e) {
System.out.println("CreatePdf "+e);
}
它给出了一个例外 org.apache.batik.transcoder.TranscoderException: 空 封闭异常: 无法理解 URL 的连接 请帮助我
采用 String
的 TranscoderInput
的构造函数需要一个 URI,而您传递的是文件名,因此它失败了。
在将文件传递给构造函数之前自己打开文件:
TranscoderInput ti = new TranscoderInput(new FileInputStream("E:\firoz_trend.svg"));
(注意,在您自己的代码中,确保文件在您的方法结束时关闭以防止文件描述符泄漏)