从PDF文件创建图像或PdfTemplate [英] Create an Image or PdfTemplate from a PDF file

查看:155
本文介绍了从PDF文件创建图像或PdfTemplate的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用itextsharp库生成pdf时,我遇到了这种方法: -

While using the itextsharp library for pdf generation, I came across this method:-

iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(itextsharp.text.pdf.PdfTemplate);

在哪里,我们可以从PdfTemplate获取Image实例。但是,我不知道如何创建PdfTemplate,并且没有构造函数采用pdf文件名或流。

Where, we can get Image instance from a PdfTemplate. But, I don't know how to create a PdfTemplate and there is no constructor taking a pdf file name or stream.

为什么我想要这样:我想创建来自PDF文件的图像,然后将此图像转换为另一个pdf文件。

Why I want this is: I want to create an Image from a PDF file and then isert this image into another pdf file.

任何人都知道如何创建PdfTemplate对象?

Anybody knows how to create PdfTemplate object ?

推荐答案

遗憾的是, PdfTemplate 与您的想法并不完全相同。 iText和iTextSharp是PDF生成器,但不是PDF渲染器,这是将PDF转换为图像所需的内容。

The PdfTemplate unfortunately isn't exactly what you think it is. iText and iTextSharp are PDF generators but not PDF renderers which is what you would need to convert a PDF to an image.

这就是说,您仍然可以实现目标,具体取决于关于你正在寻找的质量。

That said, you can still accomplish your goal, depending on the quality that you're looking for.

PdfTemplate 的一个常见用途是子类 PdfImportedPage 。如果你从 PdfImportedPage 创建图像,你将不会创建JPG或PNG或任何栅格,你'实际上你的页面的完整版本包含在 Image 对象中。这意味着您可以应用转换,例如 ScaleAbsolute()或任何您想要的转换,但是当您将其添加到输出PDF时,任何文本仍将是真实文本(和因此可选择)。这是质量进入的部分。如果你开始缩放 Image 它将(数学上)完美地缩放,但在视觉上它可能在Adobe Reader之类的内容中呈现不完美。如果你放大它会很好,但许多屏幕程序不能很好地渲染小型。这是否是一个问题,我不知道。

One of the more common uses of PdfTemplate is the subclass PdfImportedPage. If you create an Image from a PdfImportedPage you won't be creating a JPG or PNG or anything raster, you'll actually have a full version of your page wrapped up in an Image object. What this means is that you can apply transforms such as ScaleAbsolute() or whatever you want, but when you add it to the output PDF any text will still be true text (and thus selectable). This is the part where the quality comes in. If you start scaling the Image it will (mathematically) scale perfectly, but visually it might render imperfectly within something like Adobe Reader. If you zoom in it will be fine, but many screen programs don't render small type that well. Whether this is an issue for you or not I don't know.

无论如何,下面的代码是一个完整的工作样本,目标是iTextSharp 5.1.1.0。它从现有PDF中读取页面,将其缩放50%并将其添加到输出PDF。

Anyway, the code below is a full working sample targetting iTextSharp 5.1.1.0. It reads a page from an existing PDF, scales it by 50% and adds it to an output PDF.

using System;
using System.ComponentModel;
using System.Text;
using System.Windows.Forms;
using System.IO;
using iTextSharp.text.pdf;
using iTextSharp.text;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //PDF file to pull the first page from
            string inputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Input.pdf");
            //PDF file to output
            string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Output.pdf");


            using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None))
            {
                using (Document doc = new Document())
                {
                    using (PdfWriter w = PdfWriter.GetInstance(doc, fs))
                    {
                        //Open our PDF for writing
                        doc.Open();

                        //We need a reader to pull pages from
                        PdfReader r = new PdfReader(inputFile);

                        //Get the first page of our source PDF
                        PdfImportedPage importedPage = w.GetImportedPage(r, 1);

                        //Insert a new page into our output PDF
                        doc.NewPage();

                        //Create an Image from the imported page
                        iTextSharp.text.Image Img = iTextSharp.text.Image.GetInstance(importedPage);

                        //Just to show why we are using an Image, scale the Image to 50% width and height of the original page
                        Img.ScaleAbsolute(importedPage.Width / 2, importedPage.Height / 2);

                        //Add the Image to the page
                        doc.Add(Img);

                        //Close our output PDF
                        doc.Close();
                    }
                }
            }
            this.Close();
        }
    }
}

这篇关于从PDF文件创建图像或PdfTemplate的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆