'External CSS in Flying Saucer
I would like to know how to include the External CSS in Flying-Saucer.Before that THB I checked with all the available links in StackOverflow
but they are not helpful.That's the reason why made this one my self.
TestCSS.xhtml
renamed version of TestCSS.html
.So content of them are same.
Below (Image 1 ) is the Structure of my Project in Eclipse IDE.If I run the TestCSS.html it will give the page result as Image 2 in Browser.
Below are Code which are not working as External CSS :
This one Working :
<style>
.redFontClass
{
color : red;
}
.blueFontClass
{
color : blue;
}
</style>
This one NOT Working :
<link href="RedCSS.css" rel="stylesheet" type="text/css" />
This one NOT Working :
<link rel="stylesheet"
href="http://localhost:8888/Fly-Sauccer-Web/css/RedCSS.css" type="text/css" />
This one NOT Working :
<link href="file:///C:/Users/Joseph.M/WorkPlace_Struts2/Fly-Sauccer-Web/WebContent/css/RedCSS.css" rel="stylesheet" type="text/css" />
I tried with all the ways including absolute path of css inside of the xhtml also.but css is not getting applied.Please help me to fix the problem.
Image 1
Image 2
RedCSS.css
.fontClass
{
color : red;
}
TestCSS.html
<html>
<head>
<link href="file:///C:/Users/Joseph.M/WorkPlace_Struts2/Fly-Sauccer-Web/WebContent/css/RedCSS.css" rel="stylesheet" type="text/css" />
</head>
<body>
<b>This Should come assss <span class = "fontClass" >Red</span> </b>
</body>
</html>
Java Code :
public static void main(String[] args) throws Exception{
// Path of Input File
String inputFile = "C:\\Users\\Joseph.M\\WorkPlace_Struts2\\Fly-Sauccer-Web\\WebContent\\TestCSS.xhtml";
// Path of Output File
String outputFile = "C:\\Users\\Joseph.M\\WorkPlace_Struts2\\Fly-Sauccer-Web\\output.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream is = new ByteArrayInputStream(FileUtils.readFileToByteArray(new File(inputFile)));
Document doc = builder.parse(is);
is.close();
renderer.setDocument(doc,null);
renderer.layout();
renderer.createPDF(os);
os.close();
}
Solution 1:[1]
Given the structure of the project, <link href="css/RedCSS.css" rel="stylesheet" type="text/css" />
should definitely work.
Here is a working sample :
File struct :
File 1 : testRed.html
<html>
<head>
<link href="css/testRed.css" rel="stylesheet" type="text/css" />
</head>
<body>
Should be <b class="redFontClass">red</b>
</body>
</html>
File 2 : css/testRed.css
.redFontClass {color : red;}
Java code :
String inputFile = "testRed.html";
String outputFile = "testRed.pdf";
OutputStream os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
InputStream is = new ByteArrayInputStream(FileUtils.readFileToByteArray(new File(inputFile)));
Document doc = builder.parse(is);
is.close();
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(os);
os.close();
Solution 2:[2]
I tried an similar thing on my localmachine and i tried it with the solution of obourgain
The response for this way was 302 which means that the resource was found with redirecting but the result of this get was empty.
When i add a / before css all works fine.
<link href="css/testRed.css" rel="stylesheet" type="text/css" />
<link href="/css/testRed.css" rel="stylesheet" type="text/css" />
Solution 3:[3]
I use the "classpath" keyword in a Spring Boot environment.
<link rel="stylesheet" type="text/css" media="all" th:href="@{classpath:templates/style.css}"/>
worked for me.
I hope this helps someone with a Spring Boot + Thymeleaf + Flying Saucer setup.
Solution 4:[4]
Recently I faced a similar problem: it turned out that the CSS file was in a different encoding. You may have the same problem. First, you need to find out the encoding of the file:
file -i <my css file>
And then convert it into UTF-8:
iconv -f <my css file enconding> -t UTF-8 <my css file> > <my css file in utf-8>
In my case, after converting from UTF-16 to UTF-8, a PDF file has been generated.
Solution 5:[5]
Please refer this link. https://web.archive.org/web/20150905173204/http://today.java.net/pub/a/today/2007/06/26/generating-pdfs-with-flying-saucer-and-itext.html
Its mentioned that when you want to use an external css file, you should have a media="print" attribute on the link tag.
link href="file:///C:/Users/Joseph.M/WorkPlace_Struts2/Fly-Sauccer-Web/WebContent/css/RedCSS.css" rel="stylesheet" type="text/css" media="print"
Solution 6:[6]
For me, I just did exactly what Wolf359 did:
A lil bit of detail, this is my html template:
<link th:href="@{classpath:/css/styles.css}" rel="stylesheet" type="text/css" />
And in the Spring Boot project under the src/main/resources
folder, I have
src/main/resources
|
|?? css/
| |?? styles.css
| |
. . . . .
It works like a charm!
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | user |
Solution 3 | |
Solution 4 | Adrian Mole |
Solution 5 | Swaprks |
Solution 6 | Juan Diego |