Для создания ссылок в PDF вы используете PdfAction
, который может быть установлен на Chunk
, который может быть добавлен в Paragraph
. Есть несколько различных типов действий, которые вы можете выбрать, те, которые вам интересны, - это действие NEXTPAGE
и/или действие GotoLocalPage
. Первый пункт делает то, что он говорит, и переходит к следующей странице. Это хорошо, потому что вам не нужно беспокоиться о том, какой номер страницы вы находитесь. Второй пункт позволяет указать конкретный номер страницы для перехода. В своей простейшей форме вы можете сделать:
Chunk ch = new Chunk("Go to next page").SetAction(new PdfAction(PdfAction.NEXTPAGE));
Это создает Chunk
, что вы можете добавить в любом случае вы хотите. При работе с существующим PDF существует несколько способов добавления текста на страницу. Один из способов использования объекта ColumnText
, который имеет метод под названием SetSimpleColumn
, который позволяет вам определить простой прямоугольник, к которому вы можете добавить элементы.
И, наконец, читатели PDF не обрабатывают ссылки по-разному в PDF-документе, кроме как при указании другого курсора. Более конкретно, в отличие от веб-страницы, где гиперссылки превращаются в другой цвет, PDF-файлы не меняют цвет ссылок, если вы их не скажете, поэтому это следует иметь в виду при их создании. Кроме того, при изменении PDF вы вообще никогда не хотите перезаписывать существующий PDF во время процесса, потому что это будет писать что-то, что вы читаете. Иногда это работает, чаще всего это не ломается, иногда тонко. Вместо этого напишите во второй файл, и когда вы полностью закончите, сотрите первый файл и переименуйте второй файл.
Код, приведенный ниже, представляет собой полнофункциональное приложение для WinForms C# 2010, ориентированное на iTextSharp 5.1.2.0. Первая часть кода создает образец PDF под названием «aa.pdf» на рабочем столе. Если у вас уже есть этот файл, вы можете прокомментировать этот раздел, но его здесь, чтобы другие могли воспроизвести этот пример. Вторая часть создает новый файл под названием «bb.pdf» на основе «aa.pdf». Он добавляет две текстовые ссылки в нижней части первой страницы. Первая ссылка продвигает PDF на следующую страницу, а вторая ссылка продвигает PDF к определенному номеру страницы. См. Комментарии в коде для конкретных деталей реализации.
using System;
using System.IO;
using System.Windows.Forms;
using iTextSharp.text;
using iTextSharp.text.pdf;
namespace WindowsFormsApplication1 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e) {
//Files that we'll be working with
string inputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "aa.pdf");
string outputFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "bb.pdf");
//Create a standard PDF to test with, nothing special here
using (FileStream fs = new FileStream(inputFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
using (Document doc = new Document(PageSize.LETTER)) {
using (PdfWriter writer = PdfWriter.GetInstance(doc, fs)) {
doc.Open();
//Create 10 pages with labels on each page
for (int i = 1; i <= 10; i++) {
doc.NewPage();
doc.Add(new Paragraph(String.Format("This is page {0}", i)));
}
doc.Close();
}
}
}
//For the OP, this is where you would start
//Declare some variables to be used later
ColumnText ct;
Chunk c;
//Bind a reader to the input file
PdfReader reader = new PdfReader(inputFile);
//PDFs don't automatically make hyperlinks a special color so we're specifically creating a blue font to use here
iTextSharp.text.Font BlueFont = FontFactory.GetFont("Arial", 12, iTextSharp.text.Font.NORMAL, iTextSharp.text.BaseColor.BLUE);
//Create our new file
using (FileStream fs = new FileStream(outputFile, FileMode.Create, FileAccess.Write, FileShare.None)) {
//Bind a stamper to our reader and output file
using (PdfStamper stamper = new PdfStamper(reader, fs)) {
Chunk ch = new Chunk("Go to next page").SetAction(new PdfAction(PdfAction.NEXTPAGE));
//Get the "over" content for page 1
PdfContentByte cb = stamper.GetOverContent(1);
//This example adds a link that goes to the next page
//Create a ColumnText object
ct = new ColumnText(cb);
//Set the rectangle to write to
ct.SetSimpleColumn(0, 0, 200, 20);
//Add some text and make it blue so that it looks like a hyperlink
c = new Chunk("Go to next page", BlueFont);
//Set the action to go to the next page
c.SetAction(new PdfAction(PdfAction.NEXTPAGE));
//Add the chunk to the ColumnText
ct.AddElement(c);
//Tell the system to process the above commands
ct.Go();
//This example add a link that goes to a specific page number
//Create a ColumnText object
ct = new ColumnText(cb);
//Set the rectangle to write to
ct.SetSimpleColumn(200, 0, 400, 20);
//Add some text and make it blue so that it looks like a hyperlink
c = new Chunk("Go to page 3", BlueFont);
//Set the action to go to a specific page number. This option is a little more complex, you also have to specify how you want to "fit" the document
c.SetAction(PdfAction.GotoLocalPage(3, new PdfDestination(PdfDestination.FIT), stamper.Writer));
//Add the chunk to the ColumnText
ct.AddElement(c);
//Tell the system to process the above commands
ct.Go();
}
}
this.Close();
}
}
}
возможно дубликат http://stackoverflow.com/questions/1848930/how-to-add-a-form-field-to-an-existing-pdf-with-itextsharp –
не простофиля, просто смутно сформулированный вопрос. –