从PDF文件创建图像或PdfTemplate [英] Create an Image or PdfTemplate from a PDF file
问题描述
在使用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屋!