最近在写一个sprin-boot项目。其中涉及到了PDF跟字体文件的引用。
由于主工程打的是jar包,所以,他不像传统的web项目那样,可以把静态资源放在web-info下面。而我们引用的jar包,给pdf设置水印需要传入引用的路径。
期初在网上查了很多资料,他们jar包下的引用用的是用流引用
如下
ClassPathResource classPathResource = new ClassPathResource("template/contractTemplate.pdf");
try {
InputStream inputStream = classPathResource.getInputStream();
byte b[]=new byte[2048];
inputStream.read(b);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
但是 PdfReader reader = new PdfReader (“路径”)
这里需要传入一个路径,所以用流就不能引用这个给PDF加水印的方法。
后来想到了:
URL url = PdfSetWaterPrint.class.getClassLoader().getResource(".");
// String path = resource.toString();
// System.out.println(path);
// path += "font/msyh.ttf";
或者:
Enumeration<URL> url = ClassLoader.getSystemResources("font/msyh.ttf");
// String url1 = url.getClass().getClassLoader().getResource("font/msyh.ttf")+"";
// ClassPathResource resource = new ClassPathResource("font/msyh.ttf");
来获取路径的方法,
但是一打jar包后就引入不到文件
后来发现只要是静态的资源打jar包就引入不到。
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
<include>**/*.jsp</include>
<include>**/*.ftl</include>
<include>**/*.html</include>
<include>**/*.txt</include>
<include>**/*.pdf</include>
<include>**/*.ttf</include>
</includes>
<excludes>
<exclude>template/*.pdf</exclude>
<exclude>font/*.ttf</exclude>
</excludes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
<include>**/*.ftl</include>
<include>**/*.html</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
后来就想到把标红的给删除,但是删除后就不能引用PDF了,会报空指针。后来就想到了加
<excludes>
<exclude>template/*.pdf</exclude>
<exclude>font/*.ttf</exclude>
</excludes>
打包的过程中把静态资源给过滤掉。
ClassPathResource resource = new ClassPathResource("template/contractTemplate.pdf");
// System.out.println(resource.getFile());
// InputStream stream = resource.getInputStream();
// File targetFile = new File("hetong.pdf");
// FileUtils.copyInputStreamToFile(stream, targetFile);
// BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));