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转图片的主要内容,如果未能解决你的问题,请参考以下文章