如何使图像不可选

How do I make an image not selectable

我已将图像添加到我的 iTextSharp PDF 文档中,如下所示:

Public Sub CreatePDFFromBitmap(ByVal uPath As String, ByVal uBitmap As Bitmap)

    Dim nFs As System.IO.FileStream = New FileStream(uPath, FileMode.Create)

    Dim nDocument As iTextSharp.text.Document
    Dim nWriter As iTextSharp.text.pdf.PdfWriter
    Dim nCb As iTextSharp.text.pdf.PdfContentByte

    Dim nImgFromBitmap As System.Drawing.Image = DirectCast(uBitmap, System.Drawing.Image)

    Dim nImg As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(nImgFromBitmap, Imaging.ImageFormat.Png)
    Dim bLandscape As Boolean = (nImg.Width > nImg.Height)

    'rotation needs to be set before document is being opened
    If bLandscape Then
        nDocument = New iTextSharp.text.Document(PageSize.A4.Rotate, 0, 0, 0, 0)
    Else
        nDocument = New iTextSharp.text.Document(PageSize.A4, 0, 0, 0, 0)
    End If

    'if an exception is raised here, the following will help:  
    nWriter = iTextSharp.text.pdf.PdfWriter.GetInstance(nDocument, nFs)

    nDocument.Open()

    nCb = nWriter.DirectContent

    nImg.ScaleToFit(nDocument.PageSize.Width, nDocument.PageSize.Height) 'raises dpi size :-)))

    'X-Y-Koordinatensystem 0,0 startet also unten links, nicht oben-links
    nImg.SetAbsolutePosition(0, nDocument.PageSize.Height - nImg.ScaledHeight)
    nCb.AddImage(nImg)

    nDocument.Close()
    nWriter.Close()
    nFs.Close()

End Sub

它工作正常。 但是,当我单击 PDF 中的图像时,它会被选中。 这不是我想要的。 如果我点击PDF中的图片,应该不会被选中。

这是它的样子:图像变成蓝色:

我想在 PDF 中添加可编辑的字段,所以我需要将图像设置为不可选择,否则会使用户感到困惑。

这是一个 pdf 程序规范,与 asp.net 或 vb.net 编程无关。您需要控制 pdf reader 设置。或尝试使用其他格式。

正如 Abdel-Rahman Al-Qawasmi 在他的回答中提到的,完全取决于 PDF 查看器,它可以选择哪些实体,哪些不可以。因此,没有保证的方法可以得到你想要的。

尽管如此,有一些方法可以将图像放入 PDF 中,这会阻止大多数 PDF 查看器的当前版本使其可选择。这些方法要么 将位图图像 转换为非位图实体(例如,通过迭代位图的像素并使用矢量图形为每个像素绘制一个小矩形)或 将位图图像 包装成通常无法选择的东西。

让我们采用后一种方法,将图像包装成页面大小的 PDF 图案,然后用它填充实际页面。您可以通过更换

nCb.AddImage(nImg)

来自

Dim painter As iTextSharp.text.pdf.PdfPatternPainter = nCb.CreatePattern(nDocument.PageSize.Width, nDocument.PageSize.Height)
painter.AddImage(nImg)

nCb.SetColorFill(New iTextSharp.text.pdf.PatternColor(painter))
nCb.Rectangle(0, 0, nDocument.PageSize.Width, nDocument.PageSize.Height)
nCb.Fill()

(这基本上是 中 Java/iText 代码的 VB/iTextSharp 吊坠。)