1

如果我有一个现有的带有图形的 PDF,并且我只是希望用户能够单击 pdf 上的一个点,然后在单击点放置一个字母,例如 A...B... 等.我认为 ITextSharp 可以处理这样的事情,但坦率地说,我不知道如何完成它。你能提供一些指导吗?

4

5 回答 5

1

这是一个使用商业Quick PDF Library的 C# 示例。

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);
        }

    }
}
于 2009-07-21T15:16:15.427 回答
0

请记住,我只使用过PDFNet SDK来处理 PDF 操作任务,我相信您所询问的一切都可以使用该库来实现,尽管您可能必须处理从单击到位置的坐标转换的一些复杂性文档,然后再次构建矩阵,在写入时将文本定位到您需要的位置。

它们确实提供了一个简单的 WinForms 示例 PDF 查看器应用程序,可以作为您实验的良好起点。

我自己不需要这么深入地进行编辑。文档的起点位于常见问题解答(如何向页面添加水印)和知识库中。API 文档也相当广泛,并且可以在网站上公开获得。

于 2009-07-20T15:16:44.137 回答
0

您是否可能不想加载 PDF,将其转换为可以在应用程序中呈现的内容(即,一些可编辑的文档对象),进行更改,然后将其写回 PDF?

诚然,对于您要完成的工作,这可能需要做很多工作,但我知道的大多数 PDF 工具实际上并没有直接编辑 .PDF。

iTextSharp 可能能够将 .PDF 文件加载到某种文档树中,然后您可以对其进行操作。我会先看看它是否做了这样的事情,然后尝试更改一些节点,或者添加与您的注释相对应的节点。

可能无法实时看到您的更改,因此您可能希望通过将 .PDF 文件的渲染分层为简单的标签对象来“伪造”更改。这可能是最简单的开始方式。

于 2009-07-20T14:58:42.360 回答
0

不,itextsharp 不能这样做,因为 itextsharp 可以操作 pdf 文件,但是无法在 itextsharp 中呈现 pdf。

于 2009-07-20T15:01:30.687 回答
0

您当然可以使用 ITextSharp 向现有 PDF 添加内容。网上有一些示例可以向您展示如何操作。(我已经有一段时间没有这样做了,我的需要是将水印图像添​​加到现有的 PDF 中。)

ITextSharp 不能很好地阅读 PDF,因此您可能希望找到其他内容来显示 PDF。您可能需要在显示 PDF 的任何内容上覆盖一个透明窗口,以便您可以捕捉到点击,但这一切都取决于您找到的查看器。

于 2009-07-20T15:03:20.137 回答