itext7 pdf转图片

Posted

技术标签:

【中文标题】itext7 pdf转图片【英文标题】:itext7 pdf to image 【发布时间】:2016-10-15 00:13:25 【问题描述】:

我正在使用 iText7(java) 并正在寻找一种将 pdf 页面转换为图像的方法。 在较旧的 iText 版本中,您可以这样做:

PdfImportedPage page = writer.getImportedPage(reader, 1);
Image image = Image.getInstance(page);

但是 iText7 没有 PdfImportedPage 。

我的用例,我有一个单页 pdf 文件。我需要添加一个表格并调整 pdf 内容的大小以适合单个页面。在旧的 iText 中,我会创建一个页面,添加表格,将现有的 pdf 页面转换为图像,调整图像大小并将调整大小的图像添加到新页面。在 iText7 中是否有一种新方法可以做到这一点。

感谢布鲁诺的回答,我得到了以下代码:

PdfPage origPage = readerDoc.getPage(1);
Rectangle rect = origPage.getPageSize();
Document document = new Document(writerDoc);
Table wrapperTable = new Table(1);
Table containerTable = new Table(new float[]0.5f,0.5f);
containerTable.setWidthPercent(100);
containerTable.addCell( "col1");
containerTable.addCell("col2");

PdfFormXObject pageCopy = origPage.copyAsFormXObject(writerDoc);
Image image = new Image(pageCopy);
image.setBorder(Border.NO_BORDER);
image.setAutoScale(true);
image.setHeight(rect.getHeight()-250);
wrapperTable.addCell(new Cell().add(containerTable).setBorder(Border.NO_BORDER));
wrapperTable.addCell(new Cell().add(image).setBorder(Border.NO_BORDER));
document.add(wrapperTable);
document.close();
readerDoc.close();

【问题讨论】:

【参考方案1】:

请阅读 iText 7 的官方文档,更具体地说是Chapter 6: Reusing existing PDF documents

在 PDF 中,有 Form XObject 的概念。 Form XObject 是存储在页面内容流之外的一段 PDF 内容,因此 XObject 代表 eXternal Object。在Form XObject 中使用Form 这个词可能会让人感到困惑,因为人们可能会将表单视为带有字段的可填写表单。为了避免这种混淆,我们在 iText 5 中引入了术语 PdfTemplate

您所指的PdfImportedPage 类是PdfTemplate 的子类:它是一段可以在另一个页面中重复使用的PDF 语法。多年来,我们注意到人们也对PdfTemplate这个词感到困惑。

在 iText 7 中,我们回到了基础。在谈论 Form XObject 时,我们使用类 PdfFormXObject。在讨论 PDF 文件中的页面时,我们使用 PdfPage 类。

这就是我们从现有文档中获取PdfPage 的方式:

PdfDocument origPdf = new PdfDocument(new PdfReader(src));
PdfPage origPage = origPdf.getPage(1);

这是我们在新文档中使用该页面的方式:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
PdfFormXObject pageCopy = origPage.copyAsFormXObject(pdf);

如果您想将 pageCopy 用作 Image,只需像这样创建它:

Image image = new Image(pageCopy);

【讨论】:

非常感谢您提供的所有信息。 有人可以指定上面的这个“Image”类存在于哪个命名空间中吗? @woohoo 在 Java 中:com.itextpdf.layout.element.Image;在 C# 中:iText.Layout.Element.Image。请咨询Java API docs 或C# tutorial,所有这些基本问题都会得到解答。 重要提示:我假设您使用的是 iText 7。 如何将此图像设置为图片框? @BrunoLowagie,您能否发布一个如何将转换后的 pdf 保存为 png 图像文件的示例?

以上是关于itext7 pdf转图片的主要内容,如果未能解决你的问题,请参考以下文章

pdf在线怎样转图片

PDF怎么转成图片?

图片转PDF怎样操作?电脑中怎样将图片转PDF

java pdf转图片问题

javaword转pdf图片位置

可以免费PDF转图片的软件?