从PDF文件创建图像或PdfTemplate

tee*_*nup 2 c# pdf-generation itextsharp

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

iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(itextsharp.text.pdf.PdfTemplate);
Run Code Online (Sandbox Code Playgroud)

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

我想要的原因是:我想从PDF文件创建一个图像,然后将该图像转换为另一个pdf文件.

有谁知道如何创建PdfTemplate对象?

Chr*_*aas 6

PdfTemplate遗憾的是不正是你认为它是.iText和iTextSharp是PDF生成器,但不是PDF渲染器,这是将PDF转换为图像所需的内容.

也就是说,您仍然可以实现目标,具体取决于您所寻求的质量.

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

无论如何,下面的代码是一个完整的工作样本,目标是iTextSharp 5.1.1.0.它从现有PDF中读取页面,将其缩放50%并将其添加到输出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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)