我遇到了一个奇怪的问题,从生成的pdf的 iText7
. 生成的pdf在中正确打开 Adobe reader
以及 Chrome browser
. 但同样的pdf文件也有一部分是在 Firefox
浏览器。我在firefox中收到以下消息。奇怪的是另一个pdf,它不是通过 iText
在firefox中正确呈现。
java代码
public static byte[] createPdf(List<String> htmlPages, PageSize pageSize, boolean rotate) throws IOException {
ConverterProperties properties = new ConverterProperties();
// Register classpath protocol handler to be able to load HTML resources from class patch
org.apache.catalina.webresources.TomcatURLStreamHandlerFactory.register();
properties.setBaseUri("classpath:/");
// properties.setBaseUri(baseUri);
FontProvider fontProvider = new DefaultFontProvider(true,false,false);
properties.setFontProvider(fontProvider);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
PdfDocument pdf = new PdfDocument(new PdfWriter(byteArrayOutputStream));
PdfMerger merger = new PdfMerger(pdf);
for (String htmlPage : htmlPages) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfDocument temp = new PdfDocument(new PdfWriter(baos));
if(rotate) {
temp.setDefaultPageSize(pageSize.rotate()); /**Page Size and Orientation */
} else {
temp.setDefaultPageSize(pageSize); /**Page Size and Orientation */
}
HtmlConverter.convertToPdf(htmlPage, temp, properties);
temp = new PdfDocument(new PdfReader(new ByteArrayInputStream(baos.toByteArray())));
merger.merge(temp, 1, temp.getNumberOfPages());
temp.close();
}
pdf.close();
byteArrayOutputStream.flush(); // Tried this
byteArrayOutputStream.close(); // Tried this
byte[] byteArray = byteArrayOutputStream.toByteArray();
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
try (FileOutputStream fileOuputStream = new FileOutputStream("D:\\Labels\\Label_"+timestamp.getTime()+".pdf")){
fileOuputStream.write(byteArray);
}
return byteArray;
}
提前谢谢。
编辑1:你可以找到pdf和html/css的复制问题在这里。
1条答案
按热度按时间avwztpqn1#
当您使用base64uri将图像嵌入html时,条形码的图像发生了一些奇怪的事情:而不是205×59位图图像
labelData/barcode.png
你嵌入了一个39578×44图像(是的,一个比高宽近千倍的图像……)文本
HtmlConverter
嵌入的图像很好,但显然firefox在显示具有这些尺寸的图像时有问题,即使(或者可能是因为?)它在标签上被转换成所需的尺寸(大约比高宽四倍)。至少我的firefox安装停止在这里绘制标签内容(注意,在pdf内容中绘制的顺序与html元素的顺序不同;特别是在pdf中3232000...
在条形码之前绘制,而不是之后!)在firefox上:
在acrobat reader上:
因此,您可能需要检查条形码图像到html文件中base64图像uri的转换。