Java 飞碟中的外部CSS

Java 飞碟中的外部CSS,java,css,flying-saucer,Java,Css,Flying Saucer,我想知道如何在飞碟中包含外部CSS。在此之前,我检查了StackOverflow中的所有可用链接,但它们没有帮助。这就是为什么我自己制作了这个 TestCSS.xhtml重命名了TestCSS.html的版本,所以它们的内容是相同的。 下面(图1)是我在EclipseIDE中的项目结构。如果我运行TestCSS.html,它将在浏览器中以图2的形式给出页面结果 下面是不作为外部CSS使用的代码: public static void main(String[] args) throws Exce

我想知道如何在飞碟中包含外部CSS。在此之前,我检查了
StackOverflow
中的所有可用链接,但它们没有帮助。这就是为什么我自己制作了这个

TestCSS.xhtml
重命名了
TestCSS.html
的版本,所以它们的内容是相同的。 下面(图1)是我在EclipseIDE中的项目结构。如果我运行TestCSS.html,它将在浏览器中以图2的形式给出页面结果

下面是不作为外部CSS使用的代码:

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();
}
TestCSS.html


考虑到项目的结构,
肯定会起作用

以下是一个工作示例:

文件结构:

文件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>
Java代码:

  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();

我在我的本地机器上尝试了一个类似的东西,并用obourgain的解决方案进行了尝试

这种方式的响应是302,这意味着通过重定向找到了资源,但此get的结果是空的。 当我在css之前添加a/时,一切都正常。

我在Spring引导环境中使用“classpath”关键字

<link rel="stylesheet" type="text/css" media="all" th:href="@{classpath:templates/style.css}"/>

为我工作


我希望这能对Spring Boot+Thymeleaf+飞碟设置有所帮助。

最近我遇到了一个类似的问题:原来CSS文件采用了不同的编码。你可能也有同样的问题。首先,您需要找出文件的编码:

file -i <my css file>
文件-i
然后将其转换为UTF-8:

iconv -f <my css file enconding> -t UTF-8 <my css file> > <my css file in utf-8>
iconv-f-t UTF-8>
在我的例子中,从UTF-16转换为UTF-8后,生成了一个PDF文件。

请参考此链接

它提到当你想使用一个外部css文件时,你应该在链接标签上有一个media=“print”属性


链接href=”file:///C:/Users/Joseph.M/WorkPlace_Struts2/Fly-Sauccer Web/WebContent/css/RedCSS.css“rel=”stylesheet“type=”text/css“media=”print“

您检查过css是否正确加载了吗?如果是,你可以做
颜色:红色!重要的
。请解释一下,你所说的“css已加载”是什么意思。我如何检查java中是否加载了css。仅在Web中是可能的。我没有遇到任何问题。java代码中的PDF生成有问题。查看你的项目结构,href不应该是
css/RedCSS.css
?谢谢回复。我也尝试了,但没有用。谢谢回复,但似乎不起作用。你能给我你提到的所有文件的文件夹结构吗?我在回复中添加了我的java项目的屏幕截图。它对我不起作用。你能给我你的电子邮箱号码吗?我会将zip文件发送到您可以找到错误的地方。您最好将其上载到公共文件服务器上,并在问题中添加链接。请解释为什么它对您有效,以及为什么它应该对其他人有效。随机巧合不足以作为挖掘4年前帖子的理由。它不适用于Spring Boot+Thymeleaf+飞碟设置。运行时错误:“org.thymeleaf.exceptions.TemplateProcessingException:Link base”classpath:css/pdfexport.css”不能是上下文相关(/)或页面相关的,除非您实现org.thymeleaf.context.IWebContext接口(上下文属于类:org.thymeleaf.context.context)(offerDetailsPDFTemplate:5)
  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();
<link rel="stylesheet" type="text/css" media="all" th:href="@{classpath:templates/style.css}"/>
file -i <my css file>
iconv -f <my css file enconding> -t UTF-8 <my css file> > <my css file in utf-8>