質問を検索しましたが、特定の問題の解決策を見つけることができませんでした。私がする必要があるのは、画像とCSSスタイルを含むHTMLファイルをPDFに変換することです。私はiText5を使用しており、生成されたPDFにスタイルを含めることができました。しかし、私はまだ画像を含めて苦労しています。以下にコードを含めました。絶対パスの画像は生成されたPDFに含まれますが、相対パスの画像は含まれません。 AbstractImageProviderを実装する必要があることはわかっていますが、その方法がわかりません。どんな助けでも大歓迎です。
Javaファイル:
public class Converter {
static String in = "C:/Users/APPS/Desktop/Test_Html/index.htm";
static String out = "C:/Users/APPS/Desktop/index.pdf";
static String css = "C:/Users/APPS/Desktop/Test_Html/style.css";
public static void main(String[] args) {
try {
convertHtmlToPdf();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void convertHtmlToPdf() throws DocumentException, IOException {
Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(out));
document.open();
XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document, new FileInputStream(in), new FileInputStream(css));
document.close();
System.out.println("PDF Created!");
}
/**
* Not sure how to implement this
* @author APPS
*
*/
public class myImageProvider extends AbstractImageProvider {
@Override
public String getImageRootPath() {
// TODO Auto-generated method stub
return null;
}
}
}
Htmlファイル:
<!DOCTYPE html>
<html lang="en">
<head>
<title>HTML to PDF</title>
<link href="style.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h1>HTML to PDF</h1>
<p>
<span class="itext">itext</span> 5.4.2
<span class="description"> converting HTML to PDF</span>
</p>
<table>
<tr>
<th class="label">Title</th>
<td>iText - Java HTML to PDF</td>
</tr>
<tr>
<th>URL</th>
<td>http://wwww.someurl.com</td>
</tr>
</table>
<div class="center">
<h2>Here is an image</h2>
<div>
<img src="images/Vader_TFU.jpg" />
</div>
<div>
<img src="https://www.w3schools.com/images/picture.jpg" alt="Mountain" />
</div>
</div>
</body>
</html>
Cssファイル:
h1 {
color: #ccc;
}
table tr td {
text-align: center;
border: 1px solid gray;
padding: 4px;
}
table tr th {
background-color: #84C7FD;
color: #fff;
width: 100px;
}
.itext {
color: #84C7FD;
font-weight: bold;
}
.description {
color: gray;
}
.center {
text-align: center;
}
以下はiText55.5.12バージョンに基づいています
次のディレクトリ構造があるとします。
このコードと最新のiText5を使用すると:
package converthtmltopdf;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorker;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.itextpdf.tool.xml.html.Tags;
import com.itextpdf.tool.xml.net.FileRetrieve;
import com.itextpdf.tool.xml.net.FileRetrieveImpl;
import com.itextpdf.tool.xml.parser.XMLParser;
import com.itextpdf.tool.xml.pipeline.css.CSSResolver;
import com.itextpdf.tool.xml.pipeline.css.CssResolverPipeline;
import com.itextpdf.tool.xml.pipeline.end.PdfWriterPipeline;
import com.itextpdf.tool.xml.pipeline.html.AbstractImageProvider;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipeline;
import com.itextpdf.tool.xml.pipeline.html.HtmlPipelineContext;
import com.itextpdf.tool.xml.pipeline.html.LinkProvider;
import Java.io.FileInputStream;
import Java.io.FileOutputStream;
import Java.io.IOException;
/**
*
* @author george.mavrommatis
*/
public class ConvertHtmlToPdf {
public static final String HTML = "C:\\Users\\zzz\\Desktop\\itext\\index.html";
public static final String DEST = "C:\\Users\\zzz\\Desktop\\itext\\index.pdf";
public static final String IMG_PATH = "C:\\Users\\zzz\\Desktop\\itext\\";
public static final String RELATIVE_PATH = "C:\\Users\\zzz\\Desktop\\itext\\";
public static final String CSS_DIR = "C:\\Users\\zzz\\Desktop\\itext\\";
/**
* Creates a PDF with the words "Hello World"
* @param file
* @throws IOException
* @throws DocumentException
*/
public void createPdf(String file) throws IOException, DocumentException {
// step 1
Document document = new Document();
// step 2
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
// step 3
document.open();
// step 4
// CSS
CSSResolver cssResolver =
XMLWorkerHelper.getInstance().getDefaultCssResolver(false);
FileRetrieve retrieve = new FileRetrieveImpl(CSS_DIR);
cssResolver.setFileRetrieve(retrieve);
// HTML
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
htmlContext.setImageProvider(new AbstractImageProvider() {
public String getImageRootPath() {
return IMG_PATH;
}
});
htmlContext.setLinkProvider(new LinkProvider() {
public String getLinkRoot() {
return RELATIVE_PATH;
}
});
// Pipelines
PdfWriterPipeline pdf = new PdfWriterPipeline(document, writer);
HtmlPipeline html = new HtmlPipeline(htmlContext, pdf);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(new FileInputStream(HTML));
// step 5
document.close();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException, DocumentException {
// TODO code application logic here
new ConvertHtmlToPdf().createPdf(DEST);
}
}
そしてここに結果があります:
この例では、次のコードを使用しています。 https://developers.itextpdf.com/examples/xml-worker-itext5/xml-worker-examples
お役に立てれば