首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PdfDocument的copyPagesTo方法或PdfCanvas的copyAsFormXObject将内容从PDF复制到PDF。

PdfDocument的copyPagesTo方法是iText 7库中的一个功能,它允许将一个或多个页面从一个PDF文档复制到另一个PDF文档中。这个方法可以用于创建新的PDF文档,或者将现有的页面添加到已有的PDF文档中。

copyPagesTo方法的语法如下:

代码语言:txt
复制
public void copyPagesTo(int[] pageNumbers, PdfDocument targetDocument)

参数说明:

  • pageNumbers:一个整数数组,表示要复制的页面的页码。例如,如果要复制第1页和第3页,可以传入数组{1, 3}。
  • targetDocument:目标PDF文档,即要将页面复制到的文档。

使用copyPagesTo方法时,需要先创建一个源PDF文档和一个目标PDF文档对象。然后,通过调用源PDF文档的copyPagesTo方法,将指定的页面复制到目标PDF文档中。最后,记得关闭源PDF文档和目标PDF文档对象,以释放资源。

示例代码如下(使用Java语言):

代码语言:txt
复制
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;

public class PdfCopyExample {
    public static void main(String[] args) {
        String sourceFile = "path/to/source.pdf";
        String targetFile = "path/to/target.pdf";
        
        try {
            // 创建源PDF文档对象
            PdfReader sourceReader = new PdfReader(sourceFile);
            PdfDocument sourceDocument = new PdfDocument(sourceReader);
            
            // 创建目标PDF文档对象
            PdfWriter targetWriter = new PdfWriter(targetFile);
            PdfDocument targetDocument = new PdfDocument(targetWriter);
            
            // 复制第1页和第3页到目标PDF文档
            int[] pageNumbers = {1, 3};
            sourceDocument.copyPagesTo(pageNumbers, targetDocument);
            
            // 关闭文档对象
            sourceDocument.close();
            targetDocument.close();
            
            System.out.println("页面复制成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

PdfCanvas的copyAsFormXObject方法是iText 7库中的另一个功能,它允许将一个页面的内容复制为一个Form XObject,并在同一个或不同的PDF文档中多次使用该XObject。这个方法可以用于在PDF文档中创建重复的元素,例如页眉、页脚、水印等。

copyAsFormXObject方法的语法如下:

代码语言:txt
复制
public PdfFormXObject copyAsFormXObject(PdfDocument document)

参数说明:

  • document:要将Form XObject添加到的目标PDF文档。

使用copyAsFormXObject方法时,需要先创建一个源PDF文档对象。然后,通过调用源PDF文档的getPage方法获取要复制的页面对象。接下来,通过调用页面对象的getCanvas方法获取页面的画布对象。最后,通过调用画布对象的copyAsFormXObject方法,将页面内容复制为一个Form XObject,并将该XObject添加到目标PDF文档中。

示例代码如下(使用Java语言):

代码语言:txt
复制
import com.itextpdf.kernel.pdf.PdfCanvas;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;

public class PdfCopyAsFormXObjectExample {
    public static void main(String[] args) {
        String sourceFile = "path/to/source.pdf";
        String targetFile = "path/to/target.pdf";
        
        try {
            // 创建源PDF文档对象
            PdfReader sourceReader = new PdfReader(sourceFile);
            PdfDocument sourceDocument = new PdfDocument(sourceReader);
            
            // 创建目标PDF文档对象
            PdfWriter targetWriter = new PdfWriter(targetFile);
            PdfDocument targetDocument = new PdfDocument(targetWriter);
            
            // 获取要复制的页面对象
            int pageNumber = 1;
            PdfCanvas canvas = sourceDocument.getPage(pageNumber).getCanvas();
            
            // 将页面内容复制为一个Form XObject
            PdfFormXObject formXObject = canvas.copyAsFormXObject(targetDocument);
            
            // 将Form XObject添加到目标PDF文档
            targetDocument.addNewPage().getCanvas().addXObject(formXObject, 0, 0);
            
            // 关闭文档对象
            sourceDocument.close();
            targetDocument.close();
            
            System.out.println("内容复制成功!");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

PdfDocument的copyPagesTo方法和PdfCanvas的copyAsFormXObject方法是在云计算领域中常用的PDF处理技术。它们可以帮助开发人员在云环境中处理PDF文档,实现各种功能,例如创建新的PDF文档、合并PDF文档、提取页面、复制页面内容等。

腾讯云提供了一系列与PDF处理相关的产品和服务,例如腾讯文档服务(Tencent Document Service),可以帮助开发人员在云端进行PDF文档的创建、编辑、转换等操作。具体产品介绍和文档链接可以参考腾讯云的官方网站:https://cloud.tencent.com/document/product/1137

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

itext7知识点研究(PDF编辑)

static class MyEventListener implements IEventListener { private List<Rectangle> rectangles = new ArrayList<>(); @Override public void eventOccurred(IEventData data, EventType type) { if (type == EventType.RENDER_TEXT) { TextRenderInfo renderInfo = (TextRenderInfo) data; Vector startPoint = renderInfo.getDescentLine().getStartPoint(); Vector endPoint = renderInfo.getAscentLine().getEndPoint(); float x1 = Math.min(startPoint.get(0), endPoint.get(0)); float x2 = Math.max(startPoint.get(0), endPoint.get(0)); float y1 = Math.min(startPoint.get(1), endPoint.get(1)); float y2 = Math.max(startPoint.get(1), endPoint.get(1)); rectangles.add(new Rectangle(x1, y1, x2 - x1, y2 - y1)); } } @Override public Set<EventType> getSupportedEvents() { return new LinkedHashSet<>(Collections.singletonList(EventType.RENDER_TEXT)); } public List<Rectangle> getRectangles() { return rectangles; } public void clear() { rectangles.clear(); } } static class MyCharacterEventListener extends MyEventListener { @Override public void eventOccurred(IEventData data, EventType type) { if (type == EventType.RENDER_TEXT) { TextRenderInfo renderInfo = (TextRenderInfo) data; for (TextRenderInfo tri : renderInfo.getCharacterRenderInfos()) { super.eventOccurred(tri, type); } } } }

02

flying-saucer + iText + Freemarker实现pdf的导出, 支持中文、css以及图片

项目中有个需求,需要将合同内容导出成pdf。上网查阅到了 iText , iText 是一个生成PDF文档的开源Java库,能够动态的从XML或者数据库生成PDF,同时还可以对文档进行加密,权限控制,并且还支持Java/C#等,但是iText本身提供的HTML解析器还是不够强大,许多HTML标签和属性无法识别,更悲催的是简单的CSS它不认识,排版调整样式让人头大。那么有没有什么方式能够支持css呢,又查阅到了 flying-saucer, flying-saucer也是导出PDF的一种解决方案,并且是基于iText的开源API,并且实现了CSS解析器,能够很好的支持CSS2.1,以及少量的CSS。最终解决方案定为: flying-saucer + iText +  Freemarker。

01
领券