К сожалению, 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();
}
}
}