gpt4 book ai didi

java - 奇怪的 IText 7 行为 - 错误

转载 作者:行者123 更新时间:2023-11-30 10:06:17 25 4
gpt4 key购买 nike

我正在使用 ITextPdf 7.1.1 Java Library 为项目创建报告。问题是浏览器内部生成的 pdf 看起来不错。但是,当我将其另存为 pdf 并使用 pdf 阅读器(预览版)打开它时,它会在 div 元素中生成边框。下面是问题的图像。

也许问题出在我用来生成 header 的 PDFCanvas Rectancle 上。

PDF 在浏览器内生成: PDF Generated Inside Browser

保存到磁盘后在预览中打开的 PDF:

PDF Opened In Preview After Saved To Disk

生成 header 的代码如下:

 @Override
public void handleEvent(Event event) {
System.out.println("THIS IS ME: HEADER EVENT HANDLER STARTED.....");


PdfDocumentEvent documentEvent = (PdfDocumentEvent) event;
PdfDocument pdfDoc = documentEvent.getDocument();
PdfPage page = documentEvent.getPage();
Rectangle pageSize = page.getPageSize();
int pageNumber = pdfDoc.getPageNumber(page);

String logoImagePath = null;

ClassLoader classLoader = getClass().getClassLoader();
logoImagePath = classLoader.getResource("/Images/logo.png").getPath();


System.out.println("Page size: " + pageSize.getHeight());

Rectangle rectangle = new Rectangle(pageSize.getLeft() + 30, pageSize.getHeight() - 114, pageSize.getWidth() - 60, 80);
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamBefore(), page.getResources(), pdfDoc);
pdfCanvas.rectangle(rectangle);
pdfCanvas.setFontAndSize(FontsAndStyles.getRegularFont(), 10);
Canvas canvas = new Canvas(pdfCanvas, pdfDoc, rectangle);

Div header = new Div();
header.setBorder(Border.NO_BORDER);

try {
Image logoImage = new Image(ImageDataFactory.create(logoImagePath));
logoImage.setFixedPosition(15, 740);
logoImage.scale(.15f, .15f);

header.add(logoImage);
} catch (MalformedURLException ex) {
ex.printStackTrace();
System.err.println(ex.getMessage());
}

Paragraph paragraph = new Paragraph();
Text text = new Text("\n\n\n");
paragraph.add(text);
paragraph.setFont(FontsAndStyles.getRegularFont());
paragraph.setFontSize(8);
text = new Text("http://www.histopath.gr\n");
paragraph.setTextAlignment(TextAlignment.RIGHT);
paragraph.add(text);
header.add(paragraph);
paragraph = new Paragraph();
text = new Text("Αποκορώνου 66, ΧΑΝΙΑ, Τηλ: 2821002827, Κιν: 6948571893, 6976800330, email: histologypathology@gmail.com");
text.setFont(FontsAndStyles.getRegularFont());
text.setFontSize(8);
paragraph.add(text);
paragraph.setTextAlignment(TextAlignment.JUSTIFIED_ALL);
header.add(paragraph);


header.setTextAlignment(TextAlignment.CENTER);
canvas.add(header);
canvas.setBorder(Border.NO_BORDER);
canvas.close();

}

已将 Vestion 更改为 7.1.5,但我仍然遇到相同的行为。有什么建议么??过去没有其他人遇到过这个问题吗??

最佳答案

请删除这条指令:

pdfCanvas.rectangle(rectangle);

这会在内容中创建一个路径。在路径定义(以及可选的路径裁剪指令)之后,必须紧跟路径绘制指令,参见。以下 ISO 32000-1 中“图 9 – 图形对象”的副本。相反,在您的情况下,您可以

pdfCanvas.setFontAndSize(FontsAndStyles.getRegularFont(), 10);

即您可以添加一条设置字体和大小的指令,而不是所需的路径绘制指令。

因此,生成的页面内容流是无效的。

现在 PDF 查看器通常会尝试理解损坏的内容。在你的情况下,他们必须决定:

  • 他们可以简单地忽略路径定义。 (这是您的浏览器似乎在执行的操作。)
  • 他们会假设您忘记了绘图说明,而只是简单地画出路径。 (这就是您的 PDF 阅读器预览所做的。)

不同状态下允许的指令

Figure 9 – Graphics Objects

(ISO 32000-1 Figure 9 – Graphics Objects)

关于java - 奇怪的 IText 7 行为 - 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54744771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com