PDF 文档中当前光标位置

问题描述 投票:0回答:2

我有一个要求,我想在PDF文档的当前光标位置插入图像。可以使用 itextSharp 库吗?如果是,请告诉我可以使用哪些接口来实现这一目标?

c# itext
2个回答
0
投票

问题不清楚。

A. 如果您从头开始创建文档,您可能会使用...

[1.] 一系列

document.add()
调用,您可以在其中添加
Paragraph
PdfPTable
、...

等元素

在这种情况下:

  1. 只需创建一个
    Image
    对象并执行
    document.Add(image);
    在这种情况下,将添加图像。但是,您可能不想更改图像顺序默认值:图像未按顺序添加到 pdf 文档 itextsharp(元素顺序错误)
  2. 如果您确实想要
    document.add()
    序列中的“当前位置”,请使用
    GetVerticalPosition()
    方法,如下所述:如何在 iTextSharp 中查找当前 (X, Y) 位置?

[2.] 在绝对位置添加对象的方法。在这种情况下,实际上并没有光标。

B. 如果您正在谈论向现有文档添加内容,则没有光标。 PDF 只是在页面上的绝对位置绘制的一堆字符和线条。


0
投票

有点晚了,但我想我还是会回答,也许这会节省其他人的时间。

考虑到您已经有一个 PDF,并且需要在其上添加图像,首先您需要以某种方式呈现它。我为此使用了 PdfiumViewer 库。

然后您需要获取点击时的光标位置并将其转换为PDF位置。

这是我能够做到的:

    private void pdfRenderer_MouseClick(object sender, MouseEventArgs e)
    {
        var args = (MouseEventArgs)e;
        _clickX = e.Location.X;
        _clickY = e.Location.Y;

        Point DevicePoint = new Point((int)_clickX, (int)_clickY);
        PdfPoint PDFpoint = pdfRenderer.PointToPdf(DevicePoint);

        float pdfX = PDFpoint.Location.X;
        float pdfY = PDFpoint.Location.Y;

这将为您提供 PDF 文档上位置的 X 和 Y。从这里您只需使用 itext 在其上添加图像即可。这是我带邮票的例子:

    string outputPath = Path.Combine(Path.GetDirectoryName(pdfPath), "Stamped_" + Path.GetFileName(pdfPath));
    using (PdfReader pdfReader = new PdfReader(pdfPath))
    using (PdfWriter pdfWriter = new PdfWriter(outputPath))
    using (iText.Kernel.Pdf.PdfDocument pdfDoc = new iText.Kernel.Pdf.PdfDocument(pdfReader, pdfWriter))
    {
        Document document = new Document(pdfDoc);

        // Add a stamp at the captured position
        Paragraph stamp = new Paragraph("bababa")
            .SetFixedPosition(1, pdfX, pdfY, 50)
            .SetFontSize(12)
            .SetBackgroundColor(iText.Kernel.Colors.ColorConstants.YELLOW);

        document.Add(stamp);
        
    }

此方法适用于不同的缩放/滚动级别以及一次加载多个页面。

© www.soinside.com 2019 - 2024. All rights reserved.