c # PDF Манипуляции - PullRequest
1 голос
/ 20 июля 2009

Если у меня есть существующий PDF-файл с графическим изображением, и я просто хочу, чтобы пользователь мог щелкнуть точку в PDF-файле и вставить букву в точке щелчка, например, A ... B. ... и т. д. Я думаю, что ITextSharp может справиться с чем-то подобным, но, честно говоря, я не уверен, как это сделать. Можете ли вы предложить руководство?

Ответы [ 5 ]

1 голос
/ 21 июля 2009

Вот пример C # с использованием коммерческой Quick PDF Library .

using System;
using System.IO;
using System.Drawing;
using System.Windows.Forms;
using QuickPDFAX0714;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private string LicenseKey = " your key here ";
        private string OriginalFileName = "D:\\QuickPDFLibrary\\hello1.pdf";
        private string NewFileName = "D:\\QuickPDFLibrary\\hello2.pdf";

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            ShowPDF(OriginalFileName);
        }

        private void ShowPDF(string fileName)
        {
            PDFLibrary qp = new PDFLibrary();
            qp.UnlockKey(LicenseKey);
            qp.LoadFromFile(fileName);

            // Fit width of PDF to width of picture box
            int dpi = Convert.ToInt32((pictureBox1.Width * 72) / qp.PageWidth());
            byte[] bmpData = (byte[])qp.RenderPageToVariant(dpi, 1, 0);

            MemoryStream ms = new MemoryStream(bmpData);
            Bitmap bmp = new Bitmap(ms);
            pictureBox1.Image = bmp;

            ms.Dispose();
        }

        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
        {
            PDFLibrary qp = new PDFLibrary();
            qp.UnlockKey(LicenseKey);
            qp.LoadFromFile(OriginalFileName);

            // Calculate co-ordinates, width of PDF fitted to width of PictureBox
            double xpos = ((double)e.X / (double)pictureBox1.Width) * qp.PageWidth();
            double ypos = qp.PageHeight() - ((double)e.Y / (double)pictureBox1.Width) * qp.PageWidth();

            qp.SetTextSize(24);
            qp.SetTextColor(1, 0, 0);
            qp.DrawText(xpos, ypos, "A");

            qp.SaveToFile(NewFileName);
            ShowPDF(NewFileName);
        }

    }
}
0 голосов
/ 20 июля 2009

Учитывая, что я когда-либо использовал PDFNet SDK для задач манипулирования PDF, я считаю, что все, о чем вы просите, может быть достигнуто с помощью этой библиотеки, хотя вам, возможно, придется столкнуться с некоторой сложностью с помощью координат преобразование от щелчка к месту в документе, и снова к построению матрицы, которая находит текст там, где он нужен при записи.

Они предоставляют простое приложение для просмотра PDF-файлов WinForms, которое может послужить хорошей отправной точкой для ваших экспериментов.

Мне не нужно было так глубоко углубляться в редактирование. Отправной точкой для документации являются FAQ (Как добавить водяной знак на страницу) и база знаний . Документация по API также довольно обширна и общедоступна на веб-сайте.

0 голосов
/ 20 июля 2009

Нет, itextsharp не может этого сделать, поскольку itextsharp может манипулировать pdf-файлами, но нет способа визуализации pdf в itextsharp.

0 голосов
/ 20 июля 2009

Вы, безусловно, можете использовать ITextSharp для добавления содержимого в существующий PDF. В Интернете есть примеры, которые могут показать вам, как это сделать. (Прошло много времени с тех пор, как я это сделал, и мне нужно было добавить изображения водяных знаков в существующие PDF-файлы.)

ITextSharp плохо читает PDF-файлы, поэтому вам, вероятно, захочется найти что-то еще для отображения PDF. Вам может понадобиться наложить прозрачное окно поверх того, что отображает PDF, чтобы вы могли поймать щелчок, но это все зависит от зрителя, которого вы найдете.

0 голосов
/ 20 июля 2009

Разве вы, возможно, не захотите загрузить PDF, превратить его во что-то, что вы можете отобразить в своем приложении (например, в некоторый редактируемый объект документа), внести изменения, а затем записать его обратно в PDF?

Конечно, это, вероятно, большая работа для того, что вы пытаетесь выполнить, но большинство известных мне инструментов PDF на самом деле не редактируют .PDF напрямую.

iTextSharp может иметь возможность загружать файлы .PDF в какое-то дерево документов, которым вы можете манипулировать. Я бы начал с того, чтобы посмотреть, будет ли это так, а затем попытался бы изменить некоторые узлы или, возможно, добавить узлы, соответствующие вашим аннотациям.

Может быть невозможно увидеть ваши изменения отраженными в реальном времени, поэтому вы, вероятно, захотите «подделать» изменения, наложив их поверх вашего рендера файла .PDF в виде простых объектов меток. Это, наверное, самый простой способ начать.

...