提问人:hitesh 提问时间:9/20/2023 更新时间:9/20/2023 访问量:64
使用 itextPDF 将 HTML 转换为 PDF 时的图像问题
Issue with images when converting HTML to PDF using itextPDF
问:
我正在使用 itextPDF 将 html 转换为 pdf,一切按预期工作,但对于转换为 pdf 后的其中一个 GIF 图像,仅显示图像的骨架。这是一个静态的GIF图像,没有动画,只是一个具有透明背景和中心图像的图像。当我通过其他具有透明背景的GIF图像运行代码时,可以按预期工作。我正在使用以下代码将 HTML 转换为 PDF。我附上了该问题的示例图像。示例图像
PdfWriter writer = new PdfWriter(inMemoryStream);
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
HtmlConverter.convertToPdf(test, temp, converterProperties);
temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
pdf.close();
inMemoryStream.close();
答:
-1赞
Teketsel Beyene
9/20/2023
#1
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfMerger;
import com.itextpdf.kernel.pdf.PdfWriter;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
public class HtmlToPdfConverter {
public static void main(String[] args) {
// Replace "test" with your HTML content as a String
String htmlContent = "<html><body><p>Your HTML content here</p></body></html>";
try {
ByteArrayOutputStream inMemoryStream = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(inMemoryStream);
PdfDocument pdf = new PdfDocument(writer);
PdfMerger merger = new PdfMerger(pdf);
ConverterProperties converterProperties = new ConverterProperties();
// Add your custom properties if needed
// converterProperties.set...
// Convert HTML to PDF
InputStream htmlInputStream = new ByteArrayInputStream(htmlContent.getBytes());
HtmlConverter.convertToPdf(htmlInputStream, pdf, converterProperties);
// Close the PDF and perform further operations
pdf.close();
// Now you can work with the generated PDF in 'inMemoryStream'
// ...
inMemoryStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
评论
0赞
mkl
9/20/2023
问题是关于html中特定位图图像的问题。您的 html 片段根本不包含任何图像。那么,您的答案中是否建议不使用图像?
1赞
K J
9/20/2023
#2
如果您了解 PDF 如何处理透明度,这应该不是问题。
无论图像是 TIFF、PNG 还是具有透明度的 GIF,它们都以与 2 张图像类似的方式存储。一个是不透明的 DeviceRGB,另一个是 Alpha 通道,作为黑色的“SoftMask”,我们可以在左列中看到一张图像,在右栏中提到 2 张图像,以及 2 张图像(RGB 覆盖在 SoftMask 上)在中央 PDF 视图中。
这里的问题是图像生成不好,因为SoftMask没有很好地绘制
它应该看起来像这样(遮罩)以在 HTML 或 PDF 中强加,并相应地处理脚影。
关于 PDF 的一个有趣的点是,我们被告知您不能导入“透明”JPG,但也许您现在可以看到此 PDF 如何具有透明度的 JPEG,因此比 GIF(41,679 字节)或 PNG 变体更小(21,674 字节)。并且在分辨率、颜色或色域上看起来并不差。
评论
0赞
hitesh
9/20/2023
谢谢你解释它现在确实有意义。但是,有没有一种方法可以解决此问题,就像某些库对此类图像所做的那样?
评论